[librsvg: 8/20] feComponentTransfer: shorten code by implementing Default and Clone for its parameters




commit 601b54f43573c0137b086b97417170d4fad97467
Author: Federico Mena Quintero <federico gnome org>
Date:   Tue Mar 16 13:04:50 2021 -0600

    feComponentTransfer: shorten code by implementing Default and Clone for its parameters

 src/filters/component_transfer.rs | 29 ++++++++++-------------------
 1 file changed, 10 insertions(+), 19 deletions(-)
---
diff --git a/src/filters/component_transfer.rs b/src/filters/component_transfer.rs
index 3580f4cf..82ecd959 100644
--- a/src/filters/component_transfer.rs
+++ b/src/filters/component_transfer.rs
@@ -20,32 +20,23 @@ use super::context::{FilterContext, FilterOutput, FilterResult};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feComponentTransfer` filter primitive.
+#[derive(Default)]
 pub struct FeComponentTransfer {
     base: Primitive,
-    in1: Input,
+    params: ComponentTransfer,
 }
 
 /// Resolved `feComponentTransfer` primitive for rendering.
+#[derive(Clone, Default)]
 pub struct ComponentTransfer {
     in1: Input,
     functions: Functions,
     color_interpolation_filters: ColorInterpolationFilters,
 }
 
-impl Default for FeComponentTransfer {
-    /// Constructs a new `ComponentTransfer` with empty properties.
-    #[inline]
-    fn default() -> FeComponentTransfer {
-        FeComponentTransfer {
-            base: Default::default(),
-            in1: Default::default(),
-        }
-    }
-}
-
 impl SetAttributes for FeComponentTransfer {
     fn set_attributes(&mut self, attrs: &Attributes) -> ElementResult {
-        self.in1 = self.base.parse_one_input(attrs)?;
+        self.params.in1 = self.base.parse_one_input(attrs)?;
         Ok(())
     }
 }
@@ -92,7 +83,7 @@ struct FunctionParameters {
     offset: f64,
 }
 
-#[derive(Debug, PartialEq)]
+#[derive(Clone, Debug, Default, PartialEq)]
 struct Functions {
     r: FeFuncR,
     g: FeFuncG,
@@ -381,13 +372,13 @@ impl FilterEffect for FeComponentTransfer {
         let cascaded = CascadedValues::new_from_node(node);
         let values = cascaded.get();
 
+        let mut params = self.params.clone();
+        params.functions = get_functions(node)?;
+        params.color_interpolation_filters = values.color_interpolation_filters();
+
         Ok((
             self.base.clone(),
-            PrimitiveParams::ComponentTransfer(ComponentTransfer {
-                in1: self.in1.clone(),
-                functions: get_functions(node)?,
-                color_interpolation_filters: values.color_interpolation_filters(),
-            }),
+            PrimitiveParams::ComponentTransfer(params),
         ))
     }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]