| 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 #include "SampleCode.h" | 7 #include "SampleCode.h" |
| 8 #include "SkAlphaThresholdFilter.h" | 8 #include "SkAlphaThresholdFilter.h" |
| 9 #include "SkBitmapSource.h" | 9 #include "SkBitmapSource.h" |
| 10 #include "SkBlurImageFilter.h" | 10 #include "SkBlurImageFilter.h" |
| 11 #include "SkCanvas.h" | 11 #include "SkCanvas.h" |
| 12 #include "SkColorCubeFilter.h" |
| 12 #include "SkColorFilter.h" | 13 #include "SkColorFilter.h" |
| 13 #include "SkColorFilterImageFilter.h" | 14 #include "SkColorFilterImageFilter.h" |
| 14 #include "SkComposeImageFilter.h" | 15 #include "SkComposeImageFilter.h" |
| 15 #include "SkData.h" | 16 #include "SkData.h" |
| 16 #include "SkDisplacementMapEffect.h" | 17 #include "SkDisplacementMapEffect.h" |
| 17 #include "SkDropShadowImageFilter.h" | 18 #include "SkDropShadowImageFilter.h" |
| 18 #include "SkFlattenableSerialization.h" | 19 #include "SkFlattenableSerialization.h" |
| 19 #include "SkLightingImageFilter.h" | 20 #include "SkLightingImageFilter.h" |
| 20 #include "SkMagnifierImageFilter.h" | 21 #include "SkMagnifierImageFilter.h" |
| 21 #include "SkMatrixImageFilter.h" | 22 #include "SkMatrixImageFilter.h" |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 static SkBitmap bitmap[2]; | 204 static SkBitmap bitmap[2]; |
| 204 static bool initialized = false; | 205 static bool initialized = false; |
| 205 if (!initialized) { | 206 if (!initialized) { |
| 206 make_g_bitmap(bitmap[0]); | 207 make_g_bitmap(bitmap[0]); |
| 207 make_checkerboard_bitmap(bitmap[1]); | 208 make_checkerboard_bitmap(bitmap[1]); |
| 208 initialized = true; | 209 initialized = true; |
| 209 } | 210 } |
| 210 return bitmap[R(2)]; | 211 return bitmap[R(2)]; |
| 211 } | 212 } |
| 212 | 213 |
| 214 static SkData* make_3Dlut(int* cubeDimension, bool invR, bool invG, bool invB) { |
| 215 int size = 4 << R(5); |
| 216 SkData* data = SkData::NewUninitialized(sizeof(SkColor) * size * size * size
); |
| 217 SkColor* pixels = (SkColor*)(data->writable_data()); |
| 218 SkAutoMalloc lutMemory(size); |
| 219 SkAutoMalloc invLutMemory(size); |
| 220 uint8_t* lut = (uint8_t*)lutMemory.get(); |
| 221 uint8_t* invLut = (uint8_t*)invLutMemory.get(); |
| 222 const int maxIndex = size - 1; |
| 223 for (int i = 0; i < size; i++) { |
| 224 lut[i] = (i * 255) / maxIndex; |
| 225 invLut[i] = ((maxIndex - i) * 255) / maxIndex; |
| 226 } |
| 227 for (int r = 0; r < size; ++r) { |
| 228 for (int g = 0; g < size; ++g) { |
| 229 for (int b = 0; b < size; ++b) { |
| 230 pixels[(size * ((size * b) + g)) + r] = SkColorSetARGB(0xFF, |
| 231 invR ? invLut[r] : lut[r], |
| 232 invG ? invLut[g] : lut[g], |
| 233 invB ? invLut[b] : lut[b]); |
| 234 } |
| 235 } |
| 236 } |
| 237 if (cubeDimension) { |
| 238 *cubeDimension = size; |
| 239 } |
| 240 return data; |
| 241 } |
| 242 |
| 213 static void drawSomething(SkCanvas* canvas) { | 243 static void drawSomething(SkCanvas* canvas) { |
| 214 SkPaint paint; | 244 SkPaint paint; |
| 215 | 245 |
| 216 canvas->save(); | 246 canvas->save(); |
| 217 canvas->scale(0.5f, 0.5f); | 247 canvas->scale(0.5f, 0.5f); |
| 218 canvas->drawBitmap(make_bitmap(), 0, 0, NULL); | 248 canvas->drawBitmap(make_bitmap(), 0, 0, NULL); |
| 219 canvas->restore(); | 249 canvas->restore(); |
| 220 | 250 |
| 221 const char beforeStr[] = "before circle"; | 251 const char beforeStr[] = "before circle"; |
| 222 const char afterStr[] = "after circle"; | 252 const char afterStr[] = "after circle"; |
| 223 | 253 |
| 224 paint.setAntiAlias(true); | 254 paint.setAntiAlias(true); |
| 225 | 255 |
| 226 paint.setColor(SK_ColorRED); | 256 paint.setColor(SK_ColorRED); |
| 227 canvas->drawData(beforeStr, sizeof(beforeStr)); | 257 canvas->drawData(beforeStr, sizeof(beforeStr)); |
| 228 canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2
), SkIntToScalar(kBitmapSize/3), paint); | 258 canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2
), SkIntToScalar(kBitmapSize/3), paint); |
| 229 canvas->drawData(afterStr, sizeof(afterStr)); | 259 canvas->drawData(afterStr, sizeof(afterStr)); |
| 230 paint.setColor(SK_ColorBLACK); | 260 paint.setColor(SK_ColorBLACK); |
| 231 paint.setTextSize(SkIntToScalar(kBitmapSize/3)); | 261 paint.setTextSize(SkIntToScalar(kBitmapSize/3)); |
| 232 canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(k
BitmapSize/4), paint); | 262 canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(k
BitmapSize/4), paint); |
| 233 } | 263 } |
| 234 | 264 |
| 235 static SkImageFilter* make_image_filter(bool canBeNull = true) { | 265 static SkImageFilter* make_image_filter(bool canBeNull = true) { |
| 236 SkImageFilter* filter = 0; | 266 SkImageFilter* filter = 0; |
| 237 | 267 |
| 238 // Add a 1 in 3 chance to get a NULL input | 268 // Add a 1 in 3 chance to get a NULL input |
| 239 if (canBeNull && (R(3) == 1)) { return filter; } | 269 if (canBeNull && (R(3) == 1)) { return filter; } |
| 240 | 270 |
| 241 enum { ALPHA_THRESHOLD, MERGE, COLOR, BLUR, MAGNIFIER, | 271 enum { ALPHA_THRESHOLD, MERGE, COLOR, LUT3D, BLUR, MAGNIFIER, |
| 242 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, | 272 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, |
| 243 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, | 273 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, |
| 244 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS }; | 274 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS }; |
| 245 | 275 |
| 246 switch (R(NUM_FILTERS)) { | 276 switch (R(NUM_FILTERS)) { |
| 247 case ALPHA_THRESHOLD: | 277 case ALPHA_THRESHOLD: |
| 248 filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), ma
ke_scalar()); | 278 filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), ma
ke_scalar()); |
| 249 break; | 279 break; |
| 250 case MERGE: | 280 case MERGE: |
| 251 filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filt
er(), make_xfermode()); | 281 filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filt
er(), make_xfermode()); |
| 252 break; | 282 break; |
| 253 case COLOR: | 283 case COLOR: |
| 254 { | 284 { |
| 255 SkAutoTUnref<SkColorFilter> cf((R(2) == 1) ? | 285 SkAutoTUnref<SkColorFilter> cf((R(2) == 1) ? |
| 256 SkColorFilter::CreateModeFilter(make_color(), make_xfermode())
: | 286 SkColorFilter::CreateModeFilter(make_color(), make_xfermode())
: |
| 257 SkColorFilter::CreateLightingFilter(make_color(), make_color())
); | 287 SkColorFilter::CreateLightingFilter(make_color(), make_color())
); |
| 258 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt
er()) : 0; | 288 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt
er()) : 0; |
| 259 } | 289 } |
| 260 break; | 290 break; |
| 291 case LUT3D: |
| 292 { |
| 293 int cubeDimension; |
| 294 SkAutoDataUnref lut3D(make_3Dlut(&cubeDimension, (R(2) == 1), (R(2) == 1
), (R(2) == 1))); |
| 295 SkAutoTUnref<SkColorFilter> cf(SkColorCubeFilter::Create(lut3D, cubeDime
nsion)); |
| 296 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt
er()) : 0; |
| 297 } |
| 298 break; |
| 261 case BLUR: | 299 case BLUR: |
| 262 filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true),
make_image_filter()); | 300 filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true),
make_image_filter()); |
| 263 break; | 301 break; |
| 264 case MAGNIFIER: | 302 case MAGNIFIER: |
| 265 filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); | 303 filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); |
| 266 break; | 304 break; |
| 267 case DOWN_SAMPLE: | 305 case DOWN_SAMPLE: |
| 268 filter = SkDownSampleImageFilter::Create(make_scalar()); | 306 filter = SkDownSampleImageFilter::Create(make_scalar()); |
| 269 break; | 307 break; |
| 270 case XFERMODE: | 308 case XFERMODE: |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 } | 519 } |
| 482 | 520 |
| 483 private: | 521 private: |
| 484 typedef SkView INHERITED; | 522 typedef SkView INHERITED; |
| 485 }; | 523 }; |
| 486 | 524 |
| 487 ////////////////////////////////////////////////////////////////////////////// | 525 ////////////////////////////////////////////////////////////////////////////// |
| 488 | 526 |
| 489 static SkView* MyFactory() { return new ImageFilterFuzzView; } | 527 static SkView* MyFactory() { return new ImageFilterFuzzView; } |
| 490 static SkViewRegister reg(MyFactory); | 528 static SkViewRegister reg(MyFactory); |
| OLD | NEW |