[librsvg: 5/5] Merge branch 'corossig/librsvg-feature-fr-gradient'
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 5/5] Merge branch 'corossig/librsvg-feature-fr-gradient'
- Date: Tue, 17 Mar 2020 18:03:33 +0000 (UTC)
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]