Index: gm/addarc.cpp |
diff --git a/gm/addarc.cpp b/gm/addarc.cpp |
index 9280140794af70413a949847c64fde74d9171efd..bb973089c98bcf541ebaeaad44cdf5c153fe840a 100644 |
--- a/gm/addarc.cpp |
+++ b/gm/addarc.cpp |
@@ -163,6 +163,54 @@ private: |
}; |
DEF_GM( return new StrokeCircleGM; ) |
+// Fill circles and rotate them to test our Analytic Anti-Aliasing |
+class FillCircleGM : public skiagm::GM { |
+public: |
+ FillCircleGM() : fRotate(0) {} |
+ |
+protected: |
+ SkString onShortName() override { return SkString("fillcircle"); } |
+ |
+ SkISize onISize() override { return SkISize::Make(520, 520); } |
+ |
+ void onDraw(SkCanvas* canvas) override { |
+ canvas->scale(20, 20); |
+ canvas->translate(13, 13); |
+ |
+ SkPaint paint; |
+ paint.setAntiAlias(true); |
+ paint.setStyle(SkPaint::kStroke_Style); |
+ paint.setStrokeWidth(SK_Scalar1 / 2); |
+ |
+ const SkScalar delta = paint.getStrokeWidth() * 3 / 2; |
+ SkRect r = SkRect::MakeXYWH(-12, -12, 24, 24); |
+ SkRandom rand; |
+ |
+ SkScalar sign = 1; |
+ while (r.width() > paint.getStrokeWidth() * 2) { |
+ SkAutoCanvasRestore acr(canvas, true); |
+ canvas->rotate(fRotate * sign); |
+ |
+ paint.setColor(sk_tool_utils::color_to_565(rand.nextU() | (0xFF << 24))); |
+ paint.setStyle(SkPaint::kFill_Style); |
+ canvas->drawOval(r, paint); |
+ r.inset(delta, delta); |
+ sign = -sign; |
+ } |
+ } |
+ |
+ bool onAnimate(const SkAnimTimer& timer) override { |
+ fRotate = timer.scaled(60, 360); |
+ return true; |
+ } |
+ |
+private: |
+ SkScalar fRotate; |
+ |
+ typedef skiagm::GM INHERITED; |
+}; |
+DEF_GM( return new FillCircleGM; ) |
+ |
////////////////////// |
static void html_canvas_arc(SkPath* path, SkScalar x, SkScalar y, SkScalar r, SkScalar start, |