Changeset 69416 in webkit
- Timestamp:
- Oct 8, 2010 12:40:42 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r69413 r69416 1 2010-10-08 Dirk Schulze <krit@webkit.org> 2 3 Reviewed by Nikolas Zimmermann. 4 5 SVG feImage needs absolute subregion for preserveAspectRatio 6 https://bugs.webkit.org/show_bug.cgi?id=47409 7 8 Adapted test form the new SVG 1.1 se test suite to check the correct behavior of feImage. 9 The subregion in absolute coordinates is a FloatRect instead of an IntRect. This 10 sharpens the result of svg/webarchive/svg-feimage-subresources. 11 12 * platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.checksum: Added. 13 * platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png: Added. 14 * platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.txt: Added. 15 * platform/mac/svg/webarchive/svg-feimage-subresources-expected.checksum: 16 * platform/mac/svg/webarchive/svg-feimage-subresources-expected.png: 17 * svg/W3C-SVG-1.1-SE/filters-image-03-f.svg: Added. 18 1 19 2010-10-08 Nikolas Zimmermann <nzimmermann@rim.com> 2 20 -
trunk/LayoutTests/platform/mac/svg/webarchive/svg-feimage-subresources-expected.checksum
r69292 r69416 1 f080f575091da0c119e750b02e74b090 1 d645c06189914812437235a8936bc83d -
trunk/WebCore/ChangeLog
r69413 r69416 1 2010-10-08 Dirk Schulze <krit@webkit.org> 2 3 Reviewed by Nikolas Zimmermann. 4 5 SVG feImage needs absolute subregion for preserveAspectRatio 6 https://bugs.webkit.org/show_bug.cgi?id=47409 7 8 PreserverAspectRatio needs the subregion in absolute coordinates to determine 9 the destination position and size of the input image. The maxEffectRect() already 10 stores the absolute subregion, but clipped to the filter region. 11 12 Test: svg/W3C-SVG-1.1se/filters-image-03-f.svg 13 14 * platform/graphics/filters/FETile.cpp: 15 (WebCore::FETile::apply): 16 * platform/graphics/filters/FilterEffect.h: Added enum to differentate sourece inputs, feTile and feImage. 17 (WebCore::FilterEffect::filterEffectType): 18 * platform/graphics/filters/SourceAlpha.h: Make use of the new enum in FilterEffect 19 (WebCore::SourceAlpha::filterEffectType): 20 * platform/graphics/filters/SourceGraphic.h: Ditto. 21 (WebCore::SourceGraphic::filterEffectType): 22 * svg/graphics/filters/SVGFEImage.cpp: Take the absolute subregion to determine the destination rect for input image. 23 (WebCore::FEImage::apply): 24 * svg/graphics/filters/SVGFEImage.h: Ditto. 25 (WebCore::FEImage::setAbsoluteSubregion): 26 (WebCore::FEImage::filterEffectType): 27 * svg/graphics/filters/SVGFilter.cpp: Give over subregion in absolute coordinates to feImage. Just feImage makes use of it. 28 (WebCore::SVGFilter::determineFilterPrimitiveSubregion): 29 1 30 2010-10-08 Nikolas Zimmermann <nzimmermann@rim.com> 2 31 -
trunk/WebCore/platform/graphics/filters/FETile.cpp
r69255 r69416 70 70 FloatPoint inMaxEffectLocation = tileRect.location(); 71 71 FloatPoint maxEffectLocation = maxEffectRect().location(); 72 if (in-> isSourceInput()) {72 if (in->filterEffectType() == FilterEffectTypeSourceInput) { 73 73 tileRect = filter->filterRegion(); 74 74 tileRect.scale(filter->filterResolution().width(), filter->filterResolution().height()); -
trunk/WebCore/platform/graphics/filters/FilterEffect.h
r69181 r69416 40 40 typedef Vector<RefPtr<FilterEffect> > FilterEffectVector; 41 41 42 enum FilterEffectType { 43 FilterEffectTypeUnknown, 44 FilterEffectTypeImage, 45 FilterEffectTypeTile, 46 FilterEffectTypeSourceInput 47 }; 48 42 49 class FilterEffect : public RefCounted<FilterEffect> { 43 50 public: … … 65 72 IntRect absolutePaintRect() const { return m_absolutePaintRect; } 66 73 void setAbsolutePaintRect(const IntRect& absolutePaintRect) { m_absolutePaintRect = absolutePaintRect; } 67 74 68 75 IntRect maxEffectRect() const { return m_maxEffectRect; } 69 76 void setMaxEffectRect(const IntRect& maxEffectRect) { m_maxEffectRect = maxEffectRect; } … … 73 80 74 81 virtual void determineAbsolutePaintRect(Filter*); 75 76 virtual bool isSourceInput() const { return false; }82 83 virtual FilterEffectType filterEffectType() const { return FilterEffectTypeUnknown; } 77 84 78 85 virtual TextStream& externalRepresentation(TextStream&, int indention = 0) const; -
trunk/WebCore/platform/graphics/filters/SourceAlpha.h
r69181 r69416 40 40 virtual void determineAbsolutePaintRect(Filter*); 41 41 42 virtual bool isSourceInput() const { return true; }42 virtual FilterEffectType filterEffectType() const { return FilterEffectTypeSourceInput; } 43 43 44 44 virtual TextStream& externalRepresentation(TextStream&, int indention) const; -
trunk/WebCore/platform/graphics/filters/SourceGraphic.h
r69181 r69416 41 41 virtual void determineAbsolutePaintRect(Filter*); 42 42 43 virtual bool isSourceInput() const { return true; }43 virtual FilterEffectType filterEffectType() const { return FilterEffectTypeSourceInput; } 44 44 45 45 virtual TextStream& externalRepresentation(TextStream&, int indention) const; -
trunk/WebCore/svg/graphics/filters/SVGFEImage.cpp
r69181 r69416 55 55 56 56 FloatRect srcRect(FloatPoint(), m_image->size()); 57 FloatRect destRect( FloatPoint(), absolutePaintRect().size());57 FloatRect destRect(m_absoluteSubregion); 58 58 59 59 m_preserveAspectRatio.transformRect(destRect, srcRect); 60 destRect.move(-m_absoluteSubregion.x(), -m_absoluteSubregion.y()); 60 61 61 62 filterContext->drawImage(m_image.get(), DeviceColorSpace, destRect, srcRect); -
trunk/WebCore/svg/graphics/filters/SVGFEImage.h
r69181 r69416 34 34 static PassRefPtr<FEImage> create(RefPtr<Image>, const SVGPreserveAspectRatio&); 35 35 36 void setAbsoluteSubregion(const FloatRect& absoluteSubregion) { m_absoluteSubregion = absoluteSubregion; } 37 36 38 virtual void apply(Filter*); 37 39 virtual void dump(); 38 40 39 41 virtual void determineAbsolutePaintRect(Filter*) { setAbsolutePaintRect(maxEffectRect()); } 42 43 virtual FilterEffectType filterEffectType() const { return FilterEffectTypeImage; } 40 44 41 45 virtual TextStream& externalRepresentation(TextStream&, int indention) const; … … 46 50 RefPtr<Image> m_image; 47 51 SVGPreserveAspectRatio m_preserveAspectRatio; 52 FloatRect m_absoluteSubregion; 48 53 }; 49 54 -
trunk/WebCore/svg/graphics/filters/SVGFilter.cpp
r69181 r69416 23 23 #if ENABLE(SVG) && ENABLE(FILTERS) 24 24 #include "SVGFilter.h" 25 26 #include "SVGFEImage.h" 25 27 26 28 namespace WebCore { … … 70 72 } 71 73 72 // clip every filter effect to the filter region73 newSubRegion.intersect(m_filterRegion);74 75 74 effect->setFilterPrimitiveSubregion(newSubRegion); 76 75 // TODO: Everything above should be moved to a first phase of layout in RenderSVGResourceFilterPrimitive. … … 80 79 newSubRegion = m_absoluteTransform.mapRect(newSubRegion); 81 80 newSubRegion.scale(filterResolution().width(), filterResolution().height()); 81 82 // FEImage needs the unclipped subregion in absolute coordinates to determine the correct 83 // destination rect in combination with preserveAspectRatio. 84 if (effect->filterEffectType() == FilterEffectTypeImage) { 85 FEImage* imageEffect = static_cast<FEImage*>(effect); 86 imageEffect->setAbsoluteSubregion(newSubRegion); 87 } 88 89 // Clip every filter effect to the filter region. 90 FloatRect absoluteScaledFilterRegion = m_absoluteFilterRegion; 91 absoluteScaledFilterRegion.scale(filterResolution().width(), filterResolution().height()); 92 newSubRegion.intersect(absoluteScaledFilterRegion); 93 82 94 effect->setMaxEffectRect(enclosingIntRect(newSubRegion)); 83 if ( !effect->isSourceInput())95 if (effect->filterEffectType() != FilterEffectTypeSourceInput) 84 96 m_maxImageSize = m_maxImageSize.expandedTo(newSubRegion.size()); 85 97 }
Note: See TracChangeset
for help on using the changeset viewer.