haikuwebkit/LayoutTests/svg/W3C-SVG-1.1-SE/pservers-grad-20-b.svg

93 lines
4.9 KiB
XML
Raw Permalink Normal View History

2010-10-08 Nikolas Zimmermann <nzimmermann@rim.com> Reviewed by Dirk Schulze. gradient stroke on lines does not work https://bugs.webkit.org/show_bug.cgi?id=40985 Correct handling of invalid fill/stroke paint servers / colors according to SVG 1.1 2nd Edition. Perfectly matches Opera, and now lets us pass three of the new tests. Fix incorrect svg/custom/invalid-fill* tests: -> If there's an invalid fill URI, but no fallback specified, it is as if fill="black" was specified. (invalid-fill.svg) -> If there's an invalid fill color, but no fallback specified, it is as if fill="none" was specified. (invalid-fill-hex.svg) Needed to refactor some of the gradient/pattern code to properly handle fallback paint servers. As side effect, we're allowing gradients with gradientUnits="userSpaceOnUse" to apply on 1d objects (lines) again, per SVG 1.1 2nd edition. Tests: svg/W3C-SVG-1.1-SE/pservers-pattern-03-f.svg svg/W3C-SVG-1.1-SE/pservers-grad-17-b.svg svg/W3C-SVG-1.1-SE/pservers-grad-20-b.svg * rendering/RenderSVGResource.cpp: Rewrite fill/stroke paint resource requests, share all code between the similar functions. (WebCore::requestPaintingResource): (WebCore::RenderSVGResource::fillPaintingResource): (WebCore::RenderSVGResource::strokePaintingResource): * rendering/RenderSVGResource.h: * rendering/RenderSVGResourceGradient.cpp: Split collecting gradient properties from building the gradient. We don't need to build it, if it's not applyable (eg. on 1d lines). (WebCore::RenderSVGResourceGradient::RenderSVGResourceGradient): (WebCore::RenderSVGResourceGradient::removeAllClientsFromCache): (WebCore::clipToTextMask): (WebCore::RenderSVGResourceGradient::applyResource): * rendering/RenderSVGResourceGradient.h: Stop storing boundingBoxMode & gradientTransform in each GradientData object, it's enough to just store it in the gradient resource, once. * rendering/RenderSVGResourceLinearGradient.cpp: (WebCore::RenderSVGResourceLinearGradient::collectGradientAttributes): Splitted from buildGradient. (WebCore::RenderSVGResourceLinearGradient::buildGradient): * rendering/RenderSVGResourceLinearGradient.h: (WebCore::RenderSVGResourceLinearGradient::boundingBoxMode): Return bounding box mode information, from m_attributes instead of storing in gradientData. (WebCore::RenderSVGResourceLinearGradient::calculateGradientTransform): Ditto. * rendering/RenderSVGResourcePattern.cpp: Split collecting pattern properties from building the pattern. We don't need to build it, if it's not applyable (eg. on 1d lines). (WebCore::RenderSVGResourcePattern::RenderSVGResourcePattern): (WebCore::RenderSVGResourcePattern::removeAllClientsFromCache): (WebCore::RenderSVGResourcePattern::applyResource): (WebCore::RenderSVGResourcePattern::buildTileImageTransform): * rendering/RenderSVGResourcePattern.h: * rendering/RenderSVGResourceRadialGradient.cpp: (WebCore::RenderSVGResourceRadialGradient::collectGradientAttributes): (WebCore::RenderSVGResourceRadialGradient::buildGradient): * rendering/RenderSVGResourceRadialGradient.h: (WebCore::RenderSVGResourceRadialGradient::boundingBoxMode): (WebCore::RenderSVGResourceRadialGradient::calculateGradientTransform): * rendering/SVGRenderTreeAsText.cpp: Adapt to change, that fill/strokePaintingResource now take a Color& fallbackColor parameter. (WebCore::writeStyle): (WebCore::writeSVGResourceContainer): * rendering/svg/RenderSVGPath.cpp: (WebCore::RenderSVGPath::fillContains): Ditto. (WebCore::RenderSVGPath::strokeContains): Ditto. (WebCore::RenderSVGPath::fillAndStrokePath): Properly handle fallback color, if an existing (!) paint server failed to apply. * rendering/svg/SVGInlineTextBox.cpp: (WebCore::SVGInlineTextBox::acquirePaintingResource): Ditto. * svg/SVGLinearGradientElement.cpp: (WebCore::SVGLinearGradientElement::collectGradientAttributes): Pass LinearGradientAttributes by reference, instead of returning a copy. * svg/SVGLinearGradientElement.h: Rename collectGradientProperties to collectGradientAttributes. * svg/SVGPatternElement.cpp: (WebCore::SVGPatternElement::collectPatternAttributes): Pass PatternAttributes by reference, instead of returning. * svg/SVGPatternElement.h: Rename collectPatternProperties to collectPatternAttributes. * svg/SVGRadialGradientElement.cpp: (WebCore::SVGRadialGradientElement::collectGradientAttributes): Pass RadialGradientAttributes by reference, instead of returning a copy. * svg/SVGRadialGradientElement.h: Rename collectGradientProperties to collectGradientAttributes. 2010-10-08 Nikolas Zimmermann <nzimmermann@rim.com> Reviewed by Dirk Schulze. gradient stroke on lines does not work https://bugs.webkit.org/show_bug.cgi?id=40985 * platform/mac-leopard/svg/W3C-SVG-1.1/pservers-grad-17-b-expected.checksum: * platform/mac-leopard/svg/W3C-SVG-1.1/pservers-grad-17-b-expected.png: * platform/mac-leopard/svg/custom/dominant-baseline-hanging-expected.checksum: * platform/mac-leopard/svg/custom/dominant-baseline-hanging-expected.png: * platform/mac-leopard/svg/custom/invalid-fill-expected.checksum: * platform/mac-leopard/svg/custom/invalid-fill-expected.png: * platform/mac-leopard/svg/custom/invalid-fill-hex-expected.checksum: * platform/mac-leopard/svg/custom/invalid-fill-hex-expected.png: * platform/mac/svg/W3C-SVG-1.1-SE: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-grad-17-b-expected.checksum: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-grad-17-b-expected.png: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-grad-17-b-expected.txt: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-grad-20-b-expected.checksum: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-grad-20-b-expected.png: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-grad-20-b-expected.txt: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-pattern-03-f-expected.checksum: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-pattern-03-f-expected.png: Added. * platform/mac/svg/W3C-SVG-1.1-SE/pservers-pattern-03-f-expected.txt: Added. * platform/mac/svg/W3C-SVG-1.1/pservers-grad-17-b-expected.txt: * platform/mac/svg/custom/dominant-baseline-hanging-expected.txt: * platform/mac/svg/custom/gradient-with-1d-boundingbox-expected.checksum: * platform/mac/svg/custom/gradient-with-1d-boundingbox-expected.png: * platform/mac/svg/custom/invalid-fill-expected.txt: * platform/mac/svg/custom/invalid-fill-hex-expected.txt: * svg/W3C-SVG-1.1-SE: Added. * svg/W3C-SVG-1.1-SE/pservers-grad-17-b.svg: Added. * svg/W3C-SVG-1.1-SE/pservers-grad-20-b.svg: Added. * svg/W3C-SVG-1.1-SE/pservers-pattern-03-f.svg: Added. * svg/custom/gradient-with-1d-boundingbox-expected.txt: * svg/custom/gradient-with-1d-boundingbox.svg: Add new test covering gradientUnits="userSpaceOnUse" on 1d lines, which is explicitely allowed. * svg/custom/invalid-fill-hex.svg: Fix invalid test, fill="none", is the default if the given fill color is invalid, according to SVG 1.1 2nd Edition. * svg/custom/invalid-fill.svg: Update test comments, that we match Opera in both tests, and the new SVG 1.1 2nd Edition specification. Canonical link: https://commits.webkit.org/60014@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@69413 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2010-10-08 18:33:34 +00:00
<svg id="svg-root" width="100%" height="100%"
viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!--======================================================================-->
<!--= Copyright 2008 World Wide Web Consortium, (Massachusetts =-->
<!--= Institute of Technology, European Research Consortium for =-->
<!--= Informatics and Mathematics (ERCIM), Keio University). =-->
<!--= All Rights Reserved. =-->
<!--= See http://www.w3.org/Consortium/Legal/. =-->
<!--======================================================================-->
<d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
template-version="1.4" reviewer="AG" author="ED" status="accepted"
version="$Revision: 1.7 $" testname="$RCSfile: pservers-grad-20-b.svg,v $">
<d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/animate.html#InterfaceSVGAnimationElement">
<p>
This test has a gradient with gradientUnits='objectBoundingBox' which is a fade from black to white.
The gradient is used for the stroke of a line. Vertical and horizontal lines don't have a boundingbox, since they are one-dimensional, even though the
stroke-width makes it look like they should have a boundingbox with non-zero width and height.
See the coordinate chapter, last paragraph of 7.11.
</p>
</d:testDescription>
<d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
<p>
The left rectangle has four 'line' elements rotated in different ways. The stroke for the lines have a green solid stroke fallback which
should be used if the gradient should be ignored.
The right rectangle is the same as the left rectangle except that the stroke paintservers don't have a fallback specified.
</p>
</d:operatorScript>
<d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
<p>
The test is passed if
</p>
<ul>
<li>
there are three lines with solid green stroke, and one line
(from bottom left to top right) with a gradient stroke, visible in the left rectangle.
</li>
<li>there is a line from bottom left to top right with a gradient stroke, visible in the right rectangle.</li>
</ul>
</d:passCriteria>
</d:SVGTestCase>
<title id="test-title">$RCSfile: pservers-grad-20-b.svg,v $</title>
<defs>
<font-face
font-family="SVGFreeSansASCII"
unicode-range="U+0-7F">
<font-face-src>
<font-face-uri xlink:href="../custom/resources/SVGFreeSans.svg#ascii"/>
</font-face-src>
</font-face>
</defs>
<g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
<defs>
<linearGradient id="grad">
<stop offset="0" stop-color="black" />
<stop offset="1" stop-color="white" />
</linearGradient>
</defs>
<!-- sub-test 1: stroke with solid color fallback -->
<g transform="translate(50, 100) scale(0.3)">
<path d="M0 180L480 180" stroke="url(#grad) #0f0" stroke-width="20"/>
<path d="M0 180L480 180" stroke="url(#grad) #0f0" stroke-width="20" transform="rotate(45 240 180)"/>
<path d="M0 180L480 180" stroke="url(#grad) #0f0" stroke-width="20" transform="rotate(90 240 180)"/>
<path d="M410 10L70 350" stroke="url(#grad) #0f0" stroke-width="20"/>
<rect x="0" y="-60" width="480" height="480" fill="none" stroke="black"/>
</g>
<text x="120" y="250" text-anchor="middle">With fallback</text>
<!-- sub-test 2: stroke without a fallback -->
<g transform="translate(280,100) scale(0.3)">
<path d="M0 180L480 180" stroke="url(#grad)" stroke-width="20"/>
<path d="M0 180L480 180" stroke="url(#grad)" stroke-width="20" transform="rotate(45 240 180)"/>
<path d="M0 180L480 180" stroke="url(#grad)" stroke-width="20" transform="rotate(90 240 180)"/>
<path d="M410 10L70 350" stroke="url(#grad)" stroke-width="20"/>
<rect x="0" y="-60" width="480" height="480" fill="none" stroke="black"/>
</g>
<text x="350" y="250" text-anchor="middle">Without fallback</text>
</g>
<g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
<text id="revision" x="10" y="340" stroke="none"
fill="black">$Revision: 1.7 $</text>
</g>
<rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
<!-- comment out this watermark once the test is approved -->
<!--<g id="draft-watermark">
<rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
<text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
</g>-->
</svg>