diff options
author | John Reck <jreck@google.com> | 2010-11-04 12:00:17 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2010-11-09 11:35:04 -0800 |
commit | e14391e94c850b8bd03680c23b38978db68687a8 (patch) | |
tree | 3fed87e6620fecaf3edc7259ae58a11662bedcb2 /WebCore/svg/graphics | |
parent | 1bd705833a68f07850cf7e204b26f8d328d16951 (diff) | |
download | external_webkit-e14391e94c850b8bd03680c23b38978db68687a8.zip external_webkit-e14391e94c850b8bd03680c23b38978db68687a8.tar.gz external_webkit-e14391e94c850b8bd03680c23b38978db68687a8.tar.bz2 |
Merge Webkit at r70949: Initial merge by git.
Change-Id: I77b8645c083b5d0da8dba73ed01d4014aab9848e
Diffstat (limited to 'WebCore/svg/graphics')
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFilter.cpp | 60 | ||||
-rw-r--r-- | WebCore/svg/graphics/filters/SVGFilter.h | 6 |
2 files changed, 2 insertions, 64 deletions
diff --git a/WebCore/svg/graphics/filters/SVGFilter.cpp b/WebCore/svg/graphics/filters/SVGFilter.cpp index dfdccd7..e7b61db 100644 --- a/WebCore/svg/graphics/filters/SVGFilter.cpp +++ b/WebCore/svg/graphics/filters/SVGFilter.cpp @@ -23,8 +23,6 @@ #if ENABLE(SVG) && ENABLE(FILTERS) #include "SVGFilter.h" -#include "SVGFEImage.h" - namespace WebCore { SVGFilter::SVGFilter(const AffineTransform& absoluteTransform, const FloatRect& absoluteSourceDrawingRegion, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode) @@ -38,64 +36,6 @@ SVGFilter::SVGFilter(const AffineTransform& absoluteTransform, const FloatRect& m_absoluteFilterRegion = absoluteTransform.mapRect(filterRegion); } -void SVGFilter::determineFilterPrimitiveSubregion(FilterEffect* effect, const FloatRect& unionOfPreviousPrimitiveSubregions) -{ - FloatRect subRegionBBox = effect->effectBoundaries(); - FloatRect newSubRegion = subRegionBBox; - - if (m_effectBBoxMode) { - newSubRegion = unionOfPreviousPrimitiveSubregions; - - if (effect->hasX()) - newSubRegion.setX(m_targetBoundingBox.x() + subRegionBBox.x() * m_targetBoundingBox.width()); - - if (effect->hasY()) - newSubRegion.setY(m_targetBoundingBox.y() + subRegionBBox.y() * m_targetBoundingBox.height()); - - if (effect->hasWidth()) - newSubRegion.setWidth(subRegionBBox.width() * m_targetBoundingBox.width()); - - if (effect->hasHeight()) - newSubRegion.setHeight(subRegionBBox.height() * m_targetBoundingBox.height()); - } else { - if (!effect->hasX()) - newSubRegion.setX(unionOfPreviousPrimitiveSubregions.x()); - - if (!effect->hasY()) - newSubRegion.setY(unionOfPreviousPrimitiveSubregions.y()); - - if (!effect->hasWidth()) - newSubRegion.setWidth(unionOfPreviousPrimitiveSubregions.width()); - - if (!effect->hasHeight()) - newSubRegion.setHeight(unionOfPreviousPrimitiveSubregions.height()); - } - - effect->setFilterPrimitiveSubregion(newSubRegion); - // TODO: Everything above should be moved to a first phase of layout in RenderSVGResourceFilterPrimitive. - // The scaling of the subregion to the repaint rect should be merged with a more intelligent repaint logic - // and moved to the second phase of layout in RenderSVGResourceFilterPrimitive. - // See bug https://bugs.webkit.org/show_bug.cgi?id=45614. - newSubRegion = m_absoluteTransform.mapRect(newSubRegion); - newSubRegion.scale(filterResolution().width(), filterResolution().height()); - - // FEImage needs the unclipped subregion in absolute coordinates to determine the correct - // destination rect in combination with preserveAspectRatio. - if (effect->filterEffectType() == FilterEffectTypeImage) { - FEImage* imageEffect = static_cast<FEImage*>(effect); - imageEffect->setAbsoluteSubregion(newSubRegion); - } - - // Clip every filter effect to the filter region. - FloatRect absoluteScaledFilterRegion = m_absoluteFilterRegion; - absoluteScaledFilterRegion.scale(filterResolution().width(), filterResolution().height()); - newSubRegion.intersect(absoluteScaledFilterRegion); - - effect->setMaxEffectRect(enclosingIntRect(newSubRegion)); - if (effect->filterEffectType() != FilterEffectTypeSourceInput) - m_maxImageSize = m_maxImageSize.expandedTo(newSubRegion.size()); -} - float SVGFilter::applyHorizontalScale(float value) const { if (m_effectBBoxMode) diff --git a/WebCore/svg/graphics/filters/SVGFilter.h b/WebCore/svg/graphics/filters/SVGFilter.h index 1b19e9f..6465f9f 100644 --- a/WebCore/svg/graphics/filters/SVGFilter.h +++ b/WebCore/svg/graphics/filters/SVGFilter.h @@ -43,14 +43,13 @@ public: virtual FloatRect filterRegion() const { return m_absoluteFilterRegion; } virtual FloatPoint mapAbsolutePointToLocalPoint(const FloatPoint& point) const { return m_absoluteTransform.inverse().mapPoint(point); } + FloatRect mapLocalRectToAbsoluteRect(const FloatRect& rect) const { return m_absoluteTransform.mapRect(rect); } virtual float applyHorizontalScale(float value) const; virtual float applyVerticalScale(float value) const; virtual FloatRect sourceImageRect() const { return m_absoluteSourceDrawingRegion; } - - virtual FloatSize maxImageSize() const { return m_maxImageSize; } - virtual void determineFilterPrimitiveSubregion(FilterEffect*, const FloatRect&); + FloatRect targetBoundingBox() const { return m_targetBoundingBox; } private: SVGFilter(const AffineTransform& absoluteTransform, const FloatRect& absoluteSourceDrawingRegion, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode); @@ -61,7 +60,6 @@ private: FloatRect m_absoluteFilterRegion; FloatRect m_filterRegion; bool m_effectBBoxMode; - FloatSize m_maxImageSize; }; } // namespace WebCore |