Index: Source/core/rendering/svg/RenderSVGResourceFilter.cpp |
diff --git a/Source/core/rendering/svg/RenderSVGResourceFilter.cpp b/Source/core/rendering/svg/RenderSVGResourceFilter.cpp |
index 49d5b79e16439e66b114827321672f4dd8a9f110..1d33e07aad3af7ee616d19cbc00c4d4b018ac82a 100644 |
--- a/Source/core/rendering/svg/RenderSVGResourceFilter.cpp |
+++ b/Source/core/rendering/svg/RenderSVGResourceFilter.cpp |
@@ -170,7 +170,7 @@ static void drawDeferredFilter(GraphicsContext* context, FilterData* filterData, |
ASSERT(sourceGraphic); |
builder.setSourceGraphic(sourceGraphic); |
RefPtr<ImageFilter> imageFilter = builder.build(filterData->builder->lastEffect(), ColorSpaceDeviceRGB); |
- FloatRect boundaries = enclosingIntRect(filterData->boundaries); |
+ FloatRect boundaries = filterData->boundaries; |
context->save(); |
FloatSize deviceSize = context->getCTM().mapSize(boundaries.size()); |
@@ -186,8 +186,9 @@ static void drawDeferredFilter(GraphicsContext* context, FilterData* filterData, |
float scale = sqrtf(FilterEffect::maxFilterArea() / scaledArea); |
context->scale(scale, scale); |
} |
- // Clip drawing of filtered image to primitive boundaries. |
- context->clipRect(boundaries); |
+ // Clip drawing of filtered image to the minimum required paint rect. |
+ FilterEffect* lastEffect = filterData->builder->lastEffect(); |
+ context->clipRect(lastEffect->determineAbsolutePaintRect(lastEffect->maxEffectRect())); |
if (filterElement->hasAttribute(SVGNames::filterResAttr)) { |
// Get boundaries in device coords. |
// FIXME: See crbug.com/382491. Is the use of getCTM OK here, given it does not include device |