aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/complexclip2.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-29 17:41:02 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-29 17:41:02 +0000
commit30db599c1de70b2832ff9ec05c266a4c9b515d94 (patch)
tree373c11bca59dcea38225d9d55607bbdcbcc5a654 /gm/complexclip2.cpp
parentab3dee5c8a7b782f2cf2464316867f2efb2a5cf3 (diff)
add new test for complex clips
temp disable picture testing until I fix the bug w/ expanding clips git-svn-id: http://skia.googlecode.com/svn/trunk@2184 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/complexclip2.cpp')
-rw-r--r--gm/complexclip2.cpp151
1 files changed, 151 insertions, 0 deletions
diff --git a/gm/complexclip2.cpp b/gm/complexclip2.cpp
new file mode 100644
index 0000000000..401f4afc7b
--- /dev/null
+++ b/gm/complexclip2.cpp
@@ -0,0 +1,151 @@
+
+/*
+ * Copyright 2011 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 "SkPath.h"
+#include "SkRandom.h"
+
+namespace skiagm {
+
+class ComplexClip2GM : public GM {
+public:
+ ComplexClip2GM() {
+ SkScalar xA = 0 * SK_Scalar1;
+ SkScalar xB = 10 * SK_Scalar1;
+ SkScalar xC = 20 * SK_Scalar1;
+ SkScalar xD = 30 * SK_Scalar1;
+ SkScalar xE = 40 * SK_Scalar1;
+ SkScalar xF = 50 * SK_Scalar1;
+
+ SkScalar yA = 0 * SK_Scalar1;
+ SkScalar yB = 10 * SK_Scalar1;
+ SkScalar yC = 20 * SK_Scalar1;
+ SkScalar yD = 30 * SK_Scalar1;
+ SkScalar yE = 40 * SK_Scalar1;
+ SkScalar yF = 50 * SK_Scalar1;
+
+ fWidth = xF - xA;
+ fHeight = yF - yA;
+
+ fRects[0].fLeft = xB;
+ fRects[0].fTop = yB;
+ fRects[0].fRight = xE;
+ fRects[0].fBottom = yE;
+ fRectColors[0] = SK_ColorRED;
+
+ fRects[1].fLeft = xA;
+ fRects[1].fTop = yA;
+ fRects[1].fRight = xD;
+ fRects[1].fBottom = yD;
+ fRectColors[1] = SK_ColorGREEN;
+
+ fRects[2].fLeft = xC;
+ fRects[2].fTop = yA;
+ fRects[2].fRight = xF;
+ fRects[2].fBottom = yD;
+ fRectColors[2] = SK_ColorBLUE;
+
+ fRects[3].fLeft = xA;
+ fRects[3].fTop = yC;
+ fRects[3].fRight = xD;
+ fRects[3].fBottom = yF;
+ fRectColors[3] = SK_ColorYELLOW;
+
+ fRects[4].fLeft = xC;
+ fRects[4].fTop = yC;
+ fRects[4].fRight = xF;
+ fRects[4].fBottom = yF;
+ fRectColors[4] = SK_ColorCYAN;
+
+ fTotalWidth = kCols * fWidth + SK_Scalar1 * (kCols + 1) * kPadX;
+ fTotalHeight = kRows * fHeight + SK_Scalar1 * (kRows + 1) * kPadY;
+ }
+
+ virtual bool validForPicture() const { return false; }
+
+protected:
+
+ static const int kRows = 5;
+ static const int kCols = 5;
+ static const int kPadX = 20;
+ static const int kPadY = 20;
+
+ SkString onShortName() {
+ return SkString("complexclip2");
+ }
+
+ SkISize onISize() { return make_isize(fTotalWidth, fTotalHeight); }
+
+ void drawBG(SkCanvas* canvas) {
+ canvas->drawColor(SkColorSetRGB(0xDD,0xA0,0xDD));
+ SkRegion::Op ops[] = {
+ SkRegion::kDifference_Op,
+ SkRegion::kIntersect_Op,
+ SkRegion::kUnion_Op,
+ SkRegion::kXOR_Op,
+ SkRegion::kReverseDifference_Op,
+ SkRegion::kReplace_Op,
+ };
+
+ SkRandom r;
+ for (int i = 0; i < kRows; ++i) {
+ for (int j = 0; j < kCols; ++j) {
+ for (int k = 0; k < 5; ++k) {
+ fOps[j*kRows+i][k] = ops[r.nextU() % SK_ARRAY_COUNT(ops)];
+ }
+ }
+ }
+
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ this->drawBG(canvas);
+ SkPaint rectPaint;
+ rectPaint.setStyle(SkPaint::kStroke_Style);
+ rectPaint.setStrokeWidth(-1);
+
+ SkPaint fillPaint;
+ fillPaint.setColor(SkColorSetRGB(0xA0,0xDD,0xA0));
+
+ for (int i = 0; i < kRows; ++i) {
+ for (int j = 0; j < kCols; ++j) {
+ canvas->save();
+ canvas->translate(kPadX * SK_Scalar1 + (fWidth + kPadX * SK_Scalar1)*j,
+ kPadY * SK_Scalar1 + (fHeight + kPadY * SK_Scalar1)*i);
+ canvas->save();
+ for (int k = 0; k < 5; ++k) {
+ canvas->clipRect(fRects[k], fOps[j*kRows+i][k]);
+ }
+ canvas->drawRect(SkRect::MakeWH(fWidth, fHeight), fillPaint);
+ canvas->restore();
+ for (int k = 0; k < 5; ++k) {
+ rectPaint.setColor(fRectColors[k]);
+ canvas->drawRect(fRects[k], rectPaint);
+ }
+ canvas->restore();
+ }
+ }
+ }
+private:
+ SkRect fRects[5];
+ SkColor fRectColors[5];
+ SkRegion::Op fOps[kRows * kCols][5];
+ SkScalar fWidth;
+ SkScalar fHeight;
+ SkScalar fTotalWidth;
+ SkScalar fTotalHeight;
+
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new ComplexClip2GM; }
+static GMRegistry reg(MyFactory);
+
+}