diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.cpp')
-rw-r--r-- | src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.cpp b/src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.cpp index 71c00eb..c892ee9 100644 --- a/src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.cpp +++ b/src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.cpp @@ -33,8 +33,45 @@ SVGFilter::SVGFilter(const FloatRect& itemBox, const FloatRect& filterRect, bool { } -void SVGFilter::calculateEffectSubRegion(FilterEffect*) +void SVGFilter::calculateEffectSubRegion(FilterEffect* effect) { + FloatRect subRegionBBox = effect->subRegion(); + FloatRect useBBox = effect->unionOfChildEffectSubregions(); + + FloatRect newSubRegion = subRegionBBox; + + if (m_effectBBoxMode) { + newSubRegion = useBBox; + + if (effect->hasX()) + newSubRegion.setX(m_itemBox.x() + subRegionBBox.x() * m_itemBox.width()); + + if (effect->hasY()) + newSubRegion.setY(m_itemBox.y() + subRegionBBox.y() * m_itemBox.height()); + + if (effect->hasWidth()) + newSubRegion.setWidth(subRegionBBox.width() * m_itemBox.width()); + + if (effect->hasHeight()) + newSubRegion.setHeight(subRegionBBox.height() * m_itemBox.height()); + } else { + if (effect->xBoundingBoxMode()) + newSubRegion.setX(useBBox.x() + subRegionBBox.x() * useBBox.width()); + + if (effect->yBoundingBoxMode()) + newSubRegion.setY(useBBox.y() + subRegionBBox.y() * useBBox.height()); + + if (effect->widthBoundingBoxMode()) + newSubRegion.setWidth(subRegionBBox.width() * useBBox.width()); + + if (effect->heightBoundingBoxMode()) + newSubRegion.setHeight(subRegionBBox.height() * useBBox.height()); + } + + // clip every filter effect to the filter region + newSubRegion.intersect(m_filterRect); + + effect->setSubRegion(newSubRegion); } PassRefPtr<SVGFilter> SVGFilter::create(const FloatRect& itemBox, const FloatRect& filterRect, bool effectBBoxMode, bool filterBBoxMode) |