/* * Copyright 2014 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" namespace skiagm { // This GM exercises the use case found in crbug.com/423834. // The following pattern: // clipRect(r); // drawRect(r, withAA); // drawRect(r, noAA); // can leave 1 pixel wide remnants of the first rect. class ClipDrawDrawGM : public GM { public: ClipDrawDrawGM() { this->setBGColor(0xFFCCCCCC); } protected: SkString onShortName() SK_OVERRIDE { return SkString("clipdrawdraw"); } SkISize onISize() SK_OVERRIDE { return SkISize::Make(512, 512); } // Vertical remnant static void draw1(SkCanvas* canvas) { 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); canvas->save(); canvas->clipRect(rect); canvas->drawRect(rect, p); canvas->restore(); p.setColor(SK_ColorWHITE); p.setAntiAlias(false); canvas->drawRect(rect, p); canvas->restore(); } void onDraw(SkCanvas* canvas) SK_OVERRIDE { draw1(canvas); draw2(canvas); } private: typedef GM INHERITED; }; ////////////////////////////////////////////////////////////////////////////// DEF_GM(return SkNEW(ClipDrawDrawGM);) }