haikuwebkit/LayoutTests/svg/filters/feComposite-background-rect...

14 lines
1.1 KiB
XML
Raw Permalink Normal View History

feComposite filter does not clip the paint rect to its effect rect when the operator is 'in' or 'atop' https://bugs.webkit.org/show_bug.cgi?id=137856 Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2015-06-09 Reviewed by Darin Adler. Source/WebCore: There was bug in calculating the absolutePaintRect of the feComposite filter when the operator is equal to 'in' or 'atop'. The absolutePaintRect was set to the absolutePaintRect of the background FilterEffect which is correct. What was missing is clipping this rectangle to the maxEffectRect of the filter which we do for other operators. Tests: svg/filters/feComposite-background-rect-control-operators.svg * platform/graphics/IntRect.h: (WebCore::operator-=): (WebCore::operator-): Add new operators to IntRect. * platform/graphics/filters/FEComposite.cpp: (WebCore::FEComposite::determineAbsolutePaintRect): Make sure the filter absolutePaintRect is clipped to maxEffectRect for all operators. (WebCore::FEComposite::platformApplySoftware): Code clean-up. * platform/graphics/filters/FilterEffect.cpp: (WebCore::FilterEffect::determineAbsolutePaintRect): Move the clipping part to a separate function. (WebCore::FilterEffect::clipAbsolutePaintRect): Clip the absolutePaintRect to the maxEffectRect of the filter. * platform/graphics/filters/FilterEffect.h: LayoutTests: * svg/filters/feComposite-background-rect-control-operators-expected.svg: Added. * svg/filters/feComposite-background-rect-control-operators.svg: Added. Ensure the painting rect of the feComposite filter with operator 'in' or 'atop' is clipped to its bounding rectangle Canonical link: https://commits.webkit.org/163864@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@185392 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-06-09 23:24:12 +00:00
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="100">
<filter id="filter-in" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox" x="0" y="0" width="1" height="1">
<feFlood flood-color="orange" x="0" y="0" width="0.9" height="0.9" result="flood-orange"/>
<feFlood flood-color="green" x="0.1" y="0.1" width="0.9" height="0.9" result="flood-green"/>
<feComposite x="0.2" y="0.2" width="0.6" height="0.6" operator="in" in="flood-green" in2="flood-orange"/>
</filter>
<filter id="filter-atop" filterUnits="objectBoundingBox" primitiveUnits="objectBoundingBox" x="0" y="0" width="1" height="1">
<feFlood flood-color="orange" x="0" y="0" width="0.8" height="0.8" result="flood-orange"/>
<feFlood flood-color="green" x="0.2" y="0.2" width="0.8" height="0.8" result="flood-green"/>
<feComposite x="0.2" y="0.2" width="0.8" height="0.8" operator="atop" in="flood-green" in2="flood-orange"/>
</filter>
<rect x= "0" y="0" width="100" height="100" fill="red" filter="url(#filter-in)"/>
<rect x="100" y="0" width="100" height="100" fill="red" filter="url(#filter-atop)"/>
</svg>