Index: gm/aaclip.cpp |
diff --git a/gm/aaclip.cpp b/gm/aaclip.cpp |
index e613af66bdd91844c5b1401941d443fd057d3e99..8a0084c0471e792687e092866ba5562322e30ef0 100644 |
--- a/gm/aaclip.cpp |
+++ b/gm/aaclip.cpp |
@@ -193,3 +193,72 @@ private: |
DEF_GM( return SkNEW(CGImageGM); ) |
#endif |
#endif |
+ |
+/////////////////////////////////////////////////////////////////////////////////////////////////// |
+ |
+// skbug.com/3716 |
+class ClipCubicGM : public skiagm::GM { |
+ const SkScalar W = 100; |
+ const SkScalar H = 240; |
+ |
+ SkPath fVPath, fHPath; |
+public: |
+ ClipCubicGM() { |
+ fVPath.moveTo(W, 0); |
+ fVPath.cubicTo(W, H-10, 0, 10, 0, H); |
+ |
+ SkMatrix pivot; |
+ pivot.setRotate(90, W/2, H/2); |
+ fVPath.transform(pivot, &fHPath); |
+ } |
+ |
+protected: |
+ SkString onShortName() override { |
+ return SkString("clipcubic"); |
+ } |
+ |
+ SkISize onISize() override { |
+ return SkISize::Make(400, 410); |
+ } |
+ |
+ void doDraw(SkCanvas* canvas, const SkPath& path) { |
+ SkPaint paint; |
+ paint.setAntiAlias(true); |
+ |
+ paint.setColor(0xFFCCCCCC); |
+ canvas->drawPath(path, paint); |
+ |
+ paint.setColor(SK_ColorRED); |
+ paint.setStyle(SkPaint::kStroke_Style); |
+ canvas->drawPath(path, paint); |
+ } |
+ |
+ void drawAndClip(SkCanvas* canvas, const SkPath& path, SkScalar dx, SkScalar dy) { |
+ SkAutoCanvasRestore acr(canvas, true); |
+ |
+ SkRect r = SkRect::MakeXYWH(0, H/4, W, H/2); |
+ SkPaint paint; |
+ paint.setColor(0xFF8888FF); |
+ |
+ canvas->drawRect(r, paint); |
+ this->doDraw(canvas, path); |
+ |
+ canvas->translate(dx, dy); |
+ |
+ canvas->drawRect(r, paint); |
+ canvas->clipRect(r); |
+ this->doDraw(canvas, path); |
+ } |
+ |
+ void onDraw(SkCanvas* canvas) override { |
+ canvas->translate(80, 10); |
+ this->drawAndClip(canvas, fVPath, 200, 0); |
+ canvas->translate(0, 200); |
+ this->drawAndClip(canvas, fHPath, 200, 0); |
+ } |
+ |
+private: |
+ typedef skiagm::GM INHERITED; |
+}; |
+DEF_GM( return SkNEW(ClipCubicGM); ) |
+ |