Index: gm/cubicpaths.cpp |
diff --git a/gm/cubicpaths.cpp b/gm/cubicpaths.cpp |
index 9ab710a7ae9d441e28a45d14b77e179bca665dea..00a741234d30e6d55aaaa1ff0a9c006e189f1045 100644 |
--- a/gm/cubicpaths.cpp |
+++ b/gm/cubicpaths.cpp |
@@ -9,6 +9,47 @@ |
#include "SkPaint.h" |
#include "SkRandom.h" |
+// skbug.com/1316 shows that this cubic, when slightly clipped, creates big |
+// (incorrect) changes to its control points. |
+class ClippedCubicGM : public skiagm::GM { |
+public: |
+ ClippedCubicGM() {} |
+ |
+protected: |
+ SkString onShortName() { |
+ return SkString("cubicpath"); |
+ } |
+ |
+ SkISize onISize() { return SkISize::Make(1240, 390); } |
+ |
+ virtual void onDraw(SkCanvas* canvas) { |
+ SkPath path; |
+ path.moveTo(0, 0); |
+ path.cubicTo(140, 150, 40, 10, 170, 150); |
+ |
+ SkPaint paint; |
+ SkRect bounds = path.getBounds(); |
+ |
+ for (int dy = -1; dy <= 1; ++dy) { |
+ canvas->save(); |
+ for (int dx = -1; dx <= 1; ++dx) { |
+ canvas->save(); |
+ canvas->clipRect(bounds); |
+ canvas->translate(dx, dy); |
+ canvas->drawPath(path, paint); |
+ canvas->restore(); |
+ |
+ canvas->translate(bounds.width(), 0); |
+ } |
+ canvas->restore(); |
+ canvas->translate(0, bounds.height()); |
+ } |
+ } |
+ |
+private: |
+ typedef skiagm::GM INHERITED; |
+}; |
+ |
class CubicPathGM : public skiagm::GM { |
public: |
CubicPathGM() {} |
@@ -300,3 +341,4 @@ private: |
DEF_GM( return new CubicPathGM; ) |
DEF_GM( return new CubicClosePathGM; ) |
+DEF_GM( return new ClippedCubicGM; ) |