From 30db599c1de70b2832ff9ec05c266a4c9b515d94 Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Mon, 29 Aug 2011 17:41:02 +0000 Subject: 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 --- gm/complexclip2.cpp | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 gm/complexclip2.cpp (limited to 'gm/complexclip2.cpp') 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); + +} -- cgit v1.2.3