38 for (
int i = 0; i < kNumAngles; ++i) {
48 .quadTo(100, 100, -10, 0)
52 .quadTo(100, 100, -5, 0)
56 .quadTo(100, 100, -2, 0)
60 .quadTo(100, 100, -2 + 306.0f / 4, 75)
64 .quadTo(100, 100, -1, 0)
68 .quadTo(100, 100, 0, 0)
72 .quadTo(100, 100, 75, 75)
79 .cubicTo(5, 6, 5, 4, 4, 0)
84 .lineTo( 4.32787323f, 1.67212653f)
85 .cubicTo(2.75223875f, 3.24776125f,
86 3.00581908f, 4.51236057f,
87 3.7580452f, 4.37367964f)
88 .cubicTo(4.66472578f, 3.888381f,
118 constexpr SkScalar kStartAngle = 262.59717f;
125 bug.
addArc(circle, kStartAngle, kSweepAngle);
141 constexpr SkAlpha kAlphaValue[] = { 0xFF, 0x40 };
154 for (
int p = 0; p < fPaths.
size(); ++p) {
155 for (
size_t a = 0;
a < std::size(kAlphaValue); ++
a) {
156 for (
int aa = 0; aa < 2; ++aa) {
157 for (
size_t w = 0;
w < std::size(
kWidths);
w++) {
158 const SkRect& bounds = fPaths[p].getBounds();
160 if (
x + bounds.width() > wrapX) {
169 paint.setARGB(kAlphaValue[
a], 0, 0, 0);
175 canvas->
translate(-bounds.fLeft, -bounds.fTop);
179 maxH = std::max(maxH, bounds.height());
193 using INHERITED =
GM;
198 paint.setStrokeCap(cap);
200 paint.setAntiAlias(aa);
207 path.quadTo(60, 20, 70, 20);
208 path.conicTo(70, 10, 80, 10, 0.707f);
212 path.cubicTo(90, 20, 100, 20, 100, 10);
213 path.lineTo(110, 10);
219 const bool aliases[] = {
false,
true };
222 for (
auto alias : aliases) {
225 for (
auto cap : caps) {
230 canvas->translate(120, 0);
237 paint.setStrokeWidth(1);
238 paint.setAntiAlias(
true);
251 canvas->translate(45, -25);
255 canvas->translate(-185, -150);
259 canvas->translate(-275, -200);
263 canvas->translate(-385, -260);
269DEF_GM(
return new HairlinesGM; )
constexpr SkColor SK_ColorBLUE
constexpr SkColor SK_ColorRED
constexpr SkColor SK_ColorBLACK
constexpr SkColor SK_ColorGREEN
#define SkDegreesToRadians(degrees)
#define SkScalarSin(radians)
#define SkScalarCos(radians)
static constexpr bool SkToBool(const T &x)
void translate(SkScalar dx, SkScalar dy)
void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const SkPaint &paint)
void drawPath(const SkPath &path, const SkPaint &paint)
@ kButt_Cap
no stroke extension
@ kStroke_Style
set to stroke geometry
SkPathBuilder & lineTo(SkPoint pt)
SkPathBuilder & addArc(const SkRect &oval, SkScalar startAngleDeg, SkScalar sweepAngleDeg)
SkPathBuilder & moveTo(SkPoint pt)
SkISize getISize() override
void onDraw(SkCanvas *canvas) override
void onOnceBeforeDraw() override
SkString getName() const override
#define DEF_SIMPLE_GM(NAME, CANVAS, W, H)
static void draw_subdivided_quad(SkCanvas *canvas, int x0, int y0, int x1, int y1, SkColor color)
static void draw_squarehair_tests(SkCanvas *canvas, SkScalar width, SkPaint::Cap cap, bool aa)
static const SkScalar kWidths[]
static constexpr SkISize Make(int32_t w, int32_t h)
static constexpr SkRect MakeLTRB(float l, float t, float r, float b)