[librsvg] Oops, actually allow recursive fallbacks for patterns and gradients.



commit 0da1da04567336bbf2c76afc754b32e474db3f89
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Feb 8 13:47:47 2017 -0600

    Oops, actually allow recursive fallbacks for patterns and gradients.
    
    Include a new test file for this in patterns.

 rust/src/gradient.rs                               |    4 +-
 rust/src/pattern.rs                                |    4 +-
 .../reftests/svg1.1/pservers-pattern-05-f-ref.png  |  Bin 0 -> 7148 bytes
 .../reftests/svg1.1/pservers-pattern-05-f.svg      |   64 ++++++++++++++++++++
 4 files changed, 66 insertions(+), 6 deletions(-)
---
diff --git a/rust/src/gradient.rs b/rust/src/gradient.rs
index f3f7ce8..db73346 100644
--- a/rust/src/gradient.rs
+++ b/rust/src/gradient.rs
@@ -106,9 +106,7 @@ impl GradientCommon {
         if self.spread.is_none ()   { self.spread   = fallback.spread; }
         if self.stops.is_none ()    { self.stops    = fallback.clone_stops (); }
 
-        if self.fallback.is_none () {
-            self.fallback = clone_fallback_name (&fallback.fallback);
-        }
+        self.fallback = clone_fallback_name (&fallback.fallback);
     }
 
     fn add_color_stop (&mut self, mut offset: f64, rgba: u32) {
diff --git a/rust/src/pattern.rs b/rust/src/pattern.rs
index ea08818..4759e88 100644
--- a/rust/src/pattern.rs
+++ b/rust/src/pattern.rs
@@ -103,9 +103,7 @@ impl Pattern {
         if self.width.is_none ()     { self.width     = fallback.width; }
         if self.height.is_none ()    { self.height    = fallback.height; }
 
-        if self.fallback.is_none () {
-            self.fallback = clone_fallback_name (&fallback.fallback);
-        }
+        self.fallback = clone_fallback_name (&fallback.fallback);
 
         if !pattern_node_has_children (self.c_node) {
             self.c_node = fallback.c_node;
diff --git a/tests/fixtures/reftests/svg1.1/pservers-pattern-05-f-ref.png 
b/tests/fixtures/reftests/svg1.1/pservers-pattern-05-f-ref.png
new file mode 100644
index 0000000..e58959f
Binary files /dev/null and b/tests/fixtures/reftests/svg1.1/pservers-pattern-05-f-ref.png differ
diff --git a/tests/fixtures/reftests/svg1.1/pservers-pattern-05-f.svg 
b/tests/fixtures/reftests/svg1.1/pservers-pattern-05-f.svg
new file mode 100644
index 0000000..4fe22ab
--- /dev/null
+++ b/tests/fixtures/reftests/svg1.1/pservers-pattern-05-f.svg
@@ -0,0 +1,64 @@
+<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="CM" author="Microsoft" status="reviewed" version="$Revision: 1.3 $" testname="$RCSfile: 
pservers-pattern-05-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml"; 
href="http://www.w3.org/TR/SVG/pservers.html#Patterns";>
+      <p>
+        Test that a 'pattern' element can inherit attributes through multiple levels of
+        'xlink:href' referencing.
+      </p>
+      <p>
+        The test defines a pattern 'pattern1' with some attributes that scale the contents. The attributes on
+        'pattern1' are inherited into 'pattern2' and then inherited from 'pattern2'
+        into 'pattern3'.  'pattern3' has a green circle as its graphical content.
+        A 'rect' uses 'pattern3' as its fill, if the attributes are correctly inherited into
+        'pattern3', then the green circle will occlude a red circle in the same position.
+      </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 passed if there is no red visible on the page.
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: pservers-pattern-05-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="Pattern1" patternUnits="userSpaceOnUse" width="100" height="100" viewBox="0 0 10 10" />
+        <pattern id="Pattern2" xlink:href="#Pattern1" />
+        <pattern id="Pattern3" xlink:href="#Pattern2">
+            <circle cx="5" cy="5" r="2" fill="green"/>
+        </pattern>
+    </defs>
+    <circle cx="50" cy="50" r="20" fill="red" />
+    <rect fill="url(#Pattern3)" width="100" height="100" />
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none"
+      fill="black">$Revision: 1.3 $</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]