aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-03 20:17:22 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-03 20:17:22 +0000
commit4837724a7e5b1ccb3c8d2ef139f0b93b53203299 (patch)
tree4e370f832457a5d2cd3fdfd1aeda48a7ba771ee8 /gm
parentae09f2dc3fb1e8a8db99b214c8a71d0b9613a856 (diff)
add test for rotated saveLayer, to see that we clip against the specified bounds
(hint: we don't at the moment) git-svn-id: http://skia.googlecode.com/svn/trunk@5794 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm')
-rw-r--r--gm/savelayer.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/gm/savelayer.cpp b/gm/savelayer.cpp
new file mode 100644
index 0000000000..9284e230a8
--- /dev/null
+++ b/gm/savelayer.cpp
@@ -0,0 +1,76 @@
+/*
+ * 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"
+
+// This should be on SkCanvas imho
+static void rotateAbout(SkCanvas* canvas, SkScalar degrees,
+ SkScalar px, SkScalar py) {
+ canvas->translate(px, py);
+ canvas->rotate(degrees);
+ canvas->translate(-px, -py);
+}
+
+class SaveLayerGM : public skiagm::GM {
+ void drawStuff(SkCanvas* canvas, const SkRect& r) {
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ canvas->drawOval(r, paint);
+ }
+
+public:
+ SaveLayerGM() {}
+
+protected:
+ SkString onShortName() {
+ return SkString("savelayer");
+ }
+
+ virtual SkISize onISize() { return SkISize::Make(100, 100); }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ SkPaint hairpaint;
+ hairpaint.setAntiAlias(true);
+ hairpaint.setStyle(SkPaint::kStroke_Style);
+ hairpaint.setColor(SK_ColorRED);
+
+ canvas->translate(50, 50);
+
+ SkRect r = SkRect::MakeWH(100, 60);
+ SkRect r2 = r;
+ r2.inset(5, 5);
+
+ this->drawStuff(canvas, r);
+ canvas->drawRect(r, hairpaint);
+ canvas->translate(r.width() * 5/4, 0);
+
+ canvas->saveLayer(&r2, NULL);
+ this->drawStuff(canvas, r);
+ canvas->restore();
+ canvas->drawRect(r, hairpaint);
+ canvas->translate(r.width() * 5/4, 0);
+
+ // We need to ensure that we still clip against r2 (after it is rotated)
+ // even though the layer's bounds will be larger (since they are the
+ // enclosing rect of rotated-r2).
+
+ rotateAbout(canvas, 30, r.centerX(), r.centerY());
+ canvas->saveLayer(&r2, NULL);
+ this->drawStuff(canvas, r);
+ canvas->restore();
+ canvas->drawRect(r, hairpaint);
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static skiagm::GM* MyFactory(void*) { return new SaveLayerGM; }
+static skiagm::GMRegistry reg(MyFactory);