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

Side by Side Diff: gm/textbloblooper.cpp

Issue 1821533002: guard rasterizer and drawlooper setters (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update android sdk Created 4 years, 9 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 unified diff | Download patch
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 9
10 #include "Sk2DPathEffect.h" 10 #include "Sk2DPathEffect.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 paint->setColorFilter(SkColorMatrixFilter::CreateLightingFilter(0xF0F0F0, 0) )->unref(); 100 paint->setColorFilter(SkColorMatrixFilter::CreateLightingFilter(0xF0F0F0, 0) )->unref();
101 } 101 }
102 102
103 static void kitchen_sink(SkPaint* paint) { 103 static void kitchen_sink(SkPaint* paint) {
104 color_filter(paint); 104 color_filter(paint);
105 path_effect(paint); 105 path_effect(paint);
106 mask_filter(paint); 106 mask_filter(paint);
107 107
108 } 108 }
109 109
110 static SkLayerDrawLooper* setupLooper(SkLayerDrawLooper::BitFlags bits, 110 static sk_sp<SkDrawLooper> setupLooper(SkLayerDrawLooper::BitFlags bits,
111 LooperProc proc, 111 LooperProc proc,
112 const LooperSettings settings[], 112 const LooperSettings settings[],
113 size_t size) { 113 size_t size) {
114 SkLayerDrawLooper::Builder looperBuilder; 114 SkLayerDrawLooper::Builder looperBuilder;
115 115
116 SkLayerDrawLooper::LayerInfo info; 116 SkLayerDrawLooper::LayerInfo info;
117 info.fPaintBits = bits; 117 info.fPaintBits = bits;
118 118
119 info.fColorMode = SkXfermode::kSrc_Mode; 119 info.fColorMode = SkXfermode::kSrc_Mode;
120 120
121 for (size_t i = 0; i < size; i++) { 121 for (size_t i = 0; i < size; i++) {
122 info.fOffset.set(settings[i].fOffset, settings[i].fOffset); 122 info.fOffset.set(settings[i].fOffset, settings[i].fOffset);
123 SkPaint* paint = looperBuilder.addLayer(info); 123 SkPaint* paint = looperBuilder.addLayer(info);
124 paint->setXfermodeMode(settings[i].fMode); 124 paint->setXfermodeMode(settings[i].fMode);
125 paint->setColor(settings[i].fColor); 125 paint->setColor(settings[i].fColor);
126 paint->setStyle(settings[i].fStyle); 126 paint->setStyle(settings[i].fStyle);
127 paint->setStrokeWidth(settings[i].fWidth); 127 paint->setStrokeWidth(settings[i].fWidth);
128 if (settings[i].fEffect) { 128 if (settings[i].fEffect) {
129 (*proc)(paint); 129 (*proc)(paint);
130 } 130 }
131 } 131 }
132 return looperBuilder.detachLooper(); 132 return looperBuilder.detach();
133 } 133 }
134 134
135 class TextBlobLooperGM : public GM { 135 class TextBlobLooperGM : public GM {
136 public: 136 public:
137 TextBlobLooperGM() {} 137 TextBlobLooperGM() {}
138 138
139 protected: 139 protected:
140 void onOnceBeforeDraw() override { 140 void onOnceBeforeDraw() override {
141 SkTextBlobBuilder builder; 141 SkTextBlobBuilder builder;
142 142
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 }; 179 };
180 180
181 LooperSettings kitchenSink[] = { 181 LooperSettings kitchenSink[] = {
182 { SkXfermode::kSrc_Mode, SK_ColorWHITE, SkPaint::kStroke_Style, 1.f * 3/4, 0, 0, false }, 182 { SkXfermode::kSrc_Mode, SK_ColorWHITE, SkPaint::kStroke_Style, 1.f * 3/4, 0, 0, false },
183 { SkXfermode::kSrc_Mode, SK_ColorBLACK, SkPaint::kFill_Style, 0, 0, 0, false }, 183 { SkXfermode::kSrc_Mode, SK_ColorBLACK, SkPaint::kFill_Style, 0, 0, 0, false },
184 { SkXfermode::kDifference_Mode, SK_ColorWHITE, SkPaint::kFill_Style, 1.f, 10.f, 0, false }, 184 { SkXfermode::kDifference_Mode, SK_ColorWHITE, SkPaint::kFill_Style, 1.f, 10.f, 0, false },
185 { SkXfermode::kSrc_Mode, SK_ColorWHITE, SkPaint::kFill_Style, 0, 10. f, 0, true }, 185 { SkXfermode::kSrc_Mode, SK_ColorWHITE, SkPaint::kFill_Style, 0, 10. f, 0, true },
186 { SkXfermode::kSrcOver_Mode, 0x50FF00FF, SkPaint::kFill_Style, 0, 20 .f, 0, false }, 186 { SkXfermode::kSrcOver_Mode, 0x50FF00FF, SkPaint::kFill_Style, 0, 20 .f, 0, false },
187 }; 187 };
188 188
189 fLoopers.push_back().reset(setupLooper(SkLayerDrawLooper::kMaskFilter_Bi t | 189 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kMaskFilter_Bit |
190 SkLayerDrawLooper::kXfermode_Bit | 190 SkLayerDrawLooper::kXfermode_Bit |
191 SkLayerDrawLooper::kStyle_Bit, &m ask_filter, 191 SkLayerDrawLooper::kStyle_Bit, &mask_filt er,
192 compound, SK_ARRAY_COUNT(compound ))); 192 compound, SK_ARRAY_COUNT(compound)));
193 fLoopers.push_back().reset(setupLooper(SkLayerDrawLooper::kPathEffect_Bi t | 193 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kPathEffect_Bit |
194 SkLayerDrawLooper::kXfermode_Bit, &path_effect, 194 SkLayerDrawLooper::kXfermode_Bit, &path_e ffect,
195 looperSandwhich, SK_ARRAY_COUNT(l ooperSandwhich))); 195 looperSandwhich, SK_ARRAY_COUNT(looperSan dwhich)));
196 fLoopers.push_back().reset(setupLooper(SkLayerDrawLooper::kShader_Bit | 196 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kShader_Bit |
197 SkLayerDrawLooper::kColorFilter_B it | 197 SkLayerDrawLooper::kColorFilter_Bit |
198 SkLayerDrawLooper::kXfermode_Bit, &color_filter, 198 SkLayerDrawLooper::kXfermode_Bit, &color_ filter,
199 looperSandwhich, SK_ARRAY_COUNT(l ooperSandwhich))); 199 looperSandwhich, SK_ARRAY_COUNT(looperSan dwhich)));
200 fLoopers.push_back().reset(setupLooper(SkLayerDrawLooper::kShader_Bit | 200 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kShader_Bit |
201 SkLayerDrawLooper::kColorFilter_B it | 201 SkLayerDrawLooper::kColorFilter_Bit |
202 SkLayerDrawLooper::kXfermode_Bit, &color_filter, 202 SkLayerDrawLooper::kXfermode_Bit, &color_ filter,
203 xfermode, SK_ARRAY_COUNT(xfermode ))); 203 xfermode, SK_ARRAY_COUNT(xfermode)));
204 fLoopers.push_back().reset(setupLooper(0, nullptr, skew, SK_ARRAY_COUNT( skew))); 204 fLoopers.push_back(setupLooper(0, nullptr, skew, SK_ARRAY_COUNT(skew)));
205 fLoopers.push_back().reset(setupLooper(SkLayerDrawLooper::kMaskFilter_Bi t | 205 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kMaskFilter_Bit |
206 SkLayerDrawLooper::kShader_Bit | 206 SkLayerDrawLooper::kShader_Bit |
207 SkLayerDrawLooper::kColorFilter_B it | 207 SkLayerDrawLooper::kColorFilter_Bit |
208 SkLayerDrawLooper::kPathEffect_Bi t | 208 SkLayerDrawLooper::kPathEffect_Bit |
209 SkLayerDrawLooper::kStyle_Bit | 209 SkLayerDrawLooper::kStyle_Bit |
210 SkLayerDrawLooper::kXfermode_Bit, &kitchen_sink, 210 SkLayerDrawLooper::kXfermode_Bit, &kitche n_sink,
211 kitchenSink, SK_ARRAY_COUNT(kitch enSink))); 211 kitchenSink, SK_ARRAY_COUNT(kitchenSink)) );
212 212
213 // Test we respect overrides 213 // Test we respect overrides
214 fLoopers.push_back().reset(setupLooper(0, &kitchen_sink, 214 fLoopers.push_back(setupLooper(0, &kitchen_sink,
215 kitchenSink, SK_ARRAY_COUNT(kitch enSink))); 215 kitchenSink, SK_ARRAY_COUNT(kitchenSink)) );
216 } 216 }
217 217
218 SkString onShortName() override { 218 SkString onShortName() override {
219 return SkString("textbloblooper"); 219 return SkString("textbloblooper");
220 } 220 }
221 221
222 SkISize onISize() override { 222 SkISize onISize() override {
223 return SkISize::Make(kWidth, kHeight); 223 return SkISize::Make(kWidth, kHeight);
224 } 224 }
225 225
(...skipping 14 matching lines...) Expand all
240 canvas->save(); 240 canvas->save();
241 canvas->translate(0, SkIntToScalar(y)); 241 canvas->translate(0, SkIntToScalar(y));
242 canvas->drawTextBlob(fBlob, 0, 0, paint); 242 canvas->drawTextBlob(fBlob, 0, 0, paint);
243 canvas->restore(); 243 canvas->restore();
244 y += SkScalarFloorToInt(bounds.height()); 244 y += SkScalarFloorToInt(bounds.height());
245 } 245 }
246 } 246 }
247 247
248 private: 248 private:
249 SkAutoTUnref<const SkTextBlob> fBlob; 249 SkAutoTUnref<const SkTextBlob> fBlob;
250 SkTArray<SkAutoTUnref<SkLayerDrawLooper>, true> fLoopers; 250 SkTArray<sk_sp<SkDrawLooper>, true> fLoopers;
251 251
252 typedef GM INHERITED; 252 typedef GM INHERITED;
253 }; 253 };
254 254
255 ////////////////////////////////////////////////////////////////////////////// 255 //////////////////////////////////////////////////////////////////////////////
256 256
257 DEF_GM(return new TextBlobLooperGM;) 257 DEF_GM(return new TextBlobLooperGM;)
258 } 258 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698