summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2022-10-24 13:16:59 -0500
committerFederico Mena Quintero <federico@gnome.org>2022-11-04 08:44:28 -0600
commit0b3d3c90259001bdc86941101867302bdf4b2cba (patch)
tree115a3e794f0dc940ff744a41995a0f5f876288bb
parentae78d13d6cb3fb4998e3d1b65727c4cae4a3f174 (diff)
downloadlibrsvg-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.rs16
-rw-r--r--src/transform.rs2
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 {