[librsvg: 17/23] feMorphology - resolve and render separately




commit 51312d9d53a7eb188ba78ef1934e829d0d406fe1
Author: Federico Mena Quintero <federico gnome org>
Date:   Thu Mar 11 16:32:54 2021 -0600

    feMorphology - resolve and render separately

 src/filters/mod.rs        |  5 ++---
 src/filters/morphology.rs | 10 +++++++---
 2 files changed, 9 insertions(+), 6 deletions(-)
---
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index 17b70b34..3a9a473e 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -52,7 +52,6 @@ pub mod offset;
 pub mod tile;
 pub mod turbulence;
 
-use morphology::FeMorphology;
 use offset::FeOffset;
 use tile::FeTile;
 use turbulence::FeTurbulence;
@@ -75,7 +74,7 @@ pub enum PrimitiveParams {
     GaussianBlur(gaussian_blur::GaussianBlur),
     Image(image::Image),
     Merge(merge::Merge),
-    Morphology(Node),
+    Morphology(morphology::Morphology),
     Offset(Node),
     SpecularLighting(lighting::SpecularLighting),
     Tile(Node),
@@ -326,7 +325,7 @@ fn render_primitive(
         (Element::FeGaussianBlur(_), GaussianBlur(p))           => p.render(ctx, acquired_nodes, draw_ctx),
         (Element::FeImage(_), Image(p))                         => p.render(ctx, acquired_nodes, draw_ctx),
         (Element::FeMerge(_), Merge(p))                         => p.render(ctx, acquired_nodes, draw_ctx),
-        (Element::FeMorphology(ref inner), Morphology(node))               => 
FeMorphology::render(&inner.element_impl, &node, ctx, acquired_nodes, draw_ctx),
+        (Element::FeMorphology(_), Morphology(p))               => p.render(ctx, acquired_nodes, draw_ctx),
         (Element::FeOffset(ref inner), Offset(node))                       => 
FeOffset::render(&inner.element_impl, &node, ctx, acquired_nodes, draw_ctx),
         (Element::FeSpecularLighting(_), SpecularLighting(p))   => p.render(ctx, acquired_nodes, draw_ctx),
         (Element::FeTile(ref inner), Tile(node))                           => 
FeTile::render(&inner.element_impl, &node, ctx, acquired_nodes, draw_ctx),
diff --git a/src/filters/morphology.rs b/src/filters/morphology.rs
index 93c19641..a0144ef5 100644
--- a/src/filters/morphology.rs
+++ b/src/filters/morphology.rs
@@ -22,12 +22,14 @@ use super::context::{FilterContext, FilterOutput, FilterResult};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// Enumeration of the possible morphology operations.
+#[derive(Clone)]
 enum Operator {
     Erode,
     Dilate,
 }
 
 /// The `feMorphology` filter primitive.
+#[derive(Clone)]
 pub struct FeMorphology {
     base: Primitive,
     in1: Input,
@@ -35,6 +37,9 @@ pub struct FeMorphology {
     radius: (f64, f64),
 }
 
+/// Resolved `feMorphology` primitive for rendering.
+pub type Morphology = FeMorphology;
+
 impl Default for FeMorphology {
     /// Constructs a new `Morphology` with empty properties.
     #[inline]
@@ -70,7 +75,6 @@ impl SetAttributes for FeMorphology {
 impl FeMorphology {
     pub fn render(
         &self,
-        _node: &Node,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -162,8 +166,8 @@ impl FeMorphology {
 }
 
 impl FilterEffect for FeMorphology {
-    fn resolve(&self, node: &Node) -> Result<PrimitiveParams, FilterError> {
-        Ok(PrimitiveParams::Morphology(node.clone()))
+    fn resolve(&self, _node: &Node) -> Result<PrimitiveParams, FilterError> {
+        Ok(PrimitiveParams::Morphology(self.clone()))
     }
 }
 


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