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; ) |