diff options
-rw-r--r-- | src/effects/SkRectShaderImageFilter.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/effects/SkRectShaderImageFilter.cpp b/src/effects/SkRectShaderImageFilter.cpp index f5466cc2cc..aee0e63bae 100644 --- a/src/effects/SkRectShaderImageFilter.cpp +++ b/src/effects/SkRectShaderImageFilter.cpp @@ -43,16 +43,25 @@ SkRectShaderImageFilter::~SkRectShaderImageFilter() { } 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&, + SkBitmap* result, + SkIPoint*) { + SkRect rect(fRect); + if (rect.isEmpty()) { + rect = SkRect::MakeWH(source.width(), source.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; } |