| 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 |