Chromium Code Reviews| Index: src/effects/SkRectShaderImageFilter.cpp |
| =================================================================== |
| --- src/effects/SkRectShaderImageFilter.cpp (revision 8724) |
| +++ src/effects/SkRectShaderImageFilter.cpp (working copy) |
| @@ -43,16 +43,26 @@ |
| } |
| bool SkRectShaderImageFilter::onFilterImage(Proxy* proxy, |
| - const SkBitmap& source, |
| - const SkMatrix& matrix, |
| - SkBitmap* result, |
| - SkIPoint* loc) { |
| - SkAutoTUnref<SkDevice> device(proxy->createDevice(SkScalarCeilToInt(fRect.width()), |
| - SkScalarCeilToInt(fRect.height()))); |
| + const SkBitmap& source, |
| + const SkMatrix& ctm, |
| + SkBitmap* result, |
| + SkIPoint* loc) { |
| + SkRect rect(fRect); |
| + if (rect.isEmpty()) { |
| + SkBitmap src = this->getInputResult(0, proxy, source, ctm, loc); |
|
Stephen White
2013/04/17 17:59:40
This filter should never have a DAG input, so I'd
|
| + rect = SkRect::MakeWH(src.width(), src.height()); |
| + } |
| + |
| + if (rect.isEmpty()) { |
| + return false; |
| + } |
| + |
| + SkAutoTUnref<SkDevice> device(proxy->createDevice(SkScalarCeilToInt(rect.width()), |
| + SkScalarCeilToInt(rect.height()))); |
| SkCanvas canvas(device.get()); |
| SkPaint paint; |
| paint.setShader(fShader); |
| - canvas.drawRect(fRect, paint); |
| + canvas.drawRect(rect, paint); |
| *result = device.get()->accessBitmap(false); |
| return true; |
| } |