[librsvg: 5/5] Merge branch 'corossig/librsvg-feature-fr-gradient'



commit b5f83910fe00abb5d05d50f4957971cc3c467119
Merge: 0a70c46b ee95f497
Author: Federico Mena Quintero <federico gnome org>
Date:   Tue Mar 17 11:34:08 2020 -0600

    Merge branch 'corossig/librsvg-feature-fr-gradient'

 rsvg_internals/src/gradient.rs                     | 179 +++++++++++----------
 tests/Makefile.am                                  |   2 +
 .../reftests/svg1.1/pservers-grad-13-b-ref.png     | Bin 92555 -> 0 bytes
 .../reftests/svg1.1/pservers-grad-13-b.svg         | 171 --------------------
 .../reftests/svg1.1/pservers-grad-21-b-ref.png     | Bin 11390 -> 0 bytes
 .../reftests/svg1.1/pservers-grad-21-b.svg         | 146 -----------------
 tests/fixtures/reftests/svg2/gradient-01-b-ref.png | Bin 0 -> 234830 bytes
 tests/fixtures/reftests/svg2/gradient-01-b.svg     | 137 ++++++++++++++++
 8 files changed, 234 insertions(+), 401 deletions(-)
---
diff --cc rsvg_internals/src/gradient.rs
index 47b556be,5d324add..131e73a5
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@@ -614,19 -628,30 +632,30 @@@ impl ElementTrait for LinearGradient 
      }
  }
  
 -impl NodeTrait for RadialGradient {
 -    fn set_atts(&mut self, _: Option<&RsvgNode>, pbag: &PropertyBag<'_>) -> NodeResult {
 +impl ElementTrait for RadialGradient {
 +    fn set_atts(&mut self, _: Option<&Node>, pbag: &PropertyBag<'_>) -> ElementResult {
          self.common.set_atts(pbag)?;
+         // Create a local expanded name for "fr" because markup5ever doesn't have built-in
+         let expanded_name_fr = ExpandedName {
+             ns: &Namespace::from(""),
+             local: &LocalName::from("fr"),
+         };
  
          for (attr, value) in pbag.iter() {
-             match attr.expanded() {
-                 expanded_name!("", "cx") => self.cx = Some(attr.parse(value)?),
-                 expanded_name!("", "cy") => self.cy = Some(attr.parse(value)?),
-                 expanded_name!("", "r") => self.r = Some(attr.parse(value)?),
-                 expanded_name!("", "fx") => self.fx = Some(attr.parse(value)?),
-                 expanded_name!("", "fy") => self.fy = Some(attr.parse(value)?),
+             let attr_expanded = attr.expanded();
  
-                 _ => (),
+             if attr_expanded == expanded_name_fr {
+                 self.fr = Some(attr.parse(value)?);
+             } else {
+                 match attr_expanded {
+                     expanded_name!("", "cx") => self.cx = Some(attr.parse(value)?),
+                     expanded_name!("", "cy") => self.cy = Some(attr.parse(value)?),
+                     expanded_name!("", "r") => self.r = Some(attr.parse(value)?),
+                     expanded_name!("", "fx") => self.fx = Some(attr.parse(value)?),
+                     expanded_name!("", "fy") => self.fy = Some(attr.parse(value)?),
+ 
+                     _ => (),
+                 }
              }
          }
  
@@@ -813,10 -838,8 +842,9 @@@ fn acquire_gradient
  #[cfg(test)]
  mod tests {
      use super::*;
-     use crate::float_eq_cairo::ApproxEqCairo;
 -    use crate::node::{NodeData, NodeType, RsvgNode};
 +    use crate::node::{Node, NodeData};
      use markup5ever::{namespace_url, ns, QualName};
 +    use std::ptr;
  
      #[test]
      fn parses_spread_method() {
@@@ -829,33 -852,17 +857,16 @@@
          assert!(SpreadMethod::parse_str("foobar").is_err());
      }
  
-     fn assert_tuples_equal(a: &(f64, f64), b: &(f64, f64)) {
-         assert_approx_eq_cairo!(a.0, b.0);
-         assert_approx_eq_cairo!(a.1, b.1);
-     }
- 
-     #[test]
-     fn fixes_focus_point() {
-         // inside the circle
-         assert_tuples_equal(&fix_focus_point(1.0, 1.0, 2.0, 1.0, 3.0), &(1.0, 1.0));
- 
-         // on the edge
-         assert_tuples_equal(&fix_focus_point(1.0, 1.0, 2.0, 1.0, 2.0), &(1.0, 1.0));
- 
-         // outside the circle
-         assert_tuples_equal(&fix_focus_point(1.0, 1.0, 3.0, 1.0, 1.0), &(2.0, 1.0));
-     }
- 
      #[test]
      fn gradient_resolved_from_defaults_is_really_resolved() {
 -        let node = RsvgNode::new(NodeData::new(
 -            NodeType::LinearGradient,
 +        let bag = unsafe { PropertyBag::new_from_xml2_attributes(0, ptr::null()) };
 +
 +        let node = Node::new(NodeData::new_element(
              &QualName::new(None, ns!(svg), local_name!("linearGradient")),
 -            None,
 -            None,
 -            Box::new(LinearGradient::default()),
 +            &bag,
          ));
  
 -        let borrow = node.borrow();
 +        let borrow = node.borrow_element();
          let g = borrow.get_impl::<LinearGradient>();
          let Unresolved { gradient, .. } = g.get_unresolved(&node);
          let gradient = gradient.resolve_from_defaults();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]