OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkColorFilterImageFilter.h" | 10 #include "SkColorFilterImageFilter.h" |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 } | 186 } |
187 | 187 |
188 private: | 188 private: |
189 typedef GM INHERITED; | 189 typedef GM INHERITED; |
190 }; | 190 }; |
191 DEF_GM( return new TableColorFilterGM; ) | 191 DEF_GM( return new TableColorFilterGM; ) |
192 | 192 |
193 ////////////////////////////////////////////////////////////////////////////// | 193 ////////////////////////////////////////////////////////////////////////////// |
194 | 194 |
195 class ComposeColorFilterGM : public skiagm::GM { | 195 class ComposeColorFilterGM : public skiagm::GM { |
| 196 enum { |
| 197 COLOR_COUNT = 3, |
| 198 MODE_COUNT = 4, |
| 199 }; |
| 200 const SkColor* fColors; |
| 201 const SkXfermode::Mode* fModes; |
| 202 SkString fName; |
| 203 |
196 public: | 204 public: |
197 ComposeColorFilterGM() {} | 205 ComposeColorFilterGM(const SkColor colors[], const SkXfermode::Mode modes[], |
| 206 const char suffix[]) |
| 207 : fColors(colors), fModes(modes) |
| 208 { |
| 209 fName.printf("colorcomposefilter_%s", suffix); |
| 210 } |
198 | 211 |
199 protected: | 212 protected: |
200 virtual SkString onShortName() { | 213 virtual SkString onShortName() { |
201 return SkString("composecolorfilter"); | 214 return fName; |
202 } | 215 } |
203 | 216 |
204 virtual SkISize onISize() { | 217 virtual SkISize onISize() { |
205 return SkISize::Make(730, 730); | 218 return SkISize::Make(790, 790); |
206 } | 219 } |
207 | 220 |
208 virtual void onDraw(SkCanvas* canvas) { | 221 virtual void onDraw(SkCanvas* canvas) { |
209 SkBitmap bm; | 222 SkBitmap bm; |
210 make_bm1(&bm); | 223 make_bm1(&bm); |
211 | 224 |
212 canvas->drawColor(0xFFDDDDDD); | 225 canvas->drawColor(0xFFDDDDDD); |
213 | 226 |
214 SkColor colors[] = { SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW }; | 227 const int MODES = MODE_COUNT * COLOR_COUNT; |
215 SkXfermode::Mode modes[] = { | |
216 SkXfermode::kOverlay_Mode, | |
217 SkXfermode::kDarken_Mode, | |
218 SkXfermode::kColorBurn_Mode, | |
219 SkXfermode::kExclusion_Mode, | |
220 }; | |
221 | |
222 const int MODES = SK_ARRAY_COUNT(modes) * SK_ARRAY_COUNT(colors); | |
223 SkAutoTUnref<SkColorFilter> filters[MODES]; | 228 SkAutoTUnref<SkColorFilter> filters[MODES]; |
224 int index = 0; | 229 int index = 0; |
225 for (size_t i = 0; i < SK_ARRAY_COUNT(modes); ++i) { | 230 for (int i = 0; i < MODE_COUNT; ++i) { |
226 for (size_t j = 0; j < SK_ARRAY_COUNT(colors); ++j) { | 231 for (int j = 0; j < COLOR_COUNT; ++j) { |
227 filters[index++].reset(SkColorFilter::CreateModeFilter(colors[j]
, modes[i])); | 232 filters[index++].reset(SkColorFilter::CreateModeFilter(fColors[j
], fModes[i])); |
228 } | 233 } |
229 } | 234 } |
230 | 235 |
231 SkPaint paint; | 236 SkPaint paint; |
232 paint.setShader(make_shader1(50, 50))->unref(); | 237 paint.setShader(make_shader1(50, 50))->unref(); |
233 SkRect r = SkRect::MakeWH(50, 50); | 238 SkRect r = SkRect::MakeWH(50, 50); |
234 const SkScalar spacer = 10; | 239 const SkScalar spacer = 10; |
235 | 240 |
236 canvas->translate(spacer, spacer); | 241 canvas->translate(spacer, spacer); |
237 | 242 |
238 for (size_t y = 0; y < MODES; ++y) { | 243 canvas->drawRect(r, paint); // orig |
| 244 |
| 245 for (int i = 0; i < MODES; ++i) { |
| 246 paint.setColorFilter(filters[i]); |
| 247 |
239 canvas->save(); | 248 canvas->save(); |
240 for (size_t x = 0; x < MODES; ++x) { | 249 canvas->translate((i + 1) * (r.width() + spacer), 0); |
| 250 canvas->drawRect(r, paint); |
| 251 canvas->restore(); |
| 252 |
| 253 canvas->save(); |
| 254 canvas->translate(0, (i + 1) * (r.width() + spacer)); |
| 255 canvas->drawRect(r, paint); |
| 256 canvas->restore(); |
| 257 } |
| 258 |
| 259 canvas->translate(r.width() + spacer, r.width() + spacer); |
| 260 |
| 261 for (int y = 0; y < MODES; ++y) { |
| 262 canvas->save(); |
| 263 for (int x = 0; x < MODES; ++x) { |
241 SkAutoTUnref<SkColorFilter> compose(SkColorFilter::CreateCompose
Filter(filters[y], | 264 SkAutoTUnref<SkColorFilter> compose(SkColorFilter::CreateCompose
Filter(filters[y], |
242
filters[x])); | 265
filters[x])); |
243 paint.setColorFilter(compose); | 266 paint.setColorFilter(compose); |
244 canvas->drawRect(r, paint); | 267 canvas->drawRect(r, paint); |
245 canvas->translate(r.width() + spacer, 0); | 268 canvas->translate(r.width() + spacer, 0); |
246 } | 269 } |
247 canvas->restore(); | 270 canvas->restore(); |
248 canvas->translate(0, r.height() + spacer); | 271 canvas->translate(0, r.height() + spacer); |
249 } | 272 } |
250 } | 273 } |
251 | 274 |
252 private: | 275 private: |
253 typedef GM INHERITED; | 276 typedef GM INHERITED; |
254 }; | 277 }; |
255 DEF_GM( return new ComposeColorFilterGM; ) | |
256 | 278 |
| 279 const SkColor gColors0[] = { SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW }; |
| 280 const SkXfermode::Mode gModes0[] = { |
| 281 SkXfermode::kOverlay_Mode, |
| 282 SkXfermode::kDarken_Mode, |
| 283 SkXfermode::kColorBurn_Mode, |
| 284 SkXfermode::kExclusion_Mode, |
| 285 }; |
| 286 DEF_GM( return new ComposeColorFilterGM(gColors0, gModes0, "wacky"); ) |
| 287 |
| 288 const SkColor gColors1[] = { 0x80FF0000, 0x8000FF00, 0x800000FF }; |
| 289 const SkXfermode::Mode gModes1[] = { |
| 290 SkXfermode::kSrcOver_Mode, |
| 291 SkXfermode::kXor_Mode, |
| 292 SkXfermode::kDstOut_Mode, |
| 293 SkXfermode::kSrcATop_Mode, |
| 294 }; |
| 295 DEF_GM( return new ComposeColorFilterGM(gColors1, gModes1, "alpha"); ) |
OLD | NEW |