Use the alternate solid color if a pattern cannot be acquired

This fixes the last case in pservers-pattern-03-f.svg, which has a fill
with an invalid URI and an alternate color for the fill.
parent 16ae767a
......@@ -192,15 +192,18 @@ _set_source_rsvg_paint_server (RsvgDrawingCtx * ctx,
{
RsvgNode *node;
gboolean had_paint_server;
gboolean use_alternate;
had_paint_server = FALSE;
switch (ps->type) {
case RSVG_PAINT_SERVER_IRI:
use_alternate = FALSE;
node = rsvg_drawing_ctx_acquire_node (ctx, ps->core.iri->iri_str);
if (node == NULL)
break;
else if (rsvg_node_type (node) == RSVG_NODE_TYPE_LINEAR_GRADIENT) {
if (node == NULL) {
use_alternate = TRUE;
} else if (rsvg_node_type (node) == RSVG_NODE_TYPE_LINEAR_GRADIENT) {
_set_source_rsvg_linear_gradient (ctx, (RsvgLinearGradient *) node, opacity, bbox);
had_paint_server = TRUE;
} else if (rsvg_node_type (node) == RSVG_NODE_TYPE_RADIAL_GRADIENT) {
......@@ -210,10 +213,14 @@ _set_source_rsvg_paint_server (RsvgDrawingCtx * ctx,
if (_set_source_rsvg_pattern (ctx, (RsvgPattern *) node, bbox)) {
had_paint_server = TRUE;
} else {
if (ps->core.iri->has_alternate) {
_set_source_rsvg_solid_color (ctx, &ps->core.iri->alternate, opacity, current_color);
had_paint_server = TRUE;
}
use_alternate = TRUE;
}
}
if (use_alternate) {
if (ps->core.iri->has_alternate) {
_set_source_rsvg_solid_color (ctx, &ps->core.iri->alternate, opacity, current_color);
had_paint_server = TRUE;
}
}
......
<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="[reviewer]" author="ED" status="created"
version="$Revision: 1.1 $" testname="$RCSfile: pservers-pattern-03-f.svg,v $">
<d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/pservers.html#Patterns">
<p>
Test that empty patterns are not rendered, and that the fallback color is used instead.
</p>
</d:testDescription>
<d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
<p>
Run the test. No interaction required.
</p>
</d:operatorScript>
<d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
<p>
The test is passed if there are 8 green rectangles visible, and no red.
</p>
</d:passCriteria>
</d:SVGTestCase>
<title id="test-title">$RCSfile: pservers-pattern-03-f.svg,v $</title>
<defs>
<font-face
font-family="SVGFreeSansASCII"
unicode-range="U+0-7F">
<font-face-src>
<font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
</font-face-src>
</font-face>
</defs>
<g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
<defs>
<pattern id="invisible1">
<rect width="100%" height="100%" fill="red"/>
</pattern>
<pattern id="invisible2" patternUnits="objectBoundingBox" patternContentUnits="objectBoundingBox">
<rect width="100%" height="100%" fill="red"/>
</pattern>
<pattern id="invisible3" width="0" height="0" patternUnits="objectBoundingBox" patternContentUnits="objectBoundingBox">
<rect width="1" height="1" fill="red"/>
</pattern>
<pattern id="invisible4" width="0" patternUnits="objectBoundingBox" patternContentUnits="objectBoundingBox">
<rect width="1" height="1" fill="red"/>
</pattern>
<pattern id="invisible5" width="0" height="0" patternUnits="userSpaceOnUse" patternContentUnits="objectBoundingBox">
<rect width="1" height="1" fill="red"/>
</pattern>
<pattern id="invisible6" height="0" patternUnits="userSpaceOnUse" patternContentUnits="objectBoundingBox">
<rect width="1" height="1" fill="red"/>
</pattern>
<pattern id="invisible7" height="0" patternUnits="userSpaceOnUse" patternContentUnits="userSpaceOnUse">
<rect width="100%" height="100%" fill="red"/>
</pattern>
</defs>
<g transform="translate(40 60)" stroke="black">
<rect width="100" height="100" fill="url(#invisible1) lime"/>
<rect x="100" width="100" height="100" fill="url(#invisible2) lime"/>
<rect x="200" width="100" height="100" fill="url(#invisible3) lime"/>
<rect x="300" width="100" height="100" fill="url(#invisible4) lime"/>
<rect y="100" width="100" height="100" fill="url(#invisible5) lime"/>
<rect x="100" y="100" width="100" height="100" fill="url(#invisible6) lime"/>
<rect x="200" y="100" width="100" height="100" fill="url(#invisible7) lime"/>
<!-- note that this is on purpose testing a broken uri -->
<rect x="300" y="100" width="100" height="100" fill="url(#invisible8) lime"/>
</g>
</g>
<g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
<text id="revision" x="10" y="340" stroke="none"
fill="black">$Revision: 1.1 $</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>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment