[librsvg: 38/45] Add back a Common structure for NodeFooGradient fields
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 38/45] Add back a Common structure for NodeFooGradient fields
- Date: Tue, 1 Oct 2019 15:10:08 +0000 (UTC)
commit 601df3ae7ea2ddcc3d6008c8056ef48736779a25
Author: Federico Mena Quintero <federico gnome org>
Date: Mon Sep 30 18:08:20 2019 -0500
Add back a Common structure for NodeFooGradient fields
rsvg_internals/src/gradient.rs | 59 +++++++++++++++++++++++++-----------------
1 file changed, 35 insertions(+), 24 deletions(-)
---
diff --git a/rsvg_internals/src/gradient.rs b/rsvg_internals/src/gradient.rs
index 78bfe474..55eb987a 100644
--- a/rsvg_internals/src/gradient.rs
+++ b/rsvg_internals/src/gradient.rs
@@ -296,32 +296,33 @@ impl Variant {
}
#[derive(Default)]
-pub struct NodeLinearGradient {
+struct Common {
units: Option<GradientUnits>,
affine: Option<cairo::Matrix>,
spread: Option<SpreadMethod>,
+ fallback: Option<Fragment>,
+}
+
+#[derive(Default)]
+pub struct NodeLinearGradient {
+ common: Common,
+
x1: Option<LengthHorizontal>,
y1: Option<LengthVertical>,
x2: Option<LengthHorizontal>,
y2: Option<LengthVertical>,
-
- fallback: Option<Fragment>,
}
#[derive(Default)]
pub struct NodeRadialGradient {
- units: Option<GradientUnits>,
- affine: Option<cairo::Matrix>,
- spread: Option<SpreadMethod>,
+ common: Common,
cx: Option<LengthHorizontal>,
cy: Option<LengthVertical>,
r: Option<LengthBoth>,
fx: Option<LengthHorizontal>,
fy: Option<LengthVertical>,
-
- fallback: Option<Fragment>,
}
struct UnresolvedGradient {
@@ -482,9 +483,9 @@ struct Unresolved {
impl NodeLinearGradient {
fn get_unresolved(&self, node: &RsvgNode) -> Unresolved {
let mut gradient = UnresolvedGradient {
- units: self.units,
- affine: self.affine,
- spread: self.spread,
+ units: self.common.units,
+ affine: self.common.affine,
+ spread: self.common.spread,
stops: None,
variant: UnresolvedVariant::Linear {
x1: self.x1,
@@ -498,7 +499,7 @@ impl NodeLinearGradient {
Unresolved {
gradient,
- fallback: self.fallback.clone(),
+ fallback: self.common.fallback.clone(),
}
}
}
@@ -506,9 +507,9 @@ impl NodeLinearGradient {
impl NodeRadialGradient {
fn get_unresolved(&self, node: &RsvgNode) -> Unresolved {
let mut gradient = UnresolvedGradient {
- units: self.units,
- affine: self.affine,
- spread: self.spread,
+ units: self.common.units,
+ affine: self.common.affine,
+ spread: self.common.spread,
stops: None,
variant: UnresolvedVariant::Radial {
cx: self.cx,
@@ -523,13 +524,13 @@ impl NodeRadialGradient {
Unresolved {
gradient,
- fallback: self.fallback.clone(),
+ fallback: self.common.fallback.clone(),
}
}
}
-impl NodeTrait for NodeLinearGradient {
- fn set_atts(&mut self, _: Option<&RsvgNode>, pbag: &PropertyBag<'_>) -> NodeResult {
+impl Common {
+ fn set_atts(&mut self, pbag: &PropertyBag<'_>) -> NodeResult {
for (attr, value) in pbag.iter() {
match attr {
local_name!("gradientUnits") => self.units = Some(attr.parse(value)?),
@@ -538,6 +539,20 @@ impl NodeTrait for NodeLinearGradient {
local_name!("xlink:href") => {
self.fallback = Some(Fragment::parse(value).attribute(attr)?)
}
+ _ => (),
+ }
+ }
+
+ Ok(())
+ }
+}
+
+impl NodeTrait for NodeLinearGradient {
+ fn set_atts(&mut self, _: Option<&RsvgNode>, pbag: &PropertyBag<'_>) -> NodeResult {
+ self.common.set_atts(pbag)?;
+
+ for (attr, value) in pbag.iter() {
+ match attr {
local_name!("x1") => self.x1 = Some(attr.parse(value)?),
local_name!("y1") => self.y1 = Some(attr.parse(value)?),
local_name!("x2") => self.x2 = Some(attr.parse(value)?),
@@ -553,14 +568,10 @@ impl NodeTrait for NodeLinearGradient {
impl NodeTrait for NodeRadialGradient {
fn set_atts(&mut self, _: Option<&RsvgNode>, pbag: &PropertyBag<'_>) -> NodeResult {
+ self.common.set_atts(pbag)?;
+
for (attr, value) in pbag.iter() {
match attr {
- local_name!("gradientUnits") => self.units = Some(attr.parse(value)?),
- local_name!("gradientTransform") => self.affine = Some(attr.parse(value)?),
- local_name!("spreadMethod") => self.spread = Some(attr.parse(value)?),
- local_name!("xlink:href") => {
- self.fallback = Some(Fragment::parse(value).attribute(attr)?)
- }
local_name!("cx") => self.cx = Some(attr.parse(value)?),
local_name!("cy") => self.cy = Some(attr.parse(value)?),
local_name!("r") => self.r = Some(attr.parse(value)?),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]