[librsvg: 11/20] feDisplacementMap: shorten code by implementing Default and Clone for its parameters
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 11/20] feDisplacementMap: shorten code by implementing Default and Clone for its parameters
- Date: Wed, 17 Mar 2021 19:08:05 +0000 (UTC)
commit 8ac3371fe6a6387635b1917c1932f7e00a215fc1
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Mar 16 13:18:31 2021 -0600
feDisplacementMap: shorten code by implementing Default and Clone for its parameters
src/filters/displacement_map.rs | 50 ++++++++++++-----------------------------
1 file changed, 14 insertions(+), 36 deletions(-)
---
diff --git a/src/filters/displacement_map.rs b/src/filters/displacement_map.rs
index 847562f1..cffd6a79 100644
--- a/src/filters/displacement_map.rs
+++ b/src/filters/displacement_map.rs
@@ -23,17 +23,17 @@ enum ColorChannel {
A,
}
+enum_default!(ColorChannel, ColorChannel::A);
+
/// The `feDisplacementMap` filter primitive.
+#[derive(Default)]
pub struct FeDisplacementMap {
base: Primitive,
- in1: Input,
- in2: Input,
- scale: f64,
- x_channel_selector: ColorChannel,
- y_channel_selector: ColorChannel,
+ params: DisplacementMap,
}
/// Resolved `feDisplacementMap` primitive for rendering.
+#[derive(Clone, Default)]
pub struct DisplacementMap {
in1: Input,
in2: Input,
@@ -43,35 +43,20 @@ pub struct DisplacementMap {
color_interpolation_filters: ColorInterpolationFilters,
}
-impl Default for FeDisplacementMap {
- /// Constructs a new `DisplacementMap` with empty properties.
- #[inline]
- fn default() -> FeDisplacementMap {
- FeDisplacementMap {
- base: Default::default(),
- in1: Default::default(),
- in2: Default::default(),
- scale: 0.0,
- x_channel_selector: ColorChannel::A,
- y_channel_selector: ColorChannel::A,
- }
- }
-}
-
impl SetAttributes for FeDisplacementMap {
fn set_attributes(&mut self, attrs: &Attributes) -> ElementResult {
let (in1, in2) = self.base.parse_two_inputs(attrs)?;
- self.in1 = in1;
- self.in2 = in2;
+ self.params.in1 = in1;
+ self.params.in2 = in2;
for (attr, value) in attrs.iter() {
match attr.expanded() {
- expanded_name!("", "scale") => self.scale = attr.parse(value)?,
+ expanded_name!("", "scale") => self.params.scale = attr.parse(value)?,
expanded_name!("", "xChannelSelector") => {
- self.x_channel_selector = attr.parse(value)?
+ self.params.x_channel_selector = attr.parse(value)?
}
expanded_name!("", "yChannelSelector") => {
- self.y_channel_selector = attr.parse(value)?
+ self.params.y_channel_selector = attr.parse(value)?
}
_ => (),
}
@@ -171,17 +156,10 @@ impl FilterEffect for FeDisplacementMap {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
- Ok((
- self.base.clone(),
- PrimitiveParams::DisplacementMap(DisplacementMap {
- in1: self.in1.clone(),
- in2: self.in2.clone(),
- scale: self.scale,
- x_channel_selector: self.x_channel_selector,
- y_channel_selector: self.y_channel_selector,
- color_interpolation_filters: values.color_interpolation_filters(),
- }),
- ))
+ let mut params = self.params.clone();
+ params.color_interpolation_filters = values.color_interpolation_filters();
+
+ Ok((self.base.clone(), PrimitiveParams::DisplacementMap(params)))
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]