[librsvg: 7/9] Pass AcquiredNodes to FilterEffect::resolve()
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 7/9] Pass AcquiredNodes to FilterEffect::resolve()
- Date: Tue, 27 Apr 2021 17:54:46 +0000 (UTC)
commit 17e54e7aef8a45d0f1439e6ff59884815cd3a90a
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Apr 21 19:07:32 2021 -0500
Pass AcquiredNodes to FilterEffect::resolve()
feImage will need it.
src/filter.rs | 2 +-
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 | 16 ++++++++++++----
src/filters/merge.rs | 9 +++++++--
src/filters/mod.rs | 9 +++++++--
src/filters/morphology.rs | 6 +++++-
src/filters/offset.rs | 6 +++++-
src/filters/tile.rs | 6 +++++-
src/filters/turbulence.rs | 6 +++++-
17 files changed, 92 insertions(+), 22 deletions(-)
---
diff --git a/src/filter.rs b/src/filter.rs
index 58fe87aa..3a9d96f3 100644
--- a/src/filter.rs
+++ b/src/filter.rs
@@ -157,7 +157,7 @@ fn filter_spec_from_filter_node(
);
Err(FilterResolveError::ChildNodeInError)
} else {
- extract_filter_from_filter_node(node, draw_ctx)
+ extract_filter_from_filter_node(node, acquired_nodes, draw_ctx)
}
}
diff --git a/src/filters/blend.rs b/src/filters/blend.rs
index 9ad5253f..9169265c 100644
--- a/src/filters/blend.rs
+++ b/src/filters/blend.rs
@@ -111,7 +111,11 @@ impl Blend {
}
impl FilterEffect for FeBlend {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/color_matrix.rs b/src/filters/color_matrix.rs
index 556a0ff5..a39e4f38 100644
--- a/src/filters/color_matrix.rs
+++ b/src/filters/color_matrix.rs
@@ -220,7 +220,11 @@ impl ColorMatrix {
}
impl FilterEffect for FeColorMatrix {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/component_transfer.rs b/src/filters/component_transfer.rs
index de115021..11259d1e 100644
--- a/src/filters/component_transfer.rs
+++ b/src/filters/component_transfer.rs
@@ -372,7 +372,11 @@ impl ComponentTransfer {
}
impl FilterEffect for FeComponentTransfer {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/composite.rs b/src/filters/composite.rs
index 9d6036fa..7ffffe0d 100644
--- a/src/filters/composite.rs
+++ b/src/filters/composite.rs
@@ -121,7 +121,11 @@ impl Composite {
}
impl FilterEffect for FeComposite {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/convolve_matrix.rs b/src/filters/convolve_matrix.rs
index b04f4f3e..3b802e2c 100644
--- a/src/filters/convolve_matrix.rs
+++ b/src/filters/convolve_matrix.rs
@@ -305,7 +305,11 @@ impl ConvolveMatrix {
}
impl FilterEffect for FeConvolveMatrix {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/displacement_map.rs b/src/filters/displacement_map.rs
index eaa3bf37..606c8e90 100644
--- a/src/filters/displacement_map.rs
+++ b/src/filters/displacement_map.rs
@@ -155,7 +155,11 @@ impl DisplacementMap {
}
impl FilterEffect for FeDisplacementMap {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/flood.rs b/src/filters/flood.rs
index 6789384e..8a305be9 100644
--- a/src/filters/flood.rs
+++ b/src/filters/flood.rs
@@ -46,7 +46,11 @@ impl Flood {
}
impl FilterEffect for FeFlood {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/gaussian_blur.rs b/src/filters/gaussian_blur.rs
index 576d460e..692920ed 100644
--- a/src/filters/gaussian_blur.rs
+++ b/src/filters/gaussian_blur.rs
@@ -247,7 +247,11 @@ impl GaussianBlur {
}
impl FilterEffect for FeGaussianBlur {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
diff --git a/src/filters/image.rs b/src/filters/image.rs
index 63e04afa..9c677e24 100644
--- a/src/filters/image.rs
+++ b/src/filters/image.rs
@@ -155,7 +155,11 @@ impl Image {
}
impl FilterEffect for FeImage {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let feimage_values = cascaded.get().clone();
diff --git a/src/filters/lighting.rs b/src/filters/lighting.rs
index 7477870d..26fafca8 100644
--- a/src/filters/lighting.rs
+++ b/src/filters/lighting.rs
@@ -650,7 +650,11 @@ macro_rules! impl_lighting_filter {
}
impl FilterEffect for $lighting_type {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let mut sources = node.children().rev().filter(|c| {
c.is_element()
&& matches!(
@@ -990,10 +994,12 @@ mod tests {
</svg>
"#,
);
+ let mut acquired_nodes = AcquiredNodes::new(&document);
let node = document.lookup_internal_node("diffuse_distant").unwrap();
let lighting = borrow_element_as!(node, FeDiffuseLighting);
- let ResolvedPrimitive { params, .. } = lighting.resolve(&node).unwrap();
+ let ResolvedPrimitive { params, .. } =
+ lighting.resolve(&mut acquired_nodes, &node).unwrap();
let diffuse_lighting = match params {
PrimitiveParams::DiffuseLighting(l) => l,
_ => unreachable!(),
@@ -1008,7 +1014,8 @@ mod tests {
let node = document.lookup_internal_node("specular_point").unwrap();
let lighting = borrow_element_as!(node, FeSpecularLighting);
- let ResolvedPrimitive { params, .. } = lighting.resolve(&node).unwrap();
+ let ResolvedPrimitive { params, .. } =
+ lighting.resolve(&mut acquired_nodes, &node).unwrap();
let specular_lighting = match params {
PrimitiveParams::SpecularLighting(l) => l,
_ => unreachable!(),
@@ -1024,7 +1031,8 @@ mod tests {
let node = document.lookup_internal_node("diffuse_spot").unwrap();
let lighting = borrow_element_as!(node, FeDiffuseLighting);
- let ResolvedPrimitive { params, .. } = lighting.resolve(&node).unwrap();
+ let ResolvedPrimitive { params, .. } =
+ lighting.resolve(&mut acquired_nodes, &node).unwrap();
let diffuse_lighting = match params {
PrimitiveParams::DiffuseLighting(l) => l,
_ => unreachable!(),
diff --git a/src/filters/merge.rs b/src/filters/merge.rs
index 934e51d1..5458f0d6 100644
--- a/src/filters/merge.rs
+++ b/src/filters/merge.rs
@@ -142,7 +142,11 @@ impl Merge {
}
impl FilterEffect for FeMerge {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
Ok(ResolvedPrimitive {
primitive: self.base.clone(),
params: PrimitiveParams::Merge(Merge {
@@ -196,10 +200,11 @@ mod tests {
</svg>
"#,
);
+ let mut acquired_nodes = AcquiredNodes::new(&document);
let node = document.lookup_internal_node("merge").unwrap();
let merge = borrow_element_as!(node, FeMerge);
- let ResolvedPrimitive { params, .. } = merge.resolve(&node).unwrap();
+ let ResolvedPrimitive { params, .. } = merge.resolve(&mut acquired_nodes, &node).unwrap();
let params = match params {
PrimitiveParams::Merge(m) => m,
_ => unreachable!(),
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index acf0ab68..3141ff59 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -34,7 +34,11 @@ pub use self::error::FilterResolveError;
/// A filter primitive interface.
pub trait FilterEffect: SetAttributes + Draw {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError>;
+ fn resolve(
+ &self,
+ acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError>;
}
// Filter Effects do not need to draw themselves
@@ -248,6 +252,7 @@ impl Primitive {
pub fn extract_filter_from_filter_node(
filter_node: &Node,
+ acquired_nodes: &mut AcquiredNodes<'_>,
draw_ctx: &DrawingCtx,
) -> Result<FilterSpec, FilterResolveError> {
let filter_node = &*filter_node;
@@ -290,7 +295,7 @@ pub fn extract_filter_from_filter_node(
let primitive_name = format!("{}", primitive_node);
effect
- .resolve(&primitive_node)
+ .resolve(acquired_nodes, &primitive_node)
.map_err(|e| {
rsvg_log!(
"(filter primitive {} returned an error: {})",
diff --git a/src/filters/morphology.rs b/src/filters/morphology.rs
index f1cd515b..cfdedd01 100644
--- a/src/filters/morphology.rs
+++ b/src/filters/morphology.rs
@@ -161,7 +161,11 @@ impl Morphology {
}
impl FilterEffect for FeMorphology {
- fn resolve(&self, _node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ _node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
Ok(ResolvedPrimitive {
primitive: self.base.clone(),
params: PrimitiveParams::Morphology(self.params.clone()),
diff --git a/src/filters/offset.rs b/src/filters/offset.rs
index 1c968e58..cb13e6f7 100644
--- a/src/filters/offset.rs
+++ b/src/filters/offset.rs
@@ -83,7 +83,11 @@ impl Offset {
}
impl FilterEffect for FeOffset {
- fn resolve(&self, _node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ _node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
Ok(ResolvedPrimitive {
primitive: self.base.clone(),
params: PrimitiveParams::Offset(self.params.clone()),
diff --git a/src/filters/tile.rs b/src/filters/tile.rs
index cd7f3408..c7e9647b 100644
--- a/src/filters/tile.rs
+++ b/src/filters/tile.rs
@@ -80,7 +80,11 @@ impl Tile {
}
impl FilterEffect for FeTile {
- fn resolve(&self, _node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ _node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
Ok(ResolvedPrimitive {
primitive: self.base.clone(),
params: PrimitiveParams::Tile(self.params.clone()),
diff --git a/src/filters/turbulence.rs b/src/filters/turbulence.rs
index 913324f6..158b83ee 100644
--- a/src/filters/turbulence.rs
+++ b/src/filters/turbulence.rs
@@ -417,7 +417,11 @@ impl Turbulence {
}
impl FilterEffect for FeTurbulence {
- fn resolve(&self, node: &Node) -> Result<ResolvedPrimitive, FilterResolveError> {
+ fn resolve(
+ &self,
+ _acquired_nodes: &mut AcquiredNodes<'_>,
+ node: &Node,
+ ) -> Result<ResolvedPrimitive, FilterResolveError> {
let cascaded = CascadedValues::new_from_node(node);
let values = cascaded.get();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]