Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: gm/clipdrawdraw.cpp

Issue 913693002: Clean up clipping code a bit (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix assert Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | include/core/SkClipStack.h » ('j') | src/core/SkClipStack.cpp » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:
« no previous file with comments | « no previous file | include/core/SkClipStack.h » ('j') | src/core/SkClipStack.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698