diff options
author | Federico Mena Quintero <federico@gnome.org> | 2022-10-24 13:16:59 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2022-11-04 08:44:28 -0600 |
commit | 0b3d3c90259001bdc86941101867302bdf4b2cba (patch) | |
tree | 115a3e794f0dc940ff744a41995a0f5f876288bb | |
parent | ae78d13d6cb3fb4998e3d1b65727c4cae4a3f174 (diff) | |
download | librsvg-0b3d3c90259001bdc86941101867302bdf4b2cba.tar.gz |
gradient.rs: use a TransformAttribute field so it can be parsed as the other attributes
The conversion to Transform is done in to_user_space() now.
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/763>
-rw-r--r-- | src/gradient.rs | 16 | ||||
-rw-r--r-- | src/transform.rs | 2 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/gradient.rs b/src/gradient.rs index 8194eb02..053f34d0 100644 --- a/src/gradient.rs +++ b/src/gradient.rs @@ -287,7 +287,7 @@ impl UnresolvedVariant { #[derive(Default)] struct Common { units: Option<GradientUnits>, - transform: Option<Transform>, + transform: Option<TransformAttribute>, spread: Option<SpreadMethod>, fallback: Option<NodeId>, @@ -323,7 +323,7 @@ pub struct RadialGradient { /// field was specified. struct UnresolvedGradient { units: Option<GradientUnits>, - transform: Option<Transform>, + transform: Option<TransformAttribute>, spread: Option<SpreadMethod>, stops: Option<Vec<ColorStop>>, @@ -334,7 +334,7 @@ struct UnresolvedGradient { #[derive(Clone)] pub struct ResolvedGradient { units: GradientUnits, - transform: Transform, + transform: TransformAttribute, spread: SpreadMethod, stops: Vec<ColorStop>, @@ -470,7 +470,9 @@ impl UnresolvedGradient { fn resolve_from_defaults(&self) -> UnresolvedGradient { let units = self.units.or_else(|| Some(GradientUnits::default())); - let transform = self.transform.or_else(|| Some(Transform::default())); + let transform = self + .transform + .or_else(|| Some(TransformAttribute::default())); let spread = self.spread.or_else(|| Some(SpreadMethod::default())); let stops = self.stops.clone().or_else(|| Some(Vec::<ColorStop>::new())); let variant = self.variant.resolve_from_defaults(); @@ -527,8 +529,7 @@ impl SetAttributes for Common { set_attribute(&mut self.units, attr.parse(value), session) } expanded_name!("", "gradientTransform") => { - let transform_attr: TransformAttribute = attr.parse(value)?; - self.transform = Some(transform_attr.to_transform()); + set_attribute(&mut self.transform, attr.parse(value), session); } expanded_name!("", "spreadMethod") => { set_attribute(&mut self.spread, attr.parse(value), session) @@ -689,7 +690,8 @@ impl ResolvedGradient { let view_params = current_params.with_units(units); let params = NormalizeParams::new(values, &view_params); - let transform = transform.pre_transform(&self.transform).invert()?; + let gradient_transform = self.transform.to_transform(); + let transform = transform.pre_transform(&gradient_transform).invert()?; let variant = match self.variant { ResolvedGradientVariant::Linear { x1, y1, x2, y2 } => GradientVariant::Linear { diff --git a/src/transform.rs b/src/transform.rs index 6826d905..40e7cdde 100644 --- a/src/transform.rs +++ b/src/transform.rs @@ -45,7 +45,7 @@ pub enum TransformProperty { /// The `transform` attribute from SVG1.1 /// /// SVG1.1: <https://www.w3.org/TR/SVG11/coords.html#TransformAttribute> -#[derive(Default, Debug, Clone, PartialEq)] +#[derive(Copy, Clone, Default, Debug, PartialEq)] pub struct TransformAttribute(Transform); impl Default for TransformProperty { |