| Index: gm/clipdrawdraw.cpp
|
| diff --git a/gm/clipdrawdraw.cpp b/gm/clipdrawdraw.cpp
|
| index 0e471dd148d641d1d890daa7740b11dfd458e473..3846dc0b53f61e483bf56feea4bc1feace97829f 100644
|
| --- a/gm/clipdrawdraw.cpp
|
| +++ b/gm/clipdrawdraw.cpp
|
| @@ -11,74 +11,51 @@ namespace skiagm {
|
|
|
| // This GM exercises the use case found in crbug.com/423834.
|
| // The following pattern:
|
| -// clipRect(r);
|
| -// drawRect(r, withAA);
|
| -// drawRect(r, noAA);
|
| +// save();
|
| +// clipRect(rect, noAA);
|
| +// drawRect(bigRect, noAA);
|
| +// restore();
|
| +//
|
| +// drawRect(rect, noAA);
|
| // can leave 1 pixel wide remnants of the first rect.
|
| class ClipDrawDrawGM : public GM {
|
| public:
|
| - ClipDrawDrawGM() {
|
| - this->setBGColor(0xFFCCCCCC);
|
| - }
|
| + ClipDrawDrawGM() { this->setBGColor(0xFFCCCCCC); }
|
|
|
| protected:
|
| - SkString onShortName() SK_OVERRIDE {
|
| - return SkString("clipdrawdraw");
|
| - }
|
| + SkString onShortName() SK_OVERRIDE { return SkString("clipdrawdraw"); }
|
|
|
| - SkISize onISize() SK_OVERRIDE {
|
| - return SkISize::Make(512, 512);
|
| - }
|
| + SkISize onISize() SK_OVERRIDE { return SkISize::Make(512, 512); }
|
|
|
| - // Vertical remnant
|
| - static void draw1(SkCanvas* canvas) {
|
| + static void Draw(SkCanvas* canvas, const SkRect& rect) {
|
| SkPaint p;
|
| - p.setAntiAlias(true);
|
| -
|
| - const SkRect rect = SkRect::MakeXYWH(8, 9, 404, 313);
|
| -
|
| - canvas->save();
|
| -
|
| - canvas->scale(0.5f, 0.5f);
|
| - canvas->translate(265, 265);
|
| -
|
| - canvas->save();
|
| - canvas->clipRect(rect);
|
| - canvas->drawRect(rect, p);
|
| - canvas->restore();
|
| -
|
| - p.setColor(SK_ColorWHITE);
|
| p.setAntiAlias(false);
|
| - canvas->drawRect(rect, p);
|
| - canvas->restore();
|
| - }
|
| -
|
| - // Horizontal remnant
|
| - static void draw2(SkCanvas* canvas) {
|
| - SkPaint p;
|
| - p.setAntiAlias(true);
|
| -
|
| - const SkRect rect = SkRect::MakeXYWH(8, 9, 404, 313);
|
| -
|
| - canvas->save();
|
|
|
| - canvas->translate(200.800003f, 172.299988f);
|
| - canvas->scale(0.8f, 0.8f);
|
| + const SkRect bigRect = SkRect::MakeWH(600, 600);
|
|
|
| canvas->save();
|
| - canvas->clipRect(rect);
|
| - canvas->drawRect(rect, p);
|
| - canvas->restore();
|
| -
|
| - p.setColor(SK_ColorWHITE);
|
| - p.setAntiAlias(false);
|
| - canvas->drawRect(rect, p);
|
| + // draw a black rect through the clip
|
| + canvas->save();
|
| + canvas->clipRect(rect);
|
| + canvas->drawRect(bigRect, p);
|
| + canvas->restore();
|
| +
|
| + // now draw the white rect on top
|
| + p.setColor(SK_ColorWHITE);
|
| + canvas->drawRect(rect, p);
|
| canvas->restore();
|
| }
|
|
|
| void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
| - draw1(canvas);
|
| - draw2(canvas);
|
| + // Vertical remnant
|
| + const SkRect rect1 = SkRect::MakeLTRB(136.5f, 137.5f, 338.5f, 293.5f);
|
| +
|
| + // Horizontal remnant
|
| + // 179.488 rounds the right way (i.e., 179), 179.499 rounds the wrong way (i.e., 180)
|
| + const SkRect rect2 = SkRect::MakeLTRB(207.5f, 179.499f, 530.5f, 429.5f);
|
| +
|
| + Draw(canvas, rect1);
|
| + Draw(canvas, rect2);
|
| }
|
|
|
| private:
|
|
|