diff options
Diffstat (limited to 'WebCore/platform/graphics/filters/SourceAlpha.cpp')
-rw-r--r-- | WebCore/platform/graphics/filters/SourceAlpha.cpp | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/WebCore/platform/graphics/filters/SourceAlpha.cpp b/WebCore/platform/graphics/filters/SourceAlpha.cpp index beaf2e7..7dc56d9 100644 --- a/WebCore/platform/graphics/filters/SourceAlpha.cpp +++ b/WebCore/platform/graphics/filters/SourceAlpha.cpp @@ -42,31 +42,25 @@ const AtomicString& SourceAlpha::effectName() return s_effectName; } -FloatRect SourceAlpha::determineFilterPrimitiveSubregion(Filter* filter) +void SourceAlpha::determineAbsolutePaintRect(Filter* filter) { - FloatRect clippedSourceRect = filter->sourceImageRect(); - if (filter->sourceImageRect().x() < filter->filterRegion().x()) - clippedSourceRect.setX(filter->filterRegion().x()); - if (filter->sourceImageRect().y() < filter->filterRegion().y()) - clippedSourceRect.setY(filter->filterRegion().y()); - setFilterPrimitiveSubregion(clippedSourceRect); - clippedSourceRect.scale(filter->filterResolution().width(), filter->filterResolution().height()); - setRepaintRectInLocalCoordinates(clippedSourceRect); - return filter->filterRegion(); + FloatRect paintRect = filter->sourceImageRect(); + paintRect.scale(filter->filterResolution().width(), filter->filterResolution().height()); + setAbsolutePaintRect(enclosingIntRect(paintRect)); } void SourceAlpha::apply(Filter* filter) { - GraphicsContext* filterContext = effectContext(); - if (!filterContext) + GraphicsContext* filterContext = effectContext(filter); + if (!filterContext || !filter->sourceImage()) return; setIsAlphaImage(true); - FloatRect imageRect(FloatPoint(), filter->sourceImage()->size()); + FloatRect imageRect(FloatPoint(), absolutePaintRect().size()); filterContext->save(); filterContext->clipToImageBuffer(filter->sourceImage(), imageRect); - filterContext->fillRect(imageRect, Color::black, DeviceColorSpace); + filterContext->fillRect(imageRect, Color::black, ColorSpaceDeviceRGB); filterContext->restore(); } |