| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
| 10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 static const int kBitmapSize = 4; | 46 static const int kBitmapSize = 4; |
| 47 | 47 |
| 48 namespace { | 48 namespace { |
| 49 | 49 |
| 50 class MatrixTestImageFilter : public SkImageFilter { | 50 class MatrixTestImageFilter : public SkImageFilter { |
| 51 public: | 51 public: |
| 52 MatrixTestImageFilter(skiatest::Reporter* reporter, const SkMatrix& expected
Matrix) | 52 MatrixTestImageFilter(skiatest::Reporter* reporter, const SkMatrix& expected
Matrix) |
| 53 : SkImageFilter(0, nullptr), fReporter(reporter), fExpectedMatrix(expected
Matrix) { | 53 : SkImageFilter(0, nullptr), fReporter(reporter), fExpectedMatrix(expected
Matrix) { |
| 54 } | 54 } |
| 55 | 55 |
| 56 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context& ctx, | 56 bool onFilterImageDeprecated(Proxy*, const SkBitmap& src, const Context& ctx
, |
| 57 SkBitmap* result, SkIPoint* offset) const overrid
e { | 57 SkBitmap* result, SkIPoint* offset) const overr
ide { |
| 58 REPORTER_ASSERT(fReporter, ctx.ctm() == fExpectedMatrix); | 58 REPORTER_ASSERT(fReporter, ctx.ctm() == fExpectedMatrix); |
| 59 return true; | 59 return true; |
| 60 } | 60 } |
| 61 | 61 |
| 62 SK_TO_STRING_OVERRIDE() | 62 SK_TO_STRING_OVERRIDE() |
| 63 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(MatrixTestImageFilter) | 63 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(MatrixTestImageFilter) |
| 64 | 64 |
| 65 protected: | 65 protected: |
| 66 void flatten(SkWriteBuffer& buffer) const override { | 66 void flatten(SkWriteBuffer& buffer) const override { |
| 67 this->INHERITED::flatten(buffer); | 67 this->INHERITED::flatten(buffer); |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 SkXfermodeImageFilter::Create(SkXfermode::Create(SkXfermode::kSrcOver_Mo
de), input.get(), input.get(), &cropRect), | 314 SkXfermodeImageFilter::Create(SkXfermode::Create(SkXfermode::kSrcOver_Mo
de), input.get(), input.get(), &cropRect), |
| 315 }; | 315 }; |
| 316 | 316 |
| 317 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 317 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
| 318 SkImageFilter* filter = filters[i]; | 318 SkImageFilter* filter = filters[i]; |
| 319 SkBitmap result; | 319 SkBitmap result; |
| 320 SkIPoint offset; | 320 SkIPoint offset; |
| 321 SkString str; | 321 SkString str; |
| 322 str.printf("filter %d", static_cast<int>(i)); | 322 str.printf("filter %d", static_cast<int>(i)); |
| 323 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul
lptr); | 323 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nul
lptr); |
| 324 REPORTER_ASSERT_MESSAGE(reporter, filter->filterImage(proxy, bitmap, ctx
, | 324 REPORTER_ASSERT_MESSAGE(reporter, |
| 325 &result, &offset), str.c_str()); | 325 filter->filterImageDeprecated(proxy, bitmap, ctx
, |
| 326 &result, &offset), |
| 327 str.c_str()); |
| 326 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, st
r.c_str()); | 328 REPORTER_ASSERT_MESSAGE(reporter, offset.fX == 20 && offset.fY == 30, st
r.c_str()); |
| 327 } | 329 } |
| 328 | 330 |
| 329 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 331 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
| 330 SkSafeUnref(filters[i]); | 332 SkSafeUnref(filters[i]); |
| 331 } | 333 } |
| 332 } | 334 } |
| 333 | 335 |
| 334 static SkBitmap make_gradient_circle(int width, int height) { | 336 static SkBitmap make_gradient_circle(int width, int height) { |
| 335 SkBitmap bitmap; | 337 SkBitmap bitmap; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 359 const SkScalar five = SkIntToScalar(5); | 361 const SkScalar five = SkIntToScalar(5); |
| 360 | 362 |
| 361 SkAutoTUnref<SkImageFilter> positiveFilter(SkBlurImageFilter::Create(five, f
ive)); | 363 SkAutoTUnref<SkImageFilter> positiveFilter(SkBlurImageFilter::Create(five, f
ive)); |
| 362 SkAutoTUnref<SkImageFilter> negativeFilter(SkBlurImageFilter::Create(-five,
five)); | 364 SkAutoTUnref<SkImageFilter> negativeFilter(SkBlurImageFilter::Create(-five,
five)); |
| 363 | 365 |
| 364 SkBitmap gradient = make_gradient_circle(width, height); | 366 SkBitmap gradient = make_gradient_circle(width, height); |
| 365 SkBitmap positiveResult1, negativeResult1; | 367 SkBitmap positiveResult1, negativeResult1; |
| 366 SkBitmap positiveResult2, negativeResult2; | 368 SkBitmap positiveResult2, negativeResult2; |
| 367 SkIPoint offset; | 369 SkIPoint offset; |
| 368 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr); | 370 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr); |
| 369 REPORTER_ASSERT(reporter, positiveFilter->filterImage(proxy, gradient, ctx,
&positiveResult1, &offset)); | 371 REPORTER_ASSERT(reporter, |
| 370 REPORTER_ASSERT(reporter, negativeFilter->filterImage(proxy, gradient, ctx,
&negativeResult1, &offset)); | 372 positiveFilter->filterImageDeprecated(proxy, gradient, ctx, |
| 373 &positiveResult1, &off
set)); |
| 374 REPORTER_ASSERT(reporter, |
| 375 negativeFilter->filterImageDeprecated(proxy, gradient, ctx, |
| 376 &negativeResult1, &off
set)); |
| 371 SkMatrix negativeScale; | 377 SkMatrix negativeScale; |
| 372 negativeScale.setScale(-SK_Scalar1, SK_Scalar1); | 378 negativeScale.setScale(-SK_Scalar1, SK_Scalar1); |
| 373 SkImageFilter::Context negativeCTX(negativeScale, SkIRect::MakeWH(32, 32), n
ullptr); | 379 SkImageFilter::Context negativeCTX(negativeScale, SkIRect::MakeWH(32, 32), n
ullptr); |
| 374 REPORTER_ASSERT(reporter, positiveFilter->filterImage(proxy, gradient, negat
iveCTX, &negativeResult2, &offset)); | 380 REPORTER_ASSERT(reporter, |
| 375 REPORTER_ASSERT(reporter, negativeFilter->filterImage(proxy, gradient, negat
iveCTX, &positiveResult2, &offset)); | 381 positiveFilter->filterImageDeprecated(proxy, gradient, negat
iveCTX, |
| 382 &negativeResult2, &off
set)); |
| 383 REPORTER_ASSERT(reporter, |
| 384 negativeFilter->filterImageDeprecated(proxy, gradient, negat
iveCTX, |
| 385 &positiveResult2, &off
set)); |
| 376 SkAutoLockPixels lockP1(positiveResult1); | 386 SkAutoLockPixels lockP1(positiveResult1); |
| 377 SkAutoLockPixels lockP2(positiveResult2); | 387 SkAutoLockPixels lockP2(positiveResult2); |
| 378 SkAutoLockPixels lockN1(negativeResult1); | 388 SkAutoLockPixels lockN1(negativeResult1); |
| 379 SkAutoLockPixels lockN2(negativeResult2); | 389 SkAutoLockPixels lockN2(negativeResult2); |
| 380 for (int y = 0; y < height; y++) { | 390 for (int y = 0; y < height; y++) { |
| 381 int diffs = memcmp(positiveResult1.getAddr32(0, y), negativeResult1.getA
ddr32(0, y), positiveResult1.rowBytes()); | 391 int diffs = memcmp(positiveResult1.getAddr32(0, y), negativeResult1.getA
ddr32(0, y), positiveResult1.rowBytes()); |
| 382 REPORTER_ASSERT(reporter, !diffs); | 392 REPORTER_ASSERT(reporter, !diffs); |
| 383 if (diffs) { | 393 if (diffs) { |
| 384 break; | 394 break; |
| 385 } | 395 } |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 655 SkBitmap bitmap; | 665 SkBitmap bitmap; |
| 656 bitmap.allocN32Pixels(1, 1); | 666 bitmap.allocN32Pixels(1, 1); |
| 657 bitmap.eraseColor(0); | 667 bitmap.eraseColor(0); |
| 658 const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); | 668 const SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); |
| 659 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 669 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 660 SkAutoTUnref<SkBaseDevice> device(SkBitmapDevice::Create(info, props)); | 670 SkAutoTUnref<SkBaseDevice> device(SkBitmapDevice::Create(info, props)); |
| 661 SkImageFilter::DeviceProxy proxy(device); | 671 SkImageFilter::DeviceProxy proxy(device); |
| 662 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 100, 100),
nullptr); | 672 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 100, 100),
nullptr); |
| 663 SkBitmap result; | 673 SkBitmap result; |
| 664 SkIPoint offset; | 674 SkIPoint offset; |
| 665 REPORTER_ASSERT(reporter, merge->filterImage(&proxy, bitmap, ctx, &result, &
offset)); | 675 REPORTER_ASSERT(reporter, merge->filterImageDeprecated(&proxy, bitmap, ctx,
&result, &offset)); |
| 666 REPORTER_ASSERT(reporter, result.width() == 20 && result.height() == 20); | 676 REPORTER_ASSERT(reporter, result.width() == 20 && result.height() == 20); |
| 667 } | 677 } |
| 668 | 678 |
| 669 static void draw_blurred_rect(SkCanvas* canvas) { | 679 static void draw_blurred_rect(SkCanvas* canvas) { |
| 670 SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(SkIntToScalar(8
), 0)); | 680 SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(SkIntToScalar(8
), 0)); |
| 671 SkPaint filterPaint; | 681 SkPaint filterPaint; |
| 672 filterPaint.setColor(SK_ColorWHITE); | 682 filterPaint.setColor(SK_ColorWHITE); |
| 673 filterPaint.setImageFilter(filter); | 683 filterPaint.setImageFilter(filter); |
| 674 canvas->saveLayer(nullptr, &filterPaint); | 684 canvas->saveLayer(nullptr, &filterPaint); |
| 675 SkPaint whitePaint; | 685 SkPaint whitePaint; |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 905 SkAutoTUnref<SkImageFilter> imageFilter(SkPictureImageFilter::Create(picture
.get())); | 915 SkAutoTUnref<SkImageFilter> imageFilter(SkPictureImageFilter::Create(picture
.get())); |
| 906 | 916 |
| 907 SkBitmap result; | 917 SkBitmap result; |
| 908 SkIPoint offset; | 918 SkIPoint offset; |
| 909 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(1, 1, 1, 1), nul
lptr); | 919 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(1, 1, 1, 1), nul
lptr); |
| 910 SkBitmap bitmap; | 920 SkBitmap bitmap; |
| 911 bitmap.allocN32Pixels(2, 2); | 921 bitmap.allocN32Pixels(2, 2); |
| 912 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 922 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 913 SkBitmapDevice device(bitmap, props); | 923 SkBitmapDevice device(bitmap, props); |
| 914 SkImageFilter::DeviceProxy proxy(&device); | 924 SkImageFilter::DeviceProxy proxy(&device); |
| 915 REPORTER_ASSERT(reporter, !imageFilter->filterImage(&proxy, bitmap, ctx, &re
sult, &offset)); | 925 REPORTER_ASSERT(reporter, |
| 926 !imageFilter->filterImageDeprecated(&proxy, bitmap, ctx, &re
sult, &offset)); |
| 916 } | 927 } |
| 917 | 928 |
| 918 DEF_TEST(ImageFilterEmptySaveLayer, reporter) { | 929 DEF_TEST(ImageFilterEmptySaveLayer, reporter) { |
| 919 // Even when there's an empty saveLayer()/restore(), ensure that an image | 930 // Even when there's an empty saveLayer()/restore(), ensure that an image |
| 920 // filter or color filter which affects transparent black still draws. | 931 // filter or color filter which affects transparent black still draws. |
| 921 | 932 |
| 922 SkBitmap bitmap; | 933 SkBitmap bitmap; |
| 923 bitmap.allocN32Pixels(10, 10); | 934 bitmap.allocN32Pixels(10, 10); |
| 924 SkCanvas canvas(bitmap); | 935 SkCanvas canvas(bitmap); |
| 925 | 936 |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 | 1164 |
| 1154 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(1, 0, 20, 20)); | 1165 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(1, 0, 20, 20)); |
| 1155 SkAutoTUnref<SkImageFilter> offsetFilter(SkOffsetImageFilter::Create(0, 0, n
ullptr, &cropRect)); | 1166 SkAutoTUnref<SkImageFilter> offsetFilter(SkOffsetImageFilter::Create(0, 0, n
ullptr, &cropRect)); |
| 1156 SkAutoTUnref<SkImageFilter> blurFilter(SkBlurImageFilter::Create(SK_Scalar1,
SK_Scalar1, | 1167 SkAutoTUnref<SkImageFilter> blurFilter(SkBlurImageFilter::Create(SK_Scalar1,
SK_Scalar1, |
| 1157 nullptr, &c
ropRect)); | 1168 nullptr, &c
ropRect)); |
| 1158 SkAutoTUnref<SkImageFilter> composedFilter(SkComposeImageFilter::Create(blur
Filter, | 1169 SkAutoTUnref<SkImageFilter> composedFilter(SkComposeImageFilter::Create(blur
Filter, |
| 1159 offs
etFilter.get())); | 1170 offs
etFilter.get())); |
| 1160 SkBitmap result; | 1171 SkBitmap result; |
| 1161 SkIPoint offset; | 1172 SkIPoint offset; |
| 1162 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr
); | 1173 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr
); |
| 1163 REPORTER_ASSERT(reporter, composedFilter->filterImage(&proxy, bitmap, ctx, &
result, &offset)); | 1174 REPORTER_ASSERT(reporter, |
| 1175 composedFilter->filterImageDeprecated(&proxy, bitmap, ctx, &
result, &offset)); |
| 1164 REPORTER_ASSERT(reporter, offset.fX == 1 && offset.fY == 0); | 1176 REPORTER_ASSERT(reporter, offset.fX == 1 && offset.fY == 0); |
| 1165 } | 1177 } |
| 1166 | 1178 |
| 1167 DEF_TEST(PartialCropRect, reporter) { | 1179 DEF_TEST(PartialCropRect, reporter) { |
| 1168 SkBitmap bitmap; | 1180 SkBitmap bitmap; |
| 1169 bitmap.allocN32Pixels(100, 100); | 1181 bitmap.allocN32Pixels(100, 100); |
| 1170 bitmap.eraseARGB(0, 0, 0, 0); | 1182 bitmap.eraseARGB(0, 0, 0, 0); |
| 1171 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); | 1183 const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); |
| 1172 SkBitmapDevice device(bitmap, props); | 1184 SkBitmapDevice device(bitmap, props); |
| 1173 SkImageFilter::DeviceProxy proxy(&device); | 1185 SkImageFilter::DeviceProxy proxy(&device); |
| 1174 | 1186 |
| 1175 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(100, 0, 20, 30), | 1187 SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(100, 0, 20, 30), |
| 1176 SkImageFilter::CropRect::kHasWidth_CropEdge | SkImageFilter::CropRect::k
HasHeight_CropEdge); | 1188 SkImageFilter::CropRect::kHasWidth_CropEdge | SkImageFilter::CropRect::k
HasHeight_CropEdge); |
| 1177 SkAutoTUnref<SkImageFilter> filter(make_grayscale(nullptr, &cropRect)); | 1189 SkAutoTUnref<SkImageFilter> filter(make_grayscale(nullptr, &cropRect)); |
| 1178 SkBitmap result; | 1190 SkBitmap result; |
| 1179 SkIPoint offset; | 1191 SkIPoint offset; |
| 1180 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr
); | 1192 SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr
); |
| 1181 REPORTER_ASSERT(reporter, filter->filterImage(&proxy, bitmap, ctx, &result,
&offset)); | 1193 REPORTER_ASSERT(reporter, |
| 1194 filter->filterImageDeprecated(&proxy, bitmap, ctx, &result,
&offset)); |
| 1182 REPORTER_ASSERT(reporter, offset.fX == 0); | 1195 REPORTER_ASSERT(reporter, offset.fX == 0); |
| 1183 REPORTER_ASSERT(reporter, offset.fY == 0); | 1196 REPORTER_ASSERT(reporter, offset.fY == 0); |
| 1184 REPORTER_ASSERT(reporter, result.width() == 20); | 1197 REPORTER_ASSERT(reporter, result.width() == 20); |
| 1185 REPORTER_ASSERT(reporter, result.height() == 30); | 1198 REPORTER_ASSERT(reporter, result.height() == 30); |
| 1186 } | 1199 } |
| 1187 | 1200 |
| 1188 DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { | 1201 DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { |
| 1189 | 1202 |
| 1190 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); | 1203 SkPoint3 location = SkPoint3::Make(0, 0, SK_Scalar1); |
| 1191 SkAutoTUnref<SkImageFilter> lighting(SkLightingImageFilter::CreatePointLitDi
ffuse( | 1204 SkAutoTUnref<SkImageFilter> lighting(SkLightingImageFilter::CreatePointLitDi
ffuse( |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1368 test_negative_blur_sigma(&proxy, reporter); | 1381 test_negative_blur_sigma(&proxy, reporter); |
| 1369 } | 1382 } |
| 1370 | 1383 |
| 1371 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { | 1384 DEF_GPUTEST_FOR_ALL_CONTEXTS(BlurLargeImage_Gpu, reporter, context) { |
| 1372 SkAutoTUnref<SkSurface> surface( | 1385 SkAutoTUnref<SkSurface> surface( |
| 1373 SkSurface::NewRenderTarget(context, SkSurface::kYes_Budgeted, | 1386 SkSurface::NewRenderTarget(context, SkSurface::kYes_Budgeted, |
| 1374 SkImageInfo::MakeN32Premul(100, 100))); | 1387 SkImageInfo::MakeN32Premul(100, 100))); |
| 1375 test_large_blur_input(reporter, surface->getCanvas()); | 1388 test_large_blur_input(reporter, surface->getCanvas()); |
| 1376 } | 1389 } |
| 1377 #endif | 1390 #endif |
| OLD | NEW |