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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 | 44 |
45 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); | 45 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
46 const SkTextBlobBuilder::RunBuffer& run = builder->allocRunPos(paint, glyphs
.count()); | 46 const SkTextBlobBuilder::RunBuffer& run = builder->allocRunPos(paint, glyphs
.count()); |
47 memcpy(run.glyphs, glyphs.begin(), glyphs.count() * sizeof(uint16_t)); | 47 memcpy(run.glyphs, glyphs.begin(), glyphs.count() * sizeof(uint16_t)); |
48 memcpy(run.pos, pos.begin(), len * sizeof(SkScalar) * 2); | 48 memcpy(run.pos, pos.begin(), len * sizeof(SkScalar) * 2); |
49 } | 49 } |
50 | 50 |
51 typedef void (*LooperProc)(SkPaint*); | 51 typedef void (*LooperProc)(SkPaint*); |
52 | 52 |
53 struct LooperSettings { | 53 struct LooperSettings { |
54 SkXfermode::Mode fMode; | 54 SkBlendMode fMode; |
55 SkColor fColor; | 55 SkColor fColor; |
56 SkPaint::Style fStyle; | 56 SkPaint::Style fStyle; |
57 SkScalar fWidth; | 57 SkScalar fWidth; |
58 SkScalar fOffset; | 58 SkScalar fOffset; |
59 SkScalar fSkewX; | 59 SkScalar fSkewX; |
60 bool fEffect; | 60 bool fEffect; |
61 }; | 61 }; |
62 | 62 |
63 static void mask_filter(SkPaint* paint) { | 63 static void mask_filter(SkPaint* paint) { |
64 paint->setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, | 64 paint->setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 SkLayerDrawLooper::Builder looperBuilder; | 113 SkLayerDrawLooper::Builder looperBuilder; |
114 | 114 |
115 SkLayerDrawLooper::LayerInfo info; | 115 SkLayerDrawLooper::LayerInfo info; |
116 info.fPaintBits = bits; | 116 info.fPaintBits = bits; |
117 | 117 |
118 info.fColorMode = SkXfermode::kSrc_Mode; | 118 info.fColorMode = SkXfermode::kSrc_Mode; |
119 | 119 |
120 for (size_t i = 0; i < size; i++) { | 120 for (size_t i = 0; i < size; i++) { |
121 info.fOffset.set(settings[i].fOffset, settings[i].fOffset); | 121 info.fOffset.set(settings[i].fOffset, settings[i].fOffset); |
122 SkPaint* paint = looperBuilder.addLayer(info); | 122 SkPaint* paint = looperBuilder.addLayer(info); |
123 paint->setXfermodeMode(settings[i].fMode); | 123 paint->setBlendMode(settings[i].fMode); |
124 paint->setColor(settings[i].fColor); | 124 paint->setColor(settings[i].fColor); |
125 paint->setStyle(settings[i].fStyle); | 125 paint->setStyle(settings[i].fStyle); |
126 paint->setStrokeWidth(settings[i].fWidth); | 126 paint->setStrokeWidth(settings[i].fWidth); |
127 if (settings[i].fEffect) { | 127 if (settings[i].fEffect) { |
128 (*proc)(paint); | 128 (*proc)(paint); |
129 } | 129 } |
130 } | 130 } |
131 return looperBuilder.detach(); | 131 return looperBuilder.detach(); |
132 } | 132 } |
133 | 133 |
(...skipping 11 matching lines...) Expand all Loading... |
145 const char* text = "The quick brown fox jumps over the lazy dog"; | 145 const char* text = "The quick brown fox jumps over the lazy dog"; |
146 paint.setSubpixelText(true); | 146 paint.setSubpixelText(true); |
147 paint.setLCDRenderText(true); | 147 paint.setLCDRenderText(true); |
148 paint.setAntiAlias(true); | 148 paint.setAntiAlias(true); |
149 sk_tool_utils::set_portable_typeface(&paint); | 149 sk_tool_utils::set_portable_typeface(&paint); |
150 add_to_text_blob(&builder, text, paint, 0, 0); | 150 add_to_text_blob(&builder, text, paint, 0, 0); |
151 fBlob = builder.make(); | 151 fBlob = builder.make(); |
152 | 152 |
153 // create a looper which sandwhiches an effect in two normal draws | 153 // create a looper which sandwhiches an effect in two normal draws |
154 LooperSettings looperSandwhich[] = { | 154 LooperSettings looperSandwhich[] = { |
155 { SkXfermode::kSrc_Mode, SK_ColorMAGENTA, SkPaint::kFill_Style, 0, 0,
0, false }, | 155 { SkBlendMode::kSrc, SK_ColorMAGENTA, SkPaint::kFill_Style, 0, 0, 0,
false }, |
156 { SkXfermode::kSrcOver_Mode, 0x88000000, SkPaint::kFill_Style, 0, 10.
f, 0, true }, | 156 { SkBlendMode::kSrcOver, 0x88000000, SkPaint::kFill_Style, 0, 10.f, 0
, true }, |
157 { SkXfermode::kSrcOver_Mode, 0x50FF00FF, SkPaint::kFill_Style, 0, 20.
f, 0, false }, | 157 { SkBlendMode::kSrcOver, 0x50FF00FF, SkPaint::kFill_Style, 0, 20.f, 0
, false }, |
158 }; | 158 }; |
159 | 159 |
160 LooperSettings compound[] = { | 160 LooperSettings compound[] = { |
161 { SkXfermode::kSrc_Mode, SK_ColorWHITE, SkPaint::kStroke_Style, 1.f
* 3/4, 0, 0, false }, | 161 { SkBlendMode::kSrc, SK_ColorWHITE, SkPaint::kStroke_Style, 1.f * 3/
4, 0, 0, false }, |
162 { SkXfermode::kSrc_Mode, SK_ColorRED, SkPaint::kStroke_Style, 4.f, 0
, 0, false }, | 162 { SkBlendMode::kSrc, SK_ColorRED, SkPaint::kStroke_Style, 4.f, 0, 0,
false }, |
163 { SkXfermode::kSrc_Mode, SK_ColorBLUE, SkPaint::kFill_Style, 0, 0, 0
, false }, | 163 { SkBlendMode::kSrc, SK_ColorBLUE, SkPaint::kFill_Style, 0, 0, 0, fa
lse }, |
164 { SkXfermode::kSrcOver_Mode, 0x88000000, SkPaint::kFill_Style, 0, 10
.f, 0, true } | 164 { SkBlendMode::kSrcOver, 0x88000000, SkPaint::kFill_Style, 0, 10.f,
0, true } |
165 }; | 165 }; |
166 | 166 |
167 LooperSettings xfermode[] = { | 167 LooperSettings xfermode[] = { |
168 { SkXfermode::kDifference_Mode, SK_ColorWHITE, SkPaint::kFill_Style,
0, 0, 0, false }, | 168 { SkBlendMode::kDifference, SK_ColorWHITE, SkPaint::kFill_Style, 0,
0, 0, false }, |
169 { SkXfermode::kSrcOver_Mode, 0xFF000000, SkPaint::kFill_Style, 0, 1.
f, 0, true }, | 169 { SkBlendMode::kSrcOver, 0xFF000000, SkPaint::kFill_Style, 0, 1.f, 0
, true }, |
170 { SkXfermode::kSrcOver_Mode, 0x50FF00FF, SkPaint::kFill_Style, 0, 2.
f, 0, false }, | 170 { SkBlendMode::kSrcOver, 0x50FF00FF, SkPaint::kFill_Style, 0, 2.f, 0
, false }, |
171 }; | 171 }; |
172 | 172 |
173 // NOTE, this should be ignored by textblobs | 173 // NOTE, this should be ignored by textblobs |
174 LooperSettings skew[] = { | 174 LooperSettings skew[] = { |
175 { SkXfermode::kSrc_Mode, SK_ColorRED, SkPaint::kFill_Style, 0, 0, -1
.f, false }, | 175 { SkBlendMode::kSrc, SK_ColorRED, SkPaint::kFill_Style, 0, 0, -1.f,
false }, |
176 { SkXfermode::kSrc_Mode, SK_ColorGREEN, SkPaint::kFill_Style, 0, 10.
f, -1.f, false }, | 176 { SkBlendMode::kSrc, SK_ColorGREEN, SkPaint::kFill_Style, 0, 10.f, -
1.f, false }, |
177 { SkXfermode::kSrc_Mode, SK_ColorBLUE, SkPaint::kFill_Style, 0, 20.f
, -1.f, false }, | 177 { SkBlendMode::kSrc, SK_ColorBLUE, SkPaint::kFill_Style, 0, 20.f, -1
.f, false }, |
178 }; | 178 }; |
179 | 179 |
180 LooperSettings kitchenSink[] = { | 180 LooperSettings kitchenSink[] = { |
181 { SkXfermode::kSrc_Mode, SK_ColorWHITE, SkPaint::kStroke_Style, 1.f
* 3/4, 0, 0, false }, | 181 { SkBlendMode::kSrc, SK_ColorWHITE, SkPaint::kStroke_Style, 1.f * 3/
4, 0, 0, false }, |
182 { SkXfermode::kSrc_Mode, SK_ColorBLACK, SkPaint::kFill_Style, 0, 0,
0, false }, | 182 { SkBlendMode::kSrc, SK_ColorBLACK, SkPaint::kFill_Style, 0, 0, 0, f
alse }, |
183 { SkXfermode::kDifference_Mode, SK_ColorWHITE, SkPaint::kFill_Style,
1.f, 10.f, 0, false }, | 183 { SkBlendMode::kDifference, SK_ColorWHITE, SkPaint::kFill_Style, 1.f
, 10.f, 0, false }, |
184 { SkXfermode::kSrc_Mode, SK_ColorWHITE, SkPaint::kFill_Style, 0, 10.
f, 0, true }, | 184 { SkBlendMode::kSrc, SK_ColorWHITE, SkPaint::kFill_Style, 0, 10.f, 0
, true }, |
185 { SkXfermode::kSrcOver_Mode, 0x50FF00FF, SkPaint::kFill_Style, 0, 20
.f, 0, false }, | 185 { SkBlendMode::kSrcOver, 0x50FF00FF, SkPaint::kFill_Style, 0, 20.f,
0, false }, |
186 }; | 186 }; |
187 | 187 |
188 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kMaskFilter_Bit | | 188 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kMaskFilter_Bit | |
189 SkLayerDrawLooper::kXfermode_Bit | | 189 SkLayerDrawLooper::kXfermode_Bit | |
190 SkLayerDrawLooper::kStyle_Bit, &mask_filt
er, | 190 SkLayerDrawLooper::kStyle_Bit, &mask_filt
er, |
191 compound, SK_ARRAY_COUNT(compound))); | 191 compound, SK_ARRAY_COUNT(compound))); |
192 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kPathEffect_Bit | | 192 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kPathEffect_Bit | |
193 SkLayerDrawLooper::kXfermode_Bit, &path_e
ffect, | 193 SkLayerDrawLooper::kXfermode_Bit, &path_e
ffect, |
194 looperSandwhich, SK_ARRAY_COUNT(looperSan
dwhich))); | 194 looperSandwhich, SK_ARRAY_COUNT(looperSan
dwhich))); |
195 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kShader_Bit | | 195 fLoopers.push_back(setupLooper(SkLayerDrawLooper::kShader_Bit | |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 sk_sp<SkTextBlob> fBlob; | 248 sk_sp<SkTextBlob> fBlob; |
249 SkTArray<sk_sp<SkDrawLooper>, true> fLoopers; | 249 SkTArray<sk_sp<SkDrawLooper>, true> fLoopers; |
250 | 250 |
251 typedef GM INHERITED; | 251 typedef GM INHERITED; |
252 }; | 252 }; |
253 | 253 |
254 ////////////////////////////////////////////////////////////////////////////// | 254 ////////////////////////////////////////////////////////////////////////////// |
255 | 255 |
256 DEF_GM(return new TextBlobLooperGM;) | 256 DEF_GM(return new TextBlobLooperGM;) |
257 } | 257 } |
OLD | NEW |