aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar rileya@google.com <rileya@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-09-14 13:53:36 +0000
committerGravatar rileya@google.com <rileya@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-09-14 13:53:36 +0000
commitffadfb5d43a2b09394b4650829bcfc7329ed2d30 (patch)
tree7a10a591761f051ed79eae097f282b54089ea791 /gm
parent1d225f2b3352bb8f24661f62d2bd1cc7386a2f86 (diff)
Add gm to test SkRegion/clipPath bug.
Review URL: https://codereview.appspot.com/6501131 git-svn-id: http://skia.googlecode.com/svn/trunk@5540 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm')
-rw-r--r--gm/distantclip.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/gm/distantclip.cpp b/gm/distantclip.cpp
new file mode 100644
index 0000000000..b8a7c2b7b7
--- /dev/null
+++ b/gm/distantclip.cpp
@@ -0,0 +1,71 @@
+
+
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+#include "SkCanvas.h"
+#include "SkPicture.h"
+
+namespace skiagm {
+
+class DistantClipGM : public GM {
+public:
+ DistantClipGM() { }
+
+protected:
+
+ SkString onShortName() {
+ return SkString("distantclip");
+ }
+
+ SkISize onISize() { return make_isize(100, 100); }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ int offset = 35000;
+ int extents = 1000;
+
+ // We record a picture of huge vertical extents in which we clear the canvas to red, create
+ // a 'extents' by 'extents' round rect clip at a vertical offset of 'offset', then draw
+ // green into that.
+ SkPicture pict;
+ SkCanvas* rec = pict.beginRecording(100, offset + extents);
+ rec->drawColor(0xffff0000);
+ rec->save();
+ SkRect r = {-extents, offset - extents, extents, offset + extents};
+ SkPath p;
+ p.addRoundRect(r, 5, 5);
+ rec->clipPath(p, SkRegion::kIntersect_Op, true);
+ rec->drawColor(0xff00ff00);
+ rec->restore();
+ pict.endRecording();
+
+ // Next we play that picture into another picture of the same size.
+ SkPicture pict2;
+ pict.draw(pict2.beginRecording(100, offset + extents));
+ pict2.endRecording();
+
+ // Finally we play the part of that second picture that should be green into the canvas.
+ canvas->save();
+ canvas->translate(extents / 2, -(offset - extents / 2));
+ canvas->drawPicture(pict2);
+ canvas->restore();
+
+ // If the image is red, we erroneously decided the clipPath was empty and didn't record
+ // the green drawColor, if it's green we're all good.
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new DistantClipGM; }
+static GMRegistry reg(MyFactory);
+
+}