| Index: gm/complexclip2.cpp
|
| diff --git a/gm/complexclip2.cpp b/gm/complexclip2.cpp
|
| index ce1f0e07460caed6329da6a1bd8cf05a556ca417..2773321cfdce2da92763a3d3abbdb22e1ae131d6 100644
|
| --- a/gm/complexclip2.cpp
|
| +++ b/gm/complexclip2.cpp
|
| @@ -1,182 +1,182 @@
|
| -/*
|
| - * 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(bool doPaths, bool antiAlias)
|
| - : fDoPaths(doPaths)
|
| - , fAntiAlias(antiAlias) {
|
| - this->setBGColor(SkColorSetRGB(0xDD,0xA0,0xDD));
|
| -
|
| - // offset the rects a bit so we get antialiasing even in the rect case
|
| - SkScalar xA = SkFloatToScalar(0.65f);
|
| - SkScalar xB = SkFloatToScalar(10.65f);
|
| - SkScalar xC = SkFloatToScalar(20.65f);
|
| - SkScalar xD = SkFloatToScalar(30.65f);
|
| - SkScalar xE = SkFloatToScalar(40.65f);
|
| - SkScalar xF = SkFloatToScalar(50.65f);
|
| -
|
| - SkScalar yA = SkFloatToScalar(0.65f);
|
| - SkScalar yB = SkFloatToScalar(10.65f);
|
| - SkScalar yC = SkFloatToScalar(20.65f);
|
| - SkScalar yD = SkFloatToScalar(30.65f);
|
| - SkScalar yE = SkFloatToScalar(40.65f);
|
| - SkScalar yF = SkFloatToScalar(50.65f);
|
| -
|
| - fWidth = xF - xA;
|
| - fHeight = yF - yA;
|
| -
|
| - fRects[0].set(xB, yB, xE, yE);
|
| - fPaths[0].addRoundRect(fRects[0], SkIntToScalar(5), SkIntToScalar(5));
|
| - fRectColors[0] = SK_ColorRED;
|
| -
|
| - fRects[1].set(xA, yA, xD, yD);
|
| - fPaths[1].addRoundRect(fRects[1], SkIntToScalar(5), SkIntToScalar(5));
|
| - fRectColors[1] = SK_ColorGREEN;
|
| -
|
| - fRects[2].set(xC, yA, xF, yD);
|
| - fPaths[2].addRoundRect(fRects[2], SkIntToScalar(5), SkIntToScalar(5));
|
| - fRectColors[2] = SK_ColorBLUE;
|
| -
|
| - fRects[3].set(xA, yC, xD, yF);
|
| - fPaths[3].addRoundRect(fRects[3], SkIntToScalar(5), SkIntToScalar(5));
|
| - fRectColors[3] = SK_ColorYELLOW;
|
| -
|
| - fRects[4].set(xC, yC, xF, yF);
|
| - fPaths[4].addRoundRect(fRects[4], SkIntToScalar(5), SkIntToScalar(5));
|
| - fRectColors[4] = SK_ColorCYAN;
|
| -
|
| - fTotalWidth = kCols * fWidth + SK_Scalar1 * (kCols + 1) * kPadX;
|
| - fTotalHeight = kRows * fHeight + SK_Scalar1 * (kRows + 1) * kPadY;
|
| -
|
| - 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)];
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| -protected:
|
| -
|
| - static const int kRows = 5;
|
| - static const int kCols = 5;
|
| - static const int kPadX = 20;
|
| - static const int kPadY = 20;
|
| -
|
| - virtual SkString onShortName() {
|
| - if (!fDoPaths && !fAntiAlias) {
|
| - return SkString("complexclip2");
|
| - }
|
| -
|
| - SkString str;
|
| - str.printf("complexclip2_%s_%s",
|
| - fDoPaths ? "path" : "rect",
|
| - fAntiAlias ? "aa" : "bw");
|
| - return str;
|
| - }
|
| -
|
| - virtual SkISize onISize() {
|
| - return make_isize(SkScalarRoundToInt(fTotalWidth),
|
| - SkScalarRoundToInt(fTotalHeight));
|
| - }
|
| -
|
| - virtual void onDraw(SkCanvas* 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);
|
| -
|
| - // draw the original shapes first so we can see the
|
| - // antialiasing on the clipped draw
|
| - for (int k = 0; k < 5; ++k) {
|
| - rectPaint.setColor(fRectColors[k]);
|
| - if (fDoPaths) {
|
| - canvas->drawPath(fPaths[k], rectPaint);
|
| - } else {
|
| - canvas->drawRect(fRects[k], rectPaint);
|
| - }
|
| - }
|
| -
|
| - for (int k = 0; k < 5; ++k) {
|
| - if (fDoPaths) {
|
| - canvas->clipPath(fPaths[k],
|
| - fOps[j*kRows+i][k],
|
| - fAntiAlias);
|
| - } else {
|
| - canvas->clipRect(fRects[k],
|
| - fOps[j*kRows+i][k],
|
| - fAntiAlias);
|
| - }
|
| - }
|
| - canvas->drawRect(SkRect::MakeWH(fWidth, fHeight), fillPaint);
|
| - canvas->restore();
|
| - }
|
| - }
|
| - }
|
| -private:
|
| - bool fDoPaths;
|
| - bool fAntiAlias;
|
| - SkRect fRects[5];
|
| - SkPath fPaths[5];
|
| - SkColor fRectColors[5];
|
| - SkRegion::Op fOps[kRows * kCols][5];
|
| - SkScalar fWidth;
|
| - SkScalar fHeight;
|
| - SkScalar fTotalWidth;
|
| - SkScalar fTotalHeight;
|
| -
|
| - typedef GM INHERITED;
|
| -};
|
| -
|
| -//////////////////////////////////////////////////////////////////////////////
|
| -
|
| -// bw rects
|
| -static GM* MyFactory(void*) { return new ComplexClip2GM(false, false); }
|
| -static GMRegistry reg(MyFactory);
|
| -
|
| -// bw paths
|
| -static GM* MyFactory2(void*) { return new ComplexClip2GM(true, false); }
|
| -static GMRegistry reg2(MyFactory2);
|
| -
|
| -// aa rects
|
| -static GM* MyFactory3(void*) { return new ComplexClip2GM(false, true); }
|
| -static GMRegistry reg3(MyFactory3);
|
| -
|
| -// aa paths
|
| -static GM* MyFactory4(void*) { return new ComplexClip2GM(true, true); }
|
| -static GMRegistry reg4(MyFactory4);
|
| -
|
| -}
|
| +/*
|
| + * 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(bool doPaths, bool antiAlias)
|
| + : fDoPaths(doPaths)
|
| + , fAntiAlias(antiAlias) {
|
| + this->setBGColor(SkColorSetRGB(0xDD,0xA0,0xDD));
|
| +
|
| + // offset the rects a bit so we get antialiasing even in the rect case
|
| + SkScalar xA = SkFloatToScalar(0.65f);
|
| + SkScalar xB = SkFloatToScalar(10.65f);
|
| + SkScalar xC = SkFloatToScalar(20.65f);
|
| + SkScalar xD = SkFloatToScalar(30.65f);
|
| + SkScalar xE = SkFloatToScalar(40.65f);
|
| + SkScalar xF = SkFloatToScalar(50.65f);
|
| +
|
| + SkScalar yA = SkFloatToScalar(0.65f);
|
| + SkScalar yB = SkFloatToScalar(10.65f);
|
| + SkScalar yC = SkFloatToScalar(20.65f);
|
| + SkScalar yD = SkFloatToScalar(30.65f);
|
| + SkScalar yE = SkFloatToScalar(40.65f);
|
| + SkScalar yF = SkFloatToScalar(50.65f);
|
| +
|
| + fWidth = xF - xA;
|
| + fHeight = yF - yA;
|
| +
|
| + fRects[0].set(xB, yB, xE, yE);
|
| + fPaths[0].addRoundRect(fRects[0], SkIntToScalar(5), SkIntToScalar(5));
|
| + fRectColors[0] = SK_ColorRED;
|
| +
|
| + fRects[1].set(xA, yA, xD, yD);
|
| + fPaths[1].addRoundRect(fRects[1], SkIntToScalar(5), SkIntToScalar(5));
|
| + fRectColors[1] = SK_ColorGREEN;
|
| +
|
| + fRects[2].set(xC, yA, xF, yD);
|
| + fPaths[2].addRoundRect(fRects[2], SkIntToScalar(5), SkIntToScalar(5));
|
| + fRectColors[2] = SK_ColorBLUE;
|
| +
|
| + fRects[3].set(xA, yC, xD, yF);
|
| + fPaths[3].addRoundRect(fRects[3], SkIntToScalar(5), SkIntToScalar(5));
|
| + fRectColors[3] = SK_ColorYELLOW;
|
| +
|
| + fRects[4].set(xC, yC, xF, yF);
|
| + fPaths[4].addRoundRect(fRects[4], SkIntToScalar(5), SkIntToScalar(5));
|
| + fRectColors[4] = SK_ColorCYAN;
|
| +
|
| + fTotalWidth = kCols * fWidth + SK_Scalar1 * (kCols + 1) * kPadX;
|
| + fTotalHeight = kRows * fHeight + SK_Scalar1 * (kRows + 1) * kPadY;
|
| +
|
| + SkRegion::Op ops[] = {
|
| + SkRegion::kDifference_Op,
|
| + SkRegion::kIntersect_Op,
|
| + SkRegion::kUnion_Op,
|
| + SkRegion::kXOR_Op,
|
| + SkRegion::kReverseDifference_Op,
|
| + SkRegion::kReplace_Op,
|
| + };
|
| +
|
| + SkLCGRandom 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)];
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| +protected:
|
| +
|
| + static const int kRows = 5;
|
| + static const int kCols = 5;
|
| + static const int kPadX = 20;
|
| + static const int kPadY = 20;
|
| +
|
| + virtual SkString onShortName() {
|
| + if (!fDoPaths && !fAntiAlias) {
|
| + return SkString("complexclip2");
|
| + }
|
| +
|
| + SkString str;
|
| + str.printf("complexclip2_%s_%s",
|
| + fDoPaths ? "path" : "rect",
|
| + fAntiAlias ? "aa" : "bw");
|
| + return str;
|
| + }
|
| +
|
| + virtual SkISize onISize() {
|
| + return make_isize(SkScalarRoundToInt(fTotalWidth),
|
| + SkScalarRoundToInt(fTotalHeight));
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas* 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);
|
| +
|
| + // draw the original shapes first so we can see the
|
| + // antialiasing on the clipped draw
|
| + for (int k = 0; k < 5; ++k) {
|
| + rectPaint.setColor(fRectColors[k]);
|
| + if (fDoPaths) {
|
| + canvas->drawPath(fPaths[k], rectPaint);
|
| + } else {
|
| + canvas->drawRect(fRects[k], rectPaint);
|
| + }
|
| + }
|
| +
|
| + for (int k = 0; k < 5; ++k) {
|
| + if (fDoPaths) {
|
| + canvas->clipPath(fPaths[k],
|
| + fOps[j*kRows+i][k],
|
| + fAntiAlias);
|
| + } else {
|
| + canvas->clipRect(fRects[k],
|
| + fOps[j*kRows+i][k],
|
| + fAntiAlias);
|
| + }
|
| + }
|
| + canvas->drawRect(SkRect::MakeWH(fWidth, fHeight), fillPaint);
|
| + canvas->restore();
|
| + }
|
| + }
|
| + }
|
| +private:
|
| + bool fDoPaths;
|
| + bool fAntiAlias;
|
| + SkRect fRects[5];
|
| + SkPath fPaths[5];
|
| + SkColor fRectColors[5];
|
| + SkRegion::Op fOps[kRows * kCols][5];
|
| + SkScalar fWidth;
|
| + SkScalar fHeight;
|
| + SkScalar fTotalWidth;
|
| + SkScalar fTotalHeight;
|
| +
|
| + typedef GM INHERITED;
|
| +};
|
| +
|
| +//////////////////////////////////////////////////////////////////////////////
|
| +
|
| +// bw rects
|
| +static GM* MyFactory(void*) { return new ComplexClip2GM(false, false); }
|
| +static GMRegistry reg(MyFactory);
|
| +
|
| +// bw paths
|
| +static GM* MyFactory2(void*) { return new ComplexClip2GM(true, false); }
|
| +static GMRegistry reg2(MyFactory2);
|
| +
|
| +// aa rects
|
| +static GM* MyFactory3(void*) { return new ComplexClip2GM(false, true); }
|
| +static GMRegistry reg3(MyFactory3);
|
| +
|
| +// aa paths
|
| +static GM* MyFactory4(void*) { return new ComplexClip2GM(true, true); }
|
| +static GMRegistry reg4(MyFactory4);
|
| +
|
| +}
|
|
|