Chromium Code Reviews| Index: src/effects/SkColorFilterImageFilter.cpp |
| diff --git a/src/effects/SkColorFilterImageFilter.cpp b/src/effects/SkColorFilterImageFilter.cpp |
| index 1d3cfee1c398fd413f9399f805ee92a82162330f..be5dbf5d4704469c61c43154e3c48807d65ed007 100755 |
| --- a/src/effects/SkColorFilterImageFilter.cpp |
| +++ b/src/effects/SkColorFilterImageFilter.cpp |
| @@ -57,7 +57,7 @@ bool matrix_needs_clamping(SkScalar matrix[20]) { |
| }; |
| SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, |
| - SkImageFilter* input) { |
| + SkImageFilter* input, const SkIRect* cropRect) { |
| SkASSERT(cf); |
| SkScalar colorMatrix[20], inputMatrix[20]; |
| SkColorFilter* inputColorFilter; |
| @@ -69,13 +69,13 @@ SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf, |
| SkScalar combinedMatrix[20]; |
| mult_color_matrix(inputMatrix, colorMatrix, combinedMatrix); |
| SkAutoTUnref<SkColorFilter> newCF(SkNEW_ARGS(SkColorMatrixFilter, (combinedMatrix))); |
| - return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0))); |
| + return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect)); |
| } |
| } |
| - return SkNEW_ARGS(SkColorFilterImageFilter, (cf, input)); |
| + return SkNEW_ARGS(SkColorFilterImageFilter, (cf, input, cropRect)); |
| } |
| -SkColorFilterImageFilter::SkColorFilterImageFilter(SkColorFilter* cf, SkImageFilter* input) : INHERITED(input), fColorFilter(cf) { |
| +SkColorFilterImageFilter::SkColorFilterImageFilter(SkColorFilter* cf, SkImageFilter* input, const SkIRect* cropRect) : INHERITED(input, cropRect), fColorFilter(cf) { |
|
reed1
2013/07/19 21:34:04
line-wrap
|
| SkASSERT(cf); |
| SkSafeRef(cf); |
| } |
| @@ -103,22 +103,28 @@ bool SkColorFilterImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& sourc |
| return false; |
| } |
| - SkAutoTUnref<SkDevice> device(proxy->createDevice(src.width(), src.height())); |
| + SkIRect bounds; |
| + src.getBounds(&bounds); |
| + this->applyCropRect(&bounds); |
|
reed1
2013/07/19 21:34:04
what will bounds be if it and the croprect didn't
|
| + SkAutoTUnref<SkDevice> device(proxy->createDevice(bounds.width(), bounds.height())); |
| SkCanvas canvas(device.get()); |
| SkPaint paint; |
| paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
| paint.setColorFilter(fColorFilter); |
| - canvas.drawSprite(src, 0, 0, &paint); |
| + canvas.drawSprite(src, -bounds.fLeft, -bounds.fTop, &paint); |
| *result = device.get()->accessBitmap(false); |
| + loc->fX += bounds.fLeft; |
| + loc->fY += bounds.fTop; |
| return true; |
| } |
| bool SkColorFilterImageFilter::asColorFilter(SkColorFilter** filter) const { |
| - if (filter) { |
| + if (filter && cropRect().isLargest()) { |
| *filter = fColorFilter; |
| fColorFilter->ref(); |
| + return true; |
| } |
| - return true; |
| + return false; |
| } |