| Index: gm/addarc.cpp
|
| diff --git a/gm/addarc.cpp b/gm/addarc.cpp
|
| index 0a1876b2dc9367cf591867dd0ef674028ec6905e..ff67af22fcde36df7bd7c68937bb3ed79b7c4508 100644
|
| --- a/gm/addarc.cpp
|
| +++ b/gm/addarc.cpp
|
| @@ -219,10 +219,13 @@ DEF_GM( return new FillCircleGM; )
|
| //////////////////////
|
|
|
| static void html_canvas_arc(SkPath* path, SkScalar x, SkScalar y, SkScalar r, SkScalar start,
|
| - SkScalar end, bool ccw) {
|
| + SkScalar end, bool ccw, bool callArcTo) {
|
| SkRect bounds = { x - r, y - r, x + r, y + r };
|
| SkScalar sweep = ccw ? end - start : start - end;
|
| - path->arcTo(bounds, start, sweep, false);
|
| + if (callArcTo)
|
| + path->arcTo(bounds, start, sweep, false);
|
| + else
|
| + path->addArc(bounds, start, sweep);
|
| }
|
|
|
| // Lifted from canvas-arc-circumference-fill-diffs.html
|
| @@ -269,7 +272,7 @@ protected:
|
| SkPath path;
|
| path.moveTo(0, 2);
|
| html_canvas_arc(&path, 18, 15, 10, startAngle, startAngle + (sweepAngles[j] * sign),
|
| - anticlockwise);
|
| + anticlockwise, true);
|
| path.lineTo(0, 28);
|
| canvas->drawPath(path, paint);
|
| canvas->translate(30, 0);
|
| @@ -283,3 +286,37 @@ private:
|
| typedef skiagm::GM INHERITED;
|
| };
|
| DEF_GM( return new ManyArcsGM; )
|
| +
|
| +// Lifted from https://bugs.chromium.org/p/chromium/issues/detail?id=640031
|
| +class TinyAngleBigRadiusArcsGM : public skiagm::GM {
|
| +public:
|
| + TinyAngleBigRadiusArcsGM() {}
|
| +
|
| +protected:
|
| + SkString onShortName() override { return SkString("tinyanglearcs"); }
|
| +
|
| + SkISize onISize() override { return SkISize::Make(620, 330); }
|
| +
|
| + void onDraw(SkCanvas* canvas) override {
|
| + SkPaint paint;
|
| + paint.setAntiAlias(true);
|
| + paint.setStyle(SkPaint::kStroke_Style);
|
| +
|
| + canvas->translate(50, 50);
|
| +
|
| + SkPath path;
|
| + path.moveTo(50, 20);
|
| + path.lineTo(50, 0);
|
| + // A combination of tiny sweepAngle + large radius, we should draw a line.
|
| + html_canvas_arc(&path, 50, 100000, 100000, 270, 270.0f - 0.00572957795f,
|
| + false, true);
|
| + path.lineTo(60, 20);
|
| + html_canvas_arc(&path, 50, 100000, 99980, 270.0f - 0.00572957795f, 270,
|
| + false, false);
|
| + canvas->drawPath(path, paint);
|
| + }
|
| +
|
| +private:
|
| + typedef skiagm::GM INHERITED;
|
| +};
|
| +DEF_GM( return new TinyAngleBigRadiusArcsGM; )
|
|
|