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

Side by Side Diff: gm/megalooper.cpp

Issue 777643003: use ClipOp instead of SkRegion for clipping (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years 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 unified diff | Download patch
« no previous file with comments | « gm/distantclip.cpp ('k') | gm/pathopsinverse.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "gm.h" 8 #include "gm.h"
9 #include "SkBlurMask.h" 9 #include "SkBlurMask.h"
10 #include "SkBlurMaskFilter.h" 10 #include "SkBlurMaskFilter.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 SkRect innerClip = { -kHalfSquareSize, -kHalfSquareSize, kHalfSquareSize , kHalfSquareSize }; 84 SkRect innerClip = { -kHalfSquareSize, -kHalfSquareSize, kHalfSquareSize , kHalfSquareSize };
85 innerClip.offset(x, y); 85 innerClip.offset(x, y);
86 86
87 SkRect outerClip = { 87 SkRect outerClip = {
88 -kHalfOuterClipSize-kHalfSquareSize, -kHalfOuterClipSize-kHalfSquare Size, 88 -kHalfOuterClipSize-kHalfSquareSize, -kHalfOuterClipSize-kHalfSquare Size,
89 kHalfOuterClipSize+kHalfSquareSize, kHalfOuterClipSize+kHalfSquare Size 89 kHalfOuterClipSize+kHalfSquareSize, kHalfOuterClipSize+kHalfSquare Size
90 }; 90 };
91 outerClip.offset(x, y); 91 outerClip.offset(x, y);
92 92
93 canvas->save(); 93 canvas->save();
94 canvas->clipRect(outerClip, SkRegion::kIntersect_Op); 94 canvas->clipRect(outerClip, kIntersect_SkClipOp);
95 canvas->clipRect(innerClip, SkRegion::kDifference_Op); 95 canvas->clipRect(innerClip, kDifference_SkClipOp);
96 96
97 SkPaint paint; 97 SkPaint paint;
98 paint.setAntiAlias(true); 98 paint.setAntiAlias(true);
99 paint.setMaskFilter(createBlur())->unref(); 99 paint.setMaskFilter(createBlur())->unref();
100 100
101 for (int i = 0; i < 4; ++i) { 101 for (int i = 0; i < 4; ++i) {
102 paint.setColor(gColors[i]); 102 paint.setColor(gColors[i]);
103 103
104 SkRect rect = { -kHalfSquareSize, -kHalfSquareSize, kHalfSquareSize, kHalfSquareSize }; 104 SkRect rect = { -kHalfSquareSize, -kHalfSquareSize, kHalfSquareSize, kHalfSquareSize };
105 rect.offset(gBlurOffsets[i]); 105 rect.offset(gBlurOffsets[i]);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 kHalfOuterClipSize, kHalfOuterClipSize 139 kHalfOuterClipSize, kHalfOuterClipSize
140 }; 140 };
141 outerClip.offset(x, y); 141 outerClip.offset(x, y);
142 // center it on the blurred rect 142 // center it on the blurred rect
143 outerClip.offset(gBlurOffsets[i]); 143 outerClip.offset(gBlurOffsets[i]);
144 144
145 SkRect rect = { -kHalfSquareSize, -kHalfSquareSize, kHalfSquareSize, kHalfSquareSize }; 145 SkRect rect = { -kHalfSquareSize, -kHalfSquareSize, kHalfSquareSize, kHalfSquareSize };
146 rect.offset(x, y); 146 rect.offset(x, y);
147 147
148 canvas->save(); 148 canvas->save();
149 canvas->clipRect(outerClip, SkRegion::kIntersect_Op); 149 canvas->clipRect(outerClip, kIntersect_SkClipOp);
150 canvas->clipRect(rect, SkRegion::kDifference_Op); 150 canvas->clipRect(rect, kDifference_SkClipOp);
151 151
152 // move the rect to where we want the blur to appear 152 // move the rect to where we want the blur to appear
153 rect.offset(gBlurOffsets[i]); 153 rect.offset(gBlurOffsets[i]);
154 // then move it outside the clip (the blur stage of the draw 154 // then move it outside the clip (the blur stage of the draw
155 // looper will undo this translation) 155 // looper will undo this translation)
156 rect.offset(SkIntToScalar(kOffsetToOutsideClip), 0); 156 rect.offset(SkIntToScalar(kOffsetToOutsideClip), 0);
157 157
158 canvas->drawRect(rect, loopPaint); 158 canvas->drawRect(rect, loopPaint);
159 canvas->restore(); 159 canvas->restore();
160 } 160 }
(...skipping 28 matching lines...) Expand all
189 -kHalfOuterClipSize-kHalfSquareSize, -kHalfOuterClipSize-kHalfSquare Size, 189 -kHalfOuterClipSize-kHalfSquareSize, -kHalfOuterClipSize-kHalfSquare Size,
190 kHalfOuterClipSize+kHalfSquareSize, kHalfOuterClipSize+kHalfSquare Size 190 kHalfOuterClipSize+kHalfSquareSize, kHalfOuterClipSize+kHalfSquare Size
191 }; 191 };
192 outerClip.offset(x, y); 192 outerClip.offset(x, y);
193 193
194 SkPaint paint; 194 SkPaint paint;
195 paint.setAntiAlias(true); 195 paint.setAntiAlias(true);
196 paint.setLooper(create4Looper(-kOffsetToOutsideClip-kHalfSquareSize, 0)) ->unref(); 196 paint.setLooper(create4Looper(-kOffsetToOutsideClip-kHalfSquareSize, 0)) ->unref();
197 197
198 canvas->save(); 198 canvas->save();
199 canvas->clipRect(outerClip, SkRegion::kIntersect_Op); 199 canvas->clipRect(outerClip, kIntersect_SkClipOp);
200 canvas->clipRect(rect, SkRegion::kDifference_Op); 200 canvas->clipRect(rect, kDifference_SkClipOp);
201 201
202 rect.offset(SkIntToScalar(kOffsetToOutsideClip+kHalfSquareSize), 0); 202 rect.offset(SkIntToScalar(kOffsetToOutsideClip+kHalfSquareSize), 0);
203 canvas->drawRect(rect, paint); 203 canvas->drawRect(rect, paint);
204 canvas->restore(); 204 canvas->restore();
205 } 205 }
206 206
207 // Create a 4-tier draw looper 207 // Create a 4-tier draw looper
208 SkLayerDrawLooper* create4Looper(SkScalar xOff, SkScalar yOff) { 208 SkLayerDrawLooper* create4Looper(SkScalar xOff, SkScalar yOff) {
209 SkLayerDrawLooper::Builder looperBuilder; 209 SkLayerDrawLooper::Builder looperBuilder;
210 SkLayerDrawLooper::LayerInfo info; 210 SkLayerDrawLooper::LayerInfo info;
(...skipping 28 matching lines...) Expand all
239 { -kHalfSquareSize, -kHalfSquareSize } 239 { -kHalfSquareSize, -kHalfSquareSize }
240 }; 240 };
241 241
242 const SkColor MegaLooperGM::gColors[4] = { 242 const SkColor MegaLooperGM::gColors[4] = {
243 SK_ColorGREEN, SK_ColorYELLOW, SK_ColorBLUE, SK_ColorRED 243 SK_ColorGREEN, SK_ColorYELLOW, SK_ColorBLUE, SK_ColorRED
244 }; 244 };
245 245
246 DEF_GM( return new MegaLooperGM(MegaLooperGM::k0x0_Type); ) 246 DEF_GM( return new MegaLooperGM(MegaLooperGM::k0x0_Type); )
247 DEF_GM( return new MegaLooperGM(MegaLooperGM::k4x1_Type); ) 247 DEF_GM( return new MegaLooperGM(MegaLooperGM::k4x1_Type); )
248 DEF_GM( return new MegaLooperGM(MegaLooperGM::k1x4_Type); ) 248 DEF_GM( return new MegaLooperGM(MegaLooperGM::k1x4_Type); )
OLDNEW
« no previous file with comments | « gm/distantclip.cpp ('k') | gm/pathopsinverse.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698