[librsvg: 1/15] Split the render method for filter primitives into its own FilterRender trait
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/15] Split the render method for filter primitives into its own FilterRender trait
- Date: Tue, 9 Mar 2021 20:51:37 +0000 (UTC)
commit 5754a55c1adb4dc9dd2af64744213e151f79f05f
Author: Federico Mena Quintero <federico gnome org>
Date: Mon Mar 8 13:21:36 2021 -0600
Split the render method for filter primitives into its own FilterRender trait
Let's see if we can have filter primitive *elements* have a method
that will generate a struct with the parameters for the primitive,
without requiring the full node and its children.
src/filters/blend.rs | 6 ++++--
src/filters/color_matrix.rs | 6 ++++--
src/filters/component_transfer.rs | 6 ++++--
src/filters/composite.rs | 6 ++++--
src/filters/convolve_matrix.rs | 6 ++++--
src/filters/displacement_map.rs | 6 ++++--
src/filters/flood.rs | 6 ++++--
src/filters/gaussian_blur.rs | 6 ++++--
src/filters/image.rs | 6 ++++--
src/filters/lighting.rs | 6 ++++--
src/filters/merge.rs | 6 ++++--
src/filters/mod.rs | 7 +++++--
src/filters/morphology.rs | 6 ++++--
src/filters/offset.rs | 6 ++++--
src/filters/tile.rs | 6 ++++--
src/filters/turbulence.rs | 6 ++++--
16 files changed, 65 insertions(+), 32 deletions(-)
---
diff --git a/src/filters/blend.rs b/src/filters/blend.rs
index 5f73d6b9..7eac4b59 100755
--- a/src/filters/blend.rs
+++ b/src/filters/blend.rs
@@ -10,7 +10,7 @@ use crate::parsers::{Parse, ParseValue};
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, Input, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, Input, PrimitiveWithInput};
/// Enumeration of the possible blending modes.
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
@@ -70,7 +70,7 @@ impl SetAttributes for FeBlend {
}
}
-impl FilterEffect for FeBlend {
+impl FilterRender for FeBlend {
fn render(
&self,
node: &Node,
@@ -97,7 +97,9 @@ impl FilterEffect for FeBlend {
output: FilterOutput { surface, bounds },
})
}
+}
+impl FilterEffect for FeBlend {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
diff --git a/src/filters/color_matrix.rs b/src/filters/color_matrix.rs
index 87ee3e5b..b6a0a843 100644
--- a/src/filters/color_matrix.rs
+++ b/src/filters/color_matrix.rs
@@ -15,7 +15,7 @@ use crate::util::clamp;
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, PrimitiveWithInput};
/// Color matrix operation types.
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
@@ -137,7 +137,7 @@ impl SetAttributes for FeColorMatrix {
}
}
-impl FilterEffect for FeColorMatrix {
+impl FilterRender for FeColorMatrix {
fn render(
&self,
node: &Node,
@@ -199,7 +199,9 @@ impl FilterEffect for FeColorMatrix {
},
})
}
+}
+impl FilterEffect for FeColorMatrix {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
diff --git a/src/filters/component_transfer.rs b/src/filters/component_transfer.rs
index 2d073ea7..a0a7186f 100644
--- a/src/filters/component_transfer.rs
+++ b/src/filters/component_transfer.rs
@@ -16,7 +16,7 @@ use crate::util::clamp;
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, PrimitiveWithInput};
/// The `feComponentTransfer` filter primitive.
pub struct FeComponentTransfer {
@@ -276,7 +276,7 @@ macro_rules! get_func_x_node {
};
}
-impl FilterEffect for FeComponentTransfer {
+impl FilterRender for FeComponentTransfer {
fn render(
&self,
node: &Node,
@@ -383,7 +383,9 @@ impl FilterEffect for FeComponentTransfer {
},
})
}
+}
+impl FilterEffect for FeComponentTransfer {
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
}
diff --git a/src/filters/composite.rs b/src/filters/composite.rs
index 3f219659..5e001960 100644
--- a/src/filters/composite.rs
+++ b/src/filters/composite.rs
@@ -10,7 +10,7 @@ use crate::parsers::{Parse, ParseValue};
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, Input, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, Input, PrimitiveWithInput};
/// Enumeration of the possible compositing operations.
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
@@ -70,7 +70,7 @@ impl SetAttributes for FeComposite {
}
}
-impl FilterEffect for FeComposite {
+impl FilterRender for FeComposite {
fn render(
&self,
node: &Node,
@@ -109,7 +109,9 @@ impl FilterEffect for FeComposite {
output: FilterOutput { surface, bounds },
})
}
+}
+impl FilterEffect for FeComposite {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
diff --git a/src/filters/convolve_matrix.rs b/src/filters/convolve_matrix.rs
index b333b01c..329254e7 100644
--- a/src/filters/convolve_matrix.rs
+++ b/src/filters/convolve_matrix.rs
@@ -20,7 +20,7 @@ use crate::util::clamp;
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, PrimitiveWithInput};
/// The `feConvolveMatrix` filter primitive.
pub struct FeConvolveMatrix {
@@ -119,7 +119,7 @@ impl SetAttributes for FeConvolveMatrix {
}
}
-impl FilterEffect for FeConvolveMatrix {
+impl FilterRender for FeConvolveMatrix {
fn render(
&self,
node: &Node,
@@ -280,7 +280,9 @@ impl FilterEffect for FeConvolveMatrix {
output: FilterOutput { surface, bounds },
})
}
+}
+impl FilterEffect for FeConvolveMatrix {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
diff --git a/src/filters/displacement_map.rs b/src/filters/displacement_map.rs
index ab7c38a5..95c8b884 100644
--- a/src/filters/displacement_map.rs
+++ b/src/filters/displacement_map.rs
@@ -11,7 +11,7 @@ use crate::surface_utils::{iterators::Pixels, shared_surface::ExclusiveImageSurf
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, Input, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, Input, PrimitiveWithInput};
/// Enumeration of the color channels the displacement map can source.
#[derive(Clone, Copy)]
@@ -67,7 +67,7 @@ impl SetAttributes for FeDisplacementMap {
}
}
-impl FilterEffect for FeDisplacementMap {
+impl FilterRender for FeDisplacementMap {
fn render(
&self,
node: &Node,
@@ -135,7 +135,9 @@ impl FilterEffect for FeDisplacementMap {
},
})
}
+}
+impl FilterEffect for FeDisplacementMap {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
// Performance TODO: this converts in back and forth to linear RGB while technically it's
diff --git a/src/filters/flood.rs b/src/filters/flood.rs
index 89c19bfd..1cbd1e77 100644
--- a/src/filters/flood.rs
+++ b/src/filters/flood.rs
@@ -5,7 +5,7 @@ use crate::node::{CascadedValues, Node};
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, Primitive};
+use super::{FilterEffect, FilterError, FilterRender, Primitive};
/// The `feFlood` filter primitive.
pub struct FeFlood {
@@ -28,7 +28,7 @@ impl SetAttributes for FeFlood {
}
}
-impl FilterEffect for FeFlood {
+impl FilterRender for FeFlood {
fn render(
&self,
node: &Node,
@@ -57,7 +57,9 @@ impl FilterEffect for FeFlood {
output: FilterOutput { surface, bounds },
})
}
+}
+impl FilterEffect for FeFlood {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
false
diff --git a/src/filters/gaussian_blur.rs b/src/filters/gaussian_blur.rs
index 8f296fe7..cdbee9e8 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::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, PrimitiveWithInput};
/// The maximum gaussian blur kernel size.
///
@@ -185,7 +185,7 @@ fn gaussian_blur(
)?)
}
-impl FilterEffect for FeGaussianBlur {
+impl FilterRender for FeGaussianBlur {
fn render(
&self,
node: &Node,
@@ -239,7 +239,9 @@ impl FilterEffect for FeGaussianBlur {
},
})
}
+}
+impl FilterEffect for FeGaussianBlur {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
diff --git a/src/filters/image.rs b/src/filters/image.rs
index 0bb82226..cce27e4c 100644
--- a/src/filters/image.rs
+++ b/src/filters/image.rs
@@ -13,7 +13,7 @@ use crate::viewbox::ViewBox;
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, Primitive};
+use super::{FilterEffect, FilterError, FilterRender, Primitive};
/// The `feImage` filter primitive.
pub struct FeImage {
@@ -118,7 +118,7 @@ impl SetAttributes for FeImage {
}
}
-impl FilterEffect for FeImage {
+impl FilterRender for FeImage {
fn render(
&self,
node: &Node,
@@ -153,7 +153,9 @@ impl FilterEffect for FeImage {
},
})
}
+}
+impl FilterEffect for FeImage {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
false
diff --git a/src/filters/lighting.rs b/src/filters/lighting.rs
index a7ccbf59..48708d70 100644
--- a/src/filters/lighting.rs
+++ b/src/filters/lighting.rs
@@ -12,7 +12,7 @@ use crate::drawing_ctx::DrawingCtx;
use crate::element::{Draw, Element, ElementResult, SetAttributes};
use crate::filters::{
context::{FilterContext, FilterOutput, FilterResult},
- FilterEffect, FilterError, PrimitiveWithInput,
+ FilterEffect, FilterError, FilterRender, PrimitiveWithInput,
};
use crate::node::{CascadedValues, Node, NodeBorrow};
use crate::parsers::{NonNegative, NumberOptionalNumber, ParseValue};
@@ -423,7 +423,7 @@ impl FeSpecularLighting {
// not want to make the Lighting trait public, so we use a macro
macro_rules! impl_lighting_filter {
($lighting_type:ty, $alpha_func:ident) => {
- impl FilterEffect for $lighting_type {
+ impl FilterRender for $lighting_type {
fn render(
&self,
node: &Node,
@@ -634,7 +634,9 @@ macro_rules! impl_lighting_filter {
output: FilterOutput { surface, bounds },
})
}
+ }
+ impl FilterEffect for $lighting_type {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
diff --git a/src/filters/merge.rs b/src/filters/merge.rs
index edf667a6..29e8ec3a 100644
--- a/src/filters/merge.rs
+++ b/src/filters/merge.rs
@@ -10,7 +10,7 @@ use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, Input, Primitive};
+use super::{FilterEffect, FilterError, FilterRender, Input, Primitive};
/// The `feMerge` filter primitive.
pub struct FeMerge {
@@ -75,7 +75,7 @@ impl FeMergeNode {
}
}
-impl FilterEffect for FeMerge {
+impl FilterRender for FeMerge {
fn render(
&self,
node: &Node,
@@ -124,7 +124,9 @@ impl FilterEffect for FeMerge {
output: FilterOutput { surface, bounds },
})
}
+}
+impl FilterEffect for FeMerge {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index 2cd66bd4..7f3d9017 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -29,8 +29,8 @@ use self::context::{FilterContext, FilterInput, FilterResult};
mod error;
use self::error::FilterError;
-/// A filter primitive interface.
-pub trait FilterEffect: SetAttributes + Draw {
+/// Trait to render filter effect primitives.
+pub trait FilterRender {
/// Renders this filter primitive.
///
/// If this filter primitive can't be rendered for whatever reason (for instance, a required
@@ -42,7 +42,10 @@ pub trait FilterEffect: SetAttributes + Draw {
acquired_nodes: &mut AcquiredNodes<'_>,
draw_ctx: &mut DrawingCtx,
) -> Result<FilterResult, FilterError>;
+}
+/// A filter primitive interface.
+pub trait FilterEffect: SetAttributes + Draw + FilterRender {
/// Returns `true` if this filter primitive is affected by the `color-interpolation-filters`
/// property.
///
diff --git a/src/filters/morphology.rs b/src/filters/morphology.rs
index e64c07b2..f60611d9 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::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, PrimitiveWithInput};
/// Enumeration of the possible morphology operations.
enum Operator {
@@ -64,7 +64,7 @@ impl SetAttributes for FeMorphology {
}
}
-impl FilterEffect for FeMorphology {
+impl FilterRender for FeMorphology {
fn render(
&self,
node: &Node,
@@ -140,7 +140,9 @@ impl FilterEffect for FeMorphology {
},
})
}
+}
+impl FilterEffect for FeMorphology {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
false
diff --git a/src/filters/offset.rs b/src/filters/offset.rs
index b4c2e89b..4fdc6c85 100644
--- a/src/filters/offset.rs
+++ b/src/filters/offset.rs
@@ -8,7 +8,7 @@ use crate::parsers::ParseValue;
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, PrimitiveWithInput};
/// The `feOffset` filter primitive.
pub struct FeOffset {
@@ -45,7 +45,7 @@ impl SetAttributes for FeOffset {
}
}
-impl FilterEffect for FeOffset {
+impl FilterRender for FeOffset {
fn render(
&self,
node: &Node,
@@ -69,7 +69,9 @@ impl FilterEffect for FeOffset {
output: FilterOutput { surface, bounds },
})
}
+}
+impl FilterEffect for FeOffset {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
false
diff --git a/src/filters/tile.rs b/src/filters/tile.rs
index 2e7466f8..98ac37e1 100644
--- a/src/filters/tile.rs
+++ b/src/filters/tile.rs
@@ -5,7 +5,7 @@ use crate::node::Node;
use crate::xml::Attributes;
use super::context::{FilterContext, FilterInput, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, FilterRender, PrimitiveWithInput};
/// The `feTile` filter primitive.
pub struct FeTile {
@@ -28,7 +28,7 @@ impl SetAttributes for FeTile {
}
}
-impl FilterEffect for FeTile {
+impl FilterRender for FeTile {
fn render(
&self,
node: &Node,
@@ -66,7 +66,9 @@ impl FilterEffect for FeTile {
output: FilterOutput { surface, bounds },
})
}
+}
+impl FilterEffect for FeTile {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
false
diff --git a/src/filters/turbulence.rs b/src/filters/turbulence.rs
index 583fc49a..99567cb9 100644
--- a/src/filters/turbulence.rs
+++ b/src/filters/turbulence.rs
@@ -15,7 +15,7 @@ use crate::util::clamp;
use crate::xml::Attributes;
use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::{FilterEffect, FilterError, Primitive};
+use super::{FilterEffect, FilterError, FilterRender, Primitive};
/// Enumeration of the tile stitching modes.
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
@@ -323,7 +323,7 @@ impl NoiseGenerator {
}
}
-impl FilterEffect for FeTurbulence {
+impl FilterRender for FeTurbulence {
fn render(
&self,
node: &Node,
@@ -403,7 +403,9 @@ impl FilterEffect for FeTurbulence {
},
})
}
+}
+impl FilterEffect for FeTurbulence {
#[inline]
fn is_affected_by_color_interpolation_filters(&self) -> bool {
true
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]