| Index: gm/complexclip.cpp
|
| diff --git a/gm/complexclip.cpp b/gm/complexclip.cpp
|
| index 61a19fd48624e02f0debdda4d03c0afac27b6b7b..ebb7707c9cfeec36dbabfe5b269bc36d1c57693e 100644
|
| --- a/gm/complexclip.cpp
|
| +++ b/gm/complexclip.cpp
|
| @@ -18,14 +18,12 @@ static const SkColor gClipAColor = SK_ColorBLUE;
|
| static const SkColor gClipBColor = SK_ColorRED;
|
|
|
| class ComplexClipGM : public GM {
|
| - bool fDoAAClip;
|
| - bool fDoSaveLayer;
|
| public:
|
| - ComplexClipGM(bool aaclip, bool saveLayer)
|
| + ComplexClipGM(bool aaclip, bool saveLayer, bool invertDraw)
|
| : fDoAAClip(aaclip)
|
| - , fDoSaveLayer(saveLayer) {
|
| + , fDoSaveLayer(saveLayer)
|
| + , fInvertDraw(invertDraw) {
|
| this->setBGColor(0xFFDDDDDD);
|
| -// this->setBGColor(SkColorSetRGB(0xB0,0xDD,0xB0));
|
| }
|
|
|
| protected:
|
| @@ -36,9 +34,10 @@ protected:
|
|
|
| SkString onShortName() {
|
| SkString str;
|
| - str.printf("complexclip_%s%s",
|
| + str.printf("complexclip_%s%s%s",
|
| fDoAAClip ? "aa" : "bw",
|
| - fDoSaveLayer ? "_layer" : "");
|
| + fDoSaveLayer ? "_layer" : "",
|
| + fInvertDraw ? "_invert" : "");
|
| return str;
|
| }
|
|
|
| @@ -60,7 +59,11 @@ protected:
|
| path.quadTo(SkIntToScalar(150), SkIntToScalar(150), SkIntToScalar(125), SkIntToScalar(150));
|
| path.lineTo(SkIntToScalar(50), SkIntToScalar(150));
|
| path.close();
|
| - path.setFillType(SkPath::kEvenOdd_FillType);
|
| + if (fInvertDraw) {
|
| + path.setFillType(SkPath::kInverseEvenOdd_FillType);
|
| + } else {
|
| + path.setFillType(SkPath::kEvenOdd_FillType);
|
| + }
|
| SkPaint pathPaint;
|
| pathPaint.setAntiAlias(true);
|
| pathPaint.setColor(gPathColor);
|
| @@ -134,6 +137,16 @@ protected:
|
| canvas->clipPath(clipA, SkRegion::kIntersect_Op, fDoAAClip);
|
| canvas->clipPath(clipB, gOps[op].fOp, fDoAAClip);
|
|
|
| + // In the inverse case we need to prevent the draw from covering the whole
|
| + // canvas.
|
| + if (fInvertDraw) {
|
| + SkRect rectClip = clipA.getBounds();
|
| + rectClip.join(path.getBounds());
|
| + rectClip.join(path.getBounds());
|
| + rectClip.outset(5, 5);
|
| + canvas->clipRect(rectClip);
|
| + }
|
| +
|
| // draw path clipped
|
| canvas->drawPath(path, pathPaint);
|
| canvas->restore();
|
| @@ -181,22 +194,22 @@ private:
|
| canvas->drawPath(clipB, paint);
|
| }
|
|
|
| + bool fDoAAClip;
|
| + bool fDoSaveLayer;
|
| + bool fInvertDraw;
|
| +
|
| typedef GM INHERITED;
|
| };
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| -// aliased and anti-aliased w/o a layer
|
| -static GM* gFact0(void*) { return new ComplexClipGM(false, false); }
|
| -static GM* gFact1(void*) { return new ComplexClipGM(true, false); }
|
| -
|
| -// aliased and anti-aliased w/ a layer
|
| -static GM* gFact2(void*) { return new ComplexClipGM(false, true); }
|
| -static GM* gFact3(void*) { return new ComplexClipGM(true, true); }
|
| -
|
| -static GMRegistry gReg0(gFact0);
|
| -static GMRegistry gReg1(gFact1);
|
| -static GMRegistry gReg2(gFact2);
|
| -static GMRegistry gReg3(gFact3);
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (false, false, false)); )
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (false, false, true)); )
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (false, true, false)); )
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (false, true, true)); )
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (true, false, false)); )
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (true, false, true)); )
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (true, true, false)); )
|
| +DEF_GM( return SkNEW_ARGS(ComplexClipGM, (true, true, true)); )
|
|
|
| }
|
|
|