OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |