[librsvg: 10/15] Don't make filter primitives responsible for shipping around the FilterResult's name




commit 8e436dd5f1a0064dd1f64b7982378355bb4151f1
Author: Federico Mena Quintero <federico gnome org>
Date:   Thu Apr 8 16:15:46 2021 -0500

    Don't make filter primitives responsible for shipping around the FilterResult's name
    
    They just clone it from the ResolvedPrimitive and return that unchanged.

 src/filters/blend.rs              |  9 +++------
 src/filters/color_matrix.rs       | 13 +++++--------
 src/filters/component_transfer.rs | 13 +++++--------
 src/filters/composite.rs          |  9 +++------
 src/filters/convolve_matrix.rs    |  9 +++------
 src/filters/displacement_map.rs   | 13 +++++--------
 src/filters/flood.rs              |  9 +++------
 src/filters/gaussian_blur.rs      | 13 +++++--------
 src/filters/image.rs              | 13 +++++--------
 src/filters/lighting.rs           |  9 +++------
 src/filters/merge.rs              |  9 +++------
 src/filters/mod.rs                | 13 +++++++++----
 src/filters/morphology.rs         | 13 +++++--------
 src/filters/offset.rs             |  9 +++------
 src/filters/tile.rs               |  9 +++------
 src/filters/turbulence.rs         | 13 +++++--------
 16 files changed, 68 insertions(+), 108 deletions(-)
---
diff --git a/src/filters/blend.rs b/src/filters/blend.rs
old mode 100755
new mode 100644
index 11367f8c..011a24e8
--- a/src/filters/blend.rs
+++ b/src/filters/blend.rs
@@ -10,7 +10,7 @@ use crate::parsers::{Parse, ParseValue};
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// Enumeration of the possible blending modes.
@@ -75,7 +75,7 @@ impl Blend {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let input_1 = ctx.get_input(
             acquired_nodes,
             draw_ctx,
@@ -100,10 +100,7 @@ impl Blend {
             cairo::Operator::from(self.mode),
         )?;
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput { surface, bounds },
-        })
+        Ok(FilterOutput { surface, bounds })
     }
 }
 
diff --git a/src/filters/color_matrix.rs b/src/filters/color_matrix.rs
index bfe577a3..73f24940 100644
--- a/src/filters/color_matrix.rs
+++ b/src/filters/color_matrix.rs
@@ -15,7 +15,7 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// Color matrix operation types.
@@ -155,7 +155,7 @@ impl ColorMatrix {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let input_1 = ctx.get_input(
             acquired_nodes,
             draw_ctx,
@@ -206,12 +206,9 @@ impl ColorMatrix {
             }
         });
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput {
-                surface: surface.share()?,
-                bounds,
-            },
+        Ok(FilterOutput {
+            surface: surface.share()?,
+            bounds,
         })
     }
 }
diff --git a/src/filters/component_transfer.rs b/src/filters/component_transfer.rs
index 8c62a091..4ae3767b 100644
--- a/src/filters/component_transfer.rs
+++ b/src/filters/component_transfer.rs
@@ -16,7 +16,7 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feComponentTransfer` filter primitive.
@@ -292,7 +292,7 @@ impl ComponentTransfer {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let input_1 = ctx.get_input(
             acquired_nodes,
             draw_ctx,
@@ -357,12 +357,9 @@ impl ComponentTransfer {
             }
         });
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput {
-                surface: surface.share()?,
-                bounds,
-            },
+        Ok(FilterOutput {
+            surface: surface.share()?,
+            bounds,
         })
     }
 }
diff --git a/src/filters/composite.rs b/src/filters/composite.rs
index 7cfdf336..da5d3733 100644
--- a/src/filters/composite.rs
+++ b/src/filters/composite.rs
@@ -10,7 +10,7 @@ use crate::parsers::{Parse, ParseValue};
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// Enumeration of the possible compositing operations.
@@ -74,7 +74,7 @@ impl Composite {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let input_1 = ctx.get_input(
             acquired_nodes,
             draw_ctx,
@@ -110,10 +110,7 @@ impl Composite {
             )?
         };
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput { surface, bounds },
-        })
+        Ok(FilterOutput { surface, bounds })
     }
 }
 
diff --git a/src/filters/convolve_matrix.rs b/src/filters/convolve_matrix.rs
index 690bdc7c..97fcaa0d 100644
--- a/src/filters/convolve_matrix.rs
+++ b/src/filters/convolve_matrix.rs
@@ -20,7 +20,7 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feConvolveMatrix` filter primitive.
@@ -140,7 +140,7 @@ impl ConvolveMatrix {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         #![allow(clippy::many_single_char_names)]
 
         let input_1 = ctx.get_input(
@@ -293,10 +293,7 @@ impl ConvolveMatrix {
             bounds = original_bounds;
         }
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput { surface, bounds },
-        })
+        Ok(FilterOutput { surface, bounds })
     }
 }
 
diff --git a/src/filters/displacement_map.rs b/src/filters/displacement_map.rs
index c74163d4..8c7ae8b7 100644
--- a/src/filters/displacement_map.rs
+++ b/src/filters/displacement_map.rs
@@ -11,7 +11,7 @@ use crate::property_defs::ColorInterpolationFilters;
 use crate::surface_utils::{iterators::Pixels, shared_surface::ExclusiveImageSurface};
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// Enumeration of the color channels the displacement map can source.
@@ -73,7 +73,7 @@ impl DisplacementMap {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         // https://www.w3.org/TR/filter-effects/#feDisplacementMapElement
         // "The color-interpolation-filters property only applies to
         // the in2 source image and does not apply to the in source
@@ -141,12 +141,9 @@ impl DisplacementMap {
             Ok(())
         })?;
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput {
-                surface: surface.share()?,
-                bounds,
-            },
+        Ok(FilterOutput {
+            surface: surface.share()?,
+            bounds,
         })
     }
 }
diff --git a/src/filters/flood.rs b/src/filters/flood.rs
index 5ead0b93..0a4452dc 100644
--- a/src/filters/flood.rs
+++ b/src/filters/flood.rs
@@ -5,7 +5,7 @@ use crate::node::{CascadedValues, Node};
 use crate::paint_server::resolve_color;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feFlood` filter primitive.
@@ -32,15 +32,12 @@ impl Flood {
         ctx: &FilterContext,
         _acquired_nodes: &mut AcquiredNodes<'_>,
         _draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let bounds = primitive.get_bounds(ctx).into_irect(ctx);
 
         let surface = ctx.source_graphic().flood(bounds, self.color)?;
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput { surface, bounds },
-        })
+        Ok(FilterOutput { surface, bounds })
     }
 }
 
diff --git a/src/filters/gaussian_blur.rs b/src/filters/gaussian_blur.rs
index bf6ad202..901da35e 100644
--- a/src/filters/gaussian_blur.rs
+++ b/src/filters/gaussian_blur.rs
@@ -17,7 +17,7 @@ use crate::surface_utils::{
 };
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The maximum gaussian blur kernel size.
@@ -191,7 +191,7 @@ impl GaussianBlur {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let input_1 = ctx.get_input(
             acquired_nodes,
             draw_ctx,
@@ -234,12 +234,9 @@ impl GaussianBlur {
             horiz_result_surface
         };
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput {
-                surface: output_surface,
-                bounds,
-            },
+        Ok(FilterOutput {
+            surface: output_surface,
+            bounds,
         })
     }
 }
diff --git a/src/filters/image.rs b/src/filters/image.rs
index 51ef1e81..55a25353 100644
--- a/src/filters/image.rs
+++ b/src/filters/image.rs
@@ -13,7 +13,7 @@ use crate::surface_utils::shared_surface::SharedImageSurface;
 use crate::viewbox::ViewBox;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feImage` filter primitive.
@@ -133,7 +133,7 @@ impl Image {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let bounds_builder = primitive.get_bounds(ctx);
         let (bounds, unclipped_bounds) = bounds_builder.into_rect(ctx);
 
@@ -153,12 +153,9 @@ impl Image {
             )
         }?;
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput {
-                surface,
-                bounds: bounds.into(),
-            },
+        Ok(FilterOutput {
+            surface,
+            bounds: bounds.into(),
         })
     }
 }
diff --git a/src/filters/lighting.rs b/src/filters/lighting.rs
index 739ae809..36ea3037 100644
--- a/src/filters/lighting.rs
+++ b/src/filters/lighting.rs
@@ -11,7 +11,7 @@ use crate::document::AcquiredNodes;
 use crate::drawing_ctx::DrawingCtx;
 use crate::element::{Draw, Element, ElementResult, SetAttributes};
 use crate::filters::{
-    context::{FilterContext, FilterOutput, FilterResult},
+    context::{FilterContext, FilterOutput},
     FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive,
 };
 use crate::node::{CascadedValues, Node, NodeBorrow};
@@ -441,7 +441,7 @@ macro_rules! impl_lighting_filter {
                 ctx: &FilterContext,
                 acquired_nodes: &mut AcquiredNodes<'_>,
                 draw_ctx: &mut DrawingCtx,
-            ) -> Result<FilterResult, FilterError> {
+            ) -> Result<FilterOutput, FilterError> {
                 let input_1 = ctx.get_input(
                     acquired_nodes,
                     draw_ctx,
@@ -642,10 +642,7 @@ macro_rules! impl_lighting_filter {
                     bounds = original_bounds;
                 }
 
-                Ok(FilterResult {
-                    name: primitive.result.clone(),
-                    output: FilterOutput { surface, bounds },
-                })
+                Ok(FilterOutput { surface, bounds })
             }
         }
 
diff --git a/src/filters/merge.rs b/src/filters/merge.rs
index 031e78b9..3f494b7d 100644
--- a/src/filters/merge.rs
+++ b/src/filters/merge.rs
@@ -10,7 +10,7 @@ use crate::rect::IRect;
 use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feMerge` filter primitive.
@@ -101,7 +101,7 @@ impl Merge {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         // Compute the filter bounds, taking each feMergeNode's input into account.
         let mut bounds = primitive.get_bounds(ctx);
         for merge_node in &self.merge_nodes {
@@ -133,10 +133,7 @@ impl Merge {
             )?,
         };
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput { surface, bounds },
-        })
+        Ok(FilterOutput { surface, bounds })
     }
 }
 
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index 04ef127c..d7ed3e35 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -23,7 +23,7 @@ mod bounds;
 use self::bounds::BoundsBuilder;
 
 pub mod context;
-use self::context::{FilterContext, FilterResult};
+use self::context::{FilterContext, FilterOutput, FilterResult};
 
 mod error;
 use self::error::FilterError;
@@ -301,13 +301,18 @@ pub fn render(
                     Ok((resolved_primitive, params))
                 })
                 .and_then(|(resolved_primitive, params)| {
-                    render_primitive(
+                    let output = render_primitive(
                         &resolved_primitive,
                         &params,
                         &filter_ctx,
                         acquired_nodes,
                         draw_ctx,
-                    )
+                    )?;
+
+                    Ok(FilterResult {
+                        name: resolved_primitive.result.clone(),
+                        output,
+                    })
                 })
                 .and_then(|result| filter_ctx.store_result(result))
             {
@@ -345,7 +350,7 @@ fn render_primitive(
     ctx: &FilterContext,
     acquired_nodes: &mut AcquiredNodes<'_>,
     draw_ctx: &mut DrawingCtx,
-) -> Result<FilterResult, FilterError> {
+) -> Result<FilterOutput, FilterError> {
     use PrimitiveParams::*;
 
     match params {
diff --git a/src/filters/morphology.rs b/src/filters/morphology.rs
index 98fb5bd2..42feb46e 100644
--- a/src/filters/morphology.rs
+++ b/src/filters/morphology.rs
@@ -18,7 +18,7 @@ use crate::surface_utils::{
 };
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// Enumeration of the possible morphology operations.
@@ -71,7 +71,7 @@ impl Morphology {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         // Although https://www.w3.org/TR/filter-effects/#propdef-color-interpolation-filters does not 
mention
         // feMorphology as being one of the primitives that does *not* use that property,
         // the SVG1.1 test for filters-morph-01-f.svg fails if we pass the value from the ComputedValues 
here (that
@@ -147,12 +147,9 @@ impl Morphology {
             }
         });
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput {
-                surface: surface.share()?,
-                bounds,
-            },
+        Ok(FilterOutput {
+            surface: surface.share()?,
+            bounds,
         })
     }
 }
diff --git a/src/filters/offset.rs b/src/filters/offset.rs
index 9fe890f8..77be049e 100644
--- a/src/filters/offset.rs
+++ b/src/filters/offset.rs
@@ -8,7 +8,7 @@ use crate::parsers::ParseValue;
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feOffset` filter primitive.
@@ -49,7 +49,7 @@ impl Offset {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         // https://www.w3.org/TR/filter-effects/#ColorInterpolationFiltersProperty
         //
         // "Note: The color-interpolation-filters property just has an
@@ -72,10 +72,7 @@ impl Offset {
 
         let surface = input_1.surface().offset(bounds, dx, dy)?;
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput { surface, bounds },
-        })
+        Ok(FilterOutput { surface, bounds })
     }
 }
 
diff --git a/src/filters/tile.rs b/src/filters/tile.rs
index b832cbb3..669e0399 100644
--- a/src/filters/tile.rs
+++ b/src/filters/tile.rs
@@ -5,7 +5,7 @@ use crate::node::Node;
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterInput, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterInput, FilterOutput};
 use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// The `feTile` filter primitive.
@@ -35,7 +35,7 @@ impl Tile {
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         // https://www.w3.org/TR/filter-effects/#ColorInterpolationFiltersProperty
         //
         // "Note: The color-interpolation-filters property just has an
@@ -70,10 +70,7 @@ impl Tile {
             }
         };
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput { surface, bounds },
-        })
+        Ok(FilterOutput { surface, bounds })
     }
 }
 
diff --git a/src/filters/turbulence.rs b/src/filters/turbulence.rs
index 7b6e3b69..ff0b483f 100644
--- a/src/filters/turbulence.rs
+++ b/src/filters/turbulence.rs
@@ -15,7 +15,7 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
-use super::context::{FilterContext, FilterOutput, FilterResult};
+use super::context::{FilterContext, FilterOutput};
 use super::{FilterEffect, FilterError, Primitive, PrimitiveParams, ResolvedPrimitive};
 
 /// Enumeration of the tile stitching modes.
@@ -345,7 +345,7 @@ impl Turbulence {
         ctx: &FilterContext,
         _acquired_nodes: &mut AcquiredNodes<'_>,
         _draw_ctx: &mut DrawingCtx,
-    ) -> Result<FilterResult, FilterError> {
+    ) -> Result<FilterOutput, FilterError> {
         let bounds = primitive.get_bounds(ctx).into_irect(ctx);
 
         let affine = ctx.paffine().invert().unwrap();
@@ -405,12 +405,9 @@ impl Turbulence {
             }
         });
 
-        Ok(FilterResult {
-            name: primitive.result.clone(),
-            output: FilterOutput {
-                surface: surface.share()?,
-                bounds,
-            },
+        Ok(FilterOutput {
+            surface: surface.share()?,
+            bounds,
         })
     }
 }


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