aboutsummaryrefslogtreecommitdiffhomepage
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
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
-rw-r--r--gm/complexclip2.cpp151
-rw-r--r--gm/gm.h2
-rw-r--r--gm/gmmain.cpp4
-rw-r--r--gyp/bench.gyp1
-rw-r--r--gyp/gm.gyp7
5 files changed, 162 insertions, 3 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);
+
+}
diff --git a/gm/gm.h b/gm/gm.h
index 531ade2cd6..d8a975166e 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -39,6 +39,8 @@ namespace skiagm {
return fShortName.c_str();
}
+ virtual bool validForPicture() const { return true; }
+
protected:
virtual void onDraw(SkCanvas*) = 0;
virtual SkISize onISize() = 0;
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 6f7f67be00..4ac53e1762 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -435,6 +435,10 @@ static bool test_picture_playback(GM* gm,
const SkBitmap& comparisonBitmap,
const char readPath [],
const char diffPath []) {
+ if (!gm->validForPicture()) {
+ return true;
+ }
+
SkPicture* pict = generate_new_picture(gm);
SkAutoUnref aur(pict);
diff --git a/gyp/bench.gyp b/gyp/bench.gyp
index 715a364afb..bae46f8d60 100644
--- a/gyp/bench.gyp
+++ b/gyp/bench.gyp
@@ -32,6 +32,7 @@
'../bench/DecodeBench.cpp',
'../bench/FPSBench.cpp',
'../bench/GradientBench.cpp',
+ '../bench/MathBench.cpp',
'../bench/MatrixBench.cpp',
'../bench/PathBench.cpp',
'../bench/RectBench.cpp',
diff --git a/gyp/gm.gyp b/gyp/gm.gyp
index 180e81f497..cebd26f9d9 100644
--- a/gyp/gm.gyp
+++ b/gyp/gm.gyp
@@ -12,13 +12,17 @@
'../gm/bitmapfilters.cpp',
'../gm/bitmapscroll.cpp',
'../gm/blurs.cpp',
+ '../gm/complexclip.cpp',
+ '../gm/complexclip2.cpp',
'../gm/filltypes.cpp',
+ '../gm/gmmain.cpp',
'../gm/gradients.cpp',
'../gm/lcdtext.cpp',
'../gm/nocolorbleed.cpp',
'../gm/pathfill.cpp',
'../gm/points.cpp',
'../gm/poly2poly.cpp',
+ '../gm/shadertext.cpp',
'../gm/shadows.cpp',
'../gm/shapes.cpp',
'../gm/strokerects.cpp',
@@ -27,9 +31,6 @@
'../gm/tilemodes.cpp',
'../gm/tinybitmap.cpp',
'../gm/xfermodes.cpp',
- '../gm/shadertext.cpp',
- '../gm/complexclip.cpp',
- '../gm/gmmain.cpp',
],
'dependencies': [
'core.gyp:core',