diff options
author | 2011-08-29 17:41:02 +0000 | |
---|---|---|
committer | 2011-08-29 17:41:02 +0000 | |
commit | 30db599c1de70b2832ff9ec05c266a4c9b515d94 (patch) | |
tree | 373c11bca59dcea38225d9d55607bbdcbcc5a654 | |
parent | ab3dee5c8a7b782f2cf2464316867f2efb2a5cf3 (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.cpp | 151 | ||||
-rw-r--r-- | gm/gm.h | 2 | ||||
-rw-r--r-- | gm/gmmain.cpp | 4 | ||||
-rw-r--r-- | gyp/bench.gyp | 1 | ||||
-rw-r--r-- | gyp/gm.gyp | 7 |
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); + +} @@ -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', |