OLD | NEW |
1 | |
2 /* | 1 /* |
3 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
4 * | 3 * |
5 * 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 |
6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
7 */ | 6 */ |
8 #include "SampleCode.h" | 7 #include "SampleCode.h" |
9 #include "SkBicubicImageFilter.h" | 8 #include "SkBicubicImageFilter.h" |
| 9 #include "SkBitmapDevice.h" |
10 #include "SkBitmapSource.h" | 10 #include "SkBitmapSource.h" |
11 #include "SkBlurImageFilter.h" | 11 #include "SkBlurImageFilter.h" |
12 #include "SkCanvas.h" | 12 #include "SkCanvas.h" |
13 #include "SkColorFilter.h" | 13 #include "SkColorFilter.h" |
14 #include "SkColorFilterImageFilter.h" | 14 #include "SkColorFilterImageFilter.h" |
15 #include "SkComposeImageFilter.h" | 15 #include "SkComposeImageFilter.h" |
16 #include "SkBitmapDevice.h" | 16 #include "SkData.h" |
17 #include "SkDisplacementMapEffect.h" | 17 #include "SkDisplacementMapEffect.h" |
18 #include "SkDropShadowImageFilter.h" | 18 #include "SkDropShadowImageFilter.h" |
19 #include "SkFlattenableSerialization.h" | 19 #include "SkFlattenableSerialization.h" |
20 #include "SkLightingImageFilter.h" | 20 #include "SkLightingImageFilter.h" |
21 #include "SkMagnifierImageFilter.h" | 21 #include "SkMagnifierImageFilter.h" |
22 #include "SkMergeImageFilter.h" | 22 #include "SkMergeImageFilter.h" |
23 #include "SkMorphologyImageFilter.h" | 23 #include "SkMorphologyImageFilter.h" |
24 #include "SkOffsetImageFilter.h" | 24 #include "SkOffsetImageFilter.h" |
25 #include "SkPerlinNoiseShader.h" | 25 #include "SkPerlinNoiseShader.h" |
26 #include "SkRandom.h" | 26 #include "SkRandom.h" |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 filter = new SkDisplacementMapEffect(make_channel_selector_type(), | 255 filter = new SkDisplacementMapEffect(make_channel_selector_type(), |
256 make_channel_selector_type(), make_scalar(), | 256 make_channel_selector_type(), make_scalar(), |
257 make_image_filter(false), make_image_filter()); | 257 make_image_filter(false), make_image_filter()); |
258 break; | 258 break; |
259 default: | 259 default: |
260 break; | 260 break; |
261 } | 261 } |
262 return (filter || canBeNull) ? filter : make_image_filter(canBeNull); | 262 return (filter || canBeNull) ? filter : make_image_filter(canBeNull); |
263 } | 263 } |
264 | 264 |
| 265 static SkImageFilter* make_serialized_image_filter() { |
| 266 SkAutoTUnref<SkImageFilter> filter(make_image_filter(false)); |
| 267 SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(filter)); |
| 268 const unsigned char* ptr = static_cast<const unsigned char*>(data->data()); |
| 269 size_t len = data->size(); |
| 270 #ifdef SK_ADD_RANDOM_BIT_FLIPS |
| 271 unsigned char* p = const_cast<unsigned char*>(ptr); |
| 272 for (size_t i = 0; i < len; ++i, ++p) { |
| 273 if ((R(1000) == 1)) { // 0.1% of the time, flip a bit |
| 274 *p ^= (1 << R(8)); |
| 275 } |
| 276 } |
| 277 #endif // SK_ADD_RANDOM_BIT_FLIPS |
| 278 SkFlattenable* flattenable = SkValidatingDeserializeFlattenable(ptr, len, |
| 279 SkImageFilter::GetFlattenableType()); |
| 280 SkASSERT(NULL != flattenable); |
| 281 return static_cast<SkImageFilter*>(flattenable); |
| 282 } |
| 283 |
265 static void drawClippedBitmap(SkCanvas* canvas, int x, int y, const SkPaint& pai
nt) { | 284 static void drawClippedBitmap(SkCanvas* canvas, int x, int y, const SkPaint& pai
nt) { |
266 canvas->save(); | 285 canvas->save(); |
267 canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), | 286 canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), |
268 SkIntToScalar(kBitmapSize), SkIntToScalar(kBitmapSize))); | 287 SkIntToScalar(kBitmapSize), SkIntToScalar(kBitmapSize))); |
269 canvas->drawBitmap(make_bitmap(), SkIntToScalar(x), SkIntToScalar(y), &paint
); | 288 canvas->drawBitmap(make_bitmap(), SkIntToScalar(x), SkIntToScalar(y), &paint
); |
270 canvas->restore(); | 289 canvas->restore(); |
271 } | 290 } |
272 | 291 |
273 static void do_fuzz(SkCanvas* canvas) { | 292 static void do_fuzz(SkCanvas* canvas) { |
274 SkPaint paint; | 293 SkPaint paint; |
275 paint.setImageFilter(make_image_filter()); | 294 paint.setImageFilter(make_serialized_image_filter())->unref(); |
276 drawClippedBitmap(canvas, 0, 0, paint); | 295 drawClippedBitmap(canvas, 0, 0, paint); |
277 } | 296 } |
278 | 297 |
279 ////////////////////////////////////////////////////////////////////////////// | 298 ////////////////////////////////////////////////////////////////////////////// |
280 | 299 |
281 class ImageFilterFuzzView : public SampleView { | 300 class ImageFilterFuzzView : public SampleView { |
282 public: | 301 public: |
283 ImageFilterFuzzView() { | 302 ImageFilterFuzzView() { |
284 this->setBGColor(0xFFDDDDDD); | 303 this->setBGColor(0xFFDDDDDD); |
285 } | 304 } |
(...skipping 18 matching lines...) Expand all Loading... |
304 } | 323 } |
305 | 324 |
306 private: | 325 private: |
307 typedef SkView INHERITED; | 326 typedef SkView INHERITED; |
308 }; | 327 }; |
309 | 328 |
310 ////////////////////////////////////////////////////////////////////////////// | 329 ////////////////////////////////////////////////////////////////////////////// |
311 | 330 |
312 static SkView* MyFactory() { return new ImageFilterFuzzView; } | 331 static SkView* MyFactory() { return new ImageFilterFuzzView; } |
313 static SkViewRegister reg(MyFactory); | 332 static SkViewRegister reg(MyFactory); |
OLD | NEW |