[librsvg] Use the alternate solid color if a pattern cannot be acquired
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] Use the alternate solid color if a pattern cannot be acquired
- Date: Wed, 8 Feb 2017 19:13:21 +0000 (UTC)
commit 5804c73d0e7ef249a3c5e7c32947b565d7eba036
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Feb 8 12:50:21 2017 -0600
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.
rsvg-cairo-draw.c | 21 +++--
.../reftests/svg1.1/pservers-pattern-03-f-ref.png | Bin 0 -> 6074 bytes
.../reftests/svg1.1/pservers-pattern-03-f.svg | 91 ++++++++++++++++++++
3 files changed, 105 insertions(+), 7 deletions(-)
---
diff --git a/rsvg-cairo-draw.c b/rsvg-cairo-draw.c
index 7eb953c..d168ba8 100644
--- a/rsvg-cairo-draw.c
+++ b/rsvg-cairo-draw.c
@@ -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;
}
}
diff --git a/tests/fixtures/reftests/svg1.1/pservers-pattern-03-f-ref.png
b/tests/fixtures/reftests/svg1.1/pservers-pattern-03-f-ref.png
new file mode 100644
index 0000000..dc7c7ff
Binary files /dev/null and b/tests/fixtures/reftests/svg1.1/pservers-pattern-03-f-ref.png differ
diff --git a/tests/fixtures/reftests/svg1.1/pservers-pattern-03-f.svg
b/tests/fixtures/reftests/svg1.1/pservers-pattern-03-f.svg
new file mode 100644
index 0000000..dbf9f47
--- /dev/null
+++ b/tests/fixtures/reftests/svg1.1/pservers-pattern-03-f.svg
@@ -0,0 +1,91 @@
+<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>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]