[librsvg: 11/15] Primitives now take a BoundsBuilder in their render(), not a ResolvedPrimitive




commit e233d444a4bd6cdc90c520ea0126842c84a623f0
Author: Federico Mena Quintero <federico gnome org>
Date:   Thu Apr 8 16:39:43 2021 -0500

    Primitives now take a BoundsBuilder in their render(), not a ResolvedPrimitive

 src/filters/blend.rs              |  8 ++++----
 src/filters/color_matrix.rs       | 10 ++++------
 src/filters/component_transfer.rs | 10 ++++------
 src/filters/composite.rs          |  8 ++++----
 src/filters/convolve_matrix.rs    | 10 ++++------
 src/filters/displacement_map.rs   |  8 ++++----
 src/filters/flood.rs              |  7 ++++---
 src/filters/gaussian_blur.rs      | 10 ++++------
 src/filters/image.rs              |  6 +++---
 src/filters/lighting.rs           | 10 ++++------
 src/filters/merge.rs              | 10 +++++-----
 src/filters/mod.rs                | 34 ++++++++++++++++++----------------
 src/filters/morphology.rs         | 10 ++++------
 src/filters/offset.rs             | 10 ++++------
 src/filters/tile.rs               |  7 ++++---
 src/filters/turbulence.rs         |  7 ++++---
 16 files changed, 78 insertions(+), 87 deletions(-)
---
diff --git a/src/filters/blend.rs b/src/filters/blend.rs
index 011a24e8..63dadcd0 100644
--- a/src/filters/blend.rs
+++ b/src/filters/blend.rs
@@ -10,8 +10,9 @@ use crate::parsers::{Parse, ParseValue};
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// Enumeration of the possible blending modes.
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
@@ -71,7 +72,7 @@ impl SetAttributes for FeBlend {
 impl Blend {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -88,8 +89,7 @@ impl Blend {
             &self.in2,
             self.color_interpolation_filters,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
+        let bounds = bounds_builder
             .add_input(&input_1)
             .add_input(&input_2)
             .into_irect(ctx);
diff --git a/src/filters/color_matrix.rs b/src/filters/color_matrix.rs
index 73f24940..73e9c939 100644
--- a/src/filters/color_matrix.rs
+++ b/src/filters/color_matrix.rs
@@ -15,8 +15,9 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// Color matrix operation types.
 #[derive(Debug, Clone, Copy, Eq, PartialEq)]
@@ -151,7 +152,7 @@ impl SetAttributes for FeColorMatrix {
 impl ColorMatrix {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -162,10 +163,7 @@ impl ColorMatrix {
             &self.in1,
             self.color_interpolation_filters,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
-            .add_input(&input_1)
-            .into_irect(ctx);
+        let bounds = bounds_builder.add_input(&input_1).into_irect(ctx);
 
         let mut surface = ExclusiveImageSurface::new(
             ctx.source_graphic().width(),
diff --git a/src/filters/component_transfer.rs b/src/filters/component_transfer.rs
index 4ae3767b..49448723 100644
--- a/src/filters/component_transfer.rs
+++ b/src/filters/component_transfer.rs
@@ -16,8 +16,9 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// The `feComponentTransfer` filter primitive.
 #[derive(Default)]
@@ -288,7 +289,7 @@ macro_rules! get_func_x_node {
 impl ComponentTransfer {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -299,10 +300,7 @@ impl ComponentTransfer {
             &self.in1,
             self.color_interpolation_filters,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
-            .add_input(&input_1)
-            .into_irect(ctx);
+        let bounds = bounds_builder.add_input(&input_1).into_irect(ctx);
 
         // Create the output surface.
         let mut surface = ExclusiveImageSurface::new(
diff --git a/src/filters/composite.rs b/src/filters/composite.rs
index da5d3733..082f98ac 100644
--- a/src/filters/composite.rs
+++ b/src/filters/composite.rs
@@ -10,8 +10,9 @@ use crate::parsers::{Parse, ParseValue};
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// Enumeration of the possible compositing operations.
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
@@ -70,7 +71,7 @@ impl SetAttributes for FeComposite {
 impl Composite {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -87,8 +88,7 @@ impl Composite {
             &self.in2,
             self.color_interpolation_filters,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
+        let bounds = bounds_builder
             .add_input(&input_1)
             .add_input(&input_2)
             .into_irect(ctx);
diff --git a/src/filters/convolve_matrix.rs b/src/filters/convolve_matrix.rs
index 97fcaa0d..168fd993 100644
--- a/src/filters/convolve_matrix.rs
+++ b/src/filters/convolve_matrix.rs
@@ -20,8 +20,9 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// The `feConvolveMatrix` filter primitive.
 #[derive(Default)]
@@ -136,7 +137,7 @@ impl SetAttributes for FeConvolveMatrix {
 impl ConvolveMatrix {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -149,10 +150,7 @@ impl ConvolveMatrix {
             &self.in1,
             self.color_interpolation_filters,
         )?;
-        let mut bounds = primitive
-            .get_bounds(ctx)
-            .add_input(&input_1)
-            .into_irect(ctx);
+        let mut bounds = bounds_builder.add_input(&input_1).into_irect(ctx);
         let original_bounds = bounds;
 
         let target_x = match self.target_x {
diff --git a/src/filters/displacement_map.rs b/src/filters/displacement_map.rs
index 8c7ae8b7..31a0fb3b 100644
--- a/src/filters/displacement_map.rs
+++ b/src/filters/displacement_map.rs
@@ -11,8 +11,9 @@ use crate::property_defs::ColorInterpolationFilters;
 use crate::surface_utils::{iterators::Pixels, shared_surface::ExclusiveImageSurface};
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// Enumeration of the color channels the displacement map can source.
 #[derive(Clone, Copy)]
@@ -69,7 +70,7 @@ impl SetAttributes for FeDisplacementMap {
 impl DisplacementMap {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -92,8 +93,7 @@ impl DisplacementMap {
             &self.in2,
             self.color_interpolation_filters,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
+        let bounds = bounds_builder
             .add_input(&input_1)
             .add_input(&displacement_input)
             .into_irect(ctx);
diff --git a/src/filters/flood.rs b/src/filters/flood.rs
index 0a4452dc..9371dcae 100644
--- a/src/filters/flood.rs
+++ b/src/filters/flood.rs
@@ -5,8 +5,9 @@ use crate::node::{CascadedValues, Node};
 use crate::paint_server::resolve_color;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Primitive, PrimitiveParams};
 
 /// The `feFlood` filter primitive.
 #[derive(Default)]
@@ -28,12 +29,12 @@ impl SetAttributes for FeFlood {
 impl Flood {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         _acquired_nodes: &mut AcquiredNodes<'_>,
         _draw_ctx: &mut DrawingCtx,
     ) -> Result<FilterOutput, FilterError> {
-        let bounds = primitive.get_bounds(ctx).into_irect(ctx);
+        let bounds = bounds_builder.into_irect(ctx);
 
         let surface = ctx.source_graphic().flood(bounds, self.color)?;
 
diff --git a/src/filters/gaussian_blur.rs b/src/filters/gaussian_blur.rs
index 901da35e..3699990d 100644
--- a/src/filters/gaussian_blur.rs
+++ b/src/filters/gaussian_blur.rs
@@ -17,8 +17,9 @@ use crate::surface_utils::{
 };
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// The maximum gaussian blur kernel size.
 ///
@@ -187,7 +188,7 @@ fn gaussian_blur(
 impl GaussianBlur {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -198,10 +199,7 @@ impl GaussianBlur {
             &self.in1,
             self.color_interpolation_filters,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
-            .add_input(&input_1)
-            .into_irect(ctx);
+        let bounds = bounds_builder.add_input(&input_1).into_irect(ctx);
 
         let (std_x, std_y) = self.std_deviation;
         let (std_x, std_y) = ctx.paffine().transform_distance(std_x, std_y);
diff --git a/src/filters/image.rs b/src/filters/image.rs
index 55a25353..d68caa54 100644
--- a/src/filters/image.rs
+++ b/src/filters/image.rs
@@ -13,8 +13,9 @@ use crate::surface_utils::shared_surface::SharedImageSurface;
 use crate::viewbox::ViewBox;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Primitive, PrimitiveParams};
 
 /// The `feImage` filter primitive.
 #[derive(Default)]
@@ -129,12 +130,11 @@ impl SetAttributes for FeImage {
 impl Image {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
     ) -> Result<FilterOutput, FilterError> {
-        let bounds_builder = primitive.get_bounds(ctx);
         let (bounds, unclipped_bounds) = bounds_builder.into_rect(ctx);
 
         let href = self.params.href.as_ref().ok_or(FilterError::InvalidInput)?;
diff --git a/src/filters/lighting.rs b/src/filters/lighting.rs
index 36ea3037..ea192705 100644
--- a/src/filters/lighting.rs
+++ b/src/filters/lighting.rs
@@ -11,8 +11,9 @@ use crate::document::AcquiredNodes;
 use crate::drawing_ctx::DrawingCtx;
 use crate::element::{Draw, Element, ElementResult, SetAttributes};
 use crate::filters::{
+    bounds::BoundsBuilder,
     context::{FilterContext, FilterOutput},
-    FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive,
+    FilterEffect, FilterError, Input, Primitive, PrimitiveParams,
 };
 use crate::node::{CascadedValues, Node, NodeBorrow};
 use crate::paint_server::resolve_color;
@@ -437,7 +438,7 @@ macro_rules! impl_lighting_filter {
         impl $params_name {
             pub fn render(
                 &self,
-                primitive: &ResolvedPrimitive,
+                bounds_builder: BoundsBuilder,
                 ctx: &FilterContext,
                 acquired_nodes: &mut AcquiredNodes<'_>,
                 draw_ctx: &mut DrawingCtx,
@@ -448,10 +449,7 @@ macro_rules! impl_lighting_filter {
                     &self.params.in1,
                     self.light.color_interpolation_filters,
                 )?;
-                let mut bounds = primitive
-                    .get_bounds(ctx)
-                    .add_input(&input_1)
-                    .into_irect(ctx);
+                let mut bounds = bounds_builder.add_input(&input_1).into_irect(ctx);
                 let original_bounds = bounds;
 
                 let scale = self
diff --git a/src/filters/merge.rs b/src/filters/merge.rs
index 3f494b7d..3dd679c0 100644
--- a/src/filters/merge.rs
+++ b/src/filters/merge.rs
@@ -10,8 +10,9 @@ use crate::rect::IRect;
 use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// The `feMerge` filter primitive.
 pub struct FeMerge {
@@ -97,13 +98,12 @@ impl MergeNode {
 impl Merge {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        mut bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
     ) -> 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 {
             let input = ctx.get_input(
                 acquired_nodes,
@@ -111,10 +111,10 @@ impl Merge {
                 &merge_node.in1,
                 merge_node.color_interpolation_filters,
             )?;
-            bounds = bounds.add_input(&input);
+            bounds_builder = bounds_builder.add_input(&input);
         }
 
-        let bounds = bounds.into_irect(ctx);
+        let bounds = bounds_builder.into_irect(ctx);
 
         // Now merge them all.
         let mut output_surface = None;
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index d7ed3e35..a06258d5 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -353,23 +353,25 @@ fn render_primitive(
 ) -> Result<FilterOutput, FilterError> {
     use PrimitiveParams::*;
 
+    let bounds_builder = primitive.get_bounds(ctx);
+
     match params {
-        Blend(p)             => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        ColorMatrix(p)       => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        ComponentTransfer(p) => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Composite(p)         => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        ConvolveMatrix(p)    => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        DiffuseLighting(p)   => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        DisplacementMap(p)   => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Flood(p)             => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        GaussianBlur(p)      => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Image(p)             => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Merge(p)             => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Morphology(p)        => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Offset(p)            => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        SpecularLighting(p)  => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Tile(p)              => p.render(primitive, ctx, acquired_nodes, draw_ctx),
-        Turbulence(p)        => p.render(primitive, ctx, acquired_nodes, draw_ctx),
+        Blend(p)             => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        ColorMatrix(p)       => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        ComponentTransfer(p) => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Composite(p)         => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        ConvolveMatrix(p)    => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        DiffuseLighting(p)   => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        DisplacementMap(p)   => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Flood(p)             => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        GaussianBlur(p)      => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Image(p)             => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Merge(p)             => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Morphology(p)        => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Offset(p)            => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        SpecularLighting(p)  => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Tile(p)              => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
+        Turbulence(p)        => p.render(bounds_builder, ctx, acquired_nodes, draw_ctx),
     }
 }
 
diff --git a/src/filters/morphology.rs b/src/filters/morphology.rs
index 42feb46e..295e6696 100644
--- a/src/filters/morphology.rs
+++ b/src/filters/morphology.rs
@@ -18,8 +18,9 @@ use crate::surface_utils::{
 };
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// Enumeration of the possible morphology operations.
 #[derive(Clone)]
@@ -67,7 +68,7 @@ impl SetAttributes for FeMorphology {
 impl Morphology {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -86,10 +87,7 @@ impl Morphology {
             &self.in1,
             ColorInterpolationFilters::Auto,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
-            .add_input(&input_1)
-            .into_irect(ctx);
+        let bounds = bounds_builder.add_input(&input_1).into_irect(ctx);
 
         let (rx, ry) = self.radius;
         let (rx, ry) = ctx.paffine().transform_distance(rx, ry);
diff --git a/src/filters/offset.rs b/src/filters/offset.rs
index 77be049e..98c11a72 100644
--- a/src/filters/offset.rs
+++ b/src/filters/offset.rs
@@ -8,8 +8,9 @@ use crate::parsers::ParseValue;
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// The `feOffset` filter primitive.
 #[derive(Default)]
@@ -45,7 +46,7 @@ impl SetAttributes for FeOffset {
 impl Offset {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -63,10 +64,7 @@ impl Offset {
             &self.in1,
             ColorInterpolationFilters::Auto,
         )?;
-        let bounds = primitive
-            .get_bounds(ctx)
-            .add_input(&input_1)
-            .into_irect(ctx);
+        let bounds = bounds_builder.add_input(&input_1).into_irect(ctx);
 
         let (dx, dy) = ctx.paffine().transform_distance(self.dx, self.dy);
 
diff --git a/src/filters/tile.rs b/src/filters/tile.rs
index 669e0399..1683080d 100644
--- a/src/filters/tile.rs
+++ b/src/filters/tile.rs
@@ -5,8 +5,9 @@ use crate::node::Node;
 use crate::property_defs::ColorInterpolationFilters;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterInput, FilterOutput};
-use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Input, Primitive, PrimitiveParams};
 
 /// The `feTile` filter primitive.
 #[derive(Default)]
@@ -31,7 +32,7 @@ impl SetAttributes for FeTile {
 impl Tile {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         acquired_nodes: &mut AcquiredNodes<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -51,7 +52,7 @@ impl Tile {
         )?;
 
         // feTile doesn't consider its inputs in the filter primitive subregion calculation.
-        let bounds = primitive.get_bounds(ctx).into_irect(ctx);
+        let bounds = bounds_builder.into_irect(ctx);
 
         let surface = match input_1 {
             FilterInput::StandardInput(input_surface) => input_surface,
diff --git a/src/filters/turbulence.rs b/src/filters/turbulence.rs
index ff0b483f..f1bde0f6 100644
--- a/src/filters/turbulence.rs
+++ b/src/filters/turbulence.rs
@@ -15,8 +15,9 @@ use crate::surface_utils::{
 use crate::util::clamp;
 use crate::xml::Attributes;
 
+use super::bounds::BoundsBuilder;
 use super::context::{FilterContext, FilterOutput};
-use super::{FilterEffect, FilterError, Primitive, PrimitiveParams, ResolvedPrimitive};
+use super::{FilterEffect, FilterError, Primitive, PrimitiveParams};
 
 /// Enumeration of the tile stitching modes.
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
@@ -341,12 +342,12 @@ impl NoiseGenerator {
 impl Turbulence {
     pub fn render(
         &self,
-        primitive: &ResolvedPrimitive,
+        bounds_builder: BoundsBuilder,
         ctx: &FilterContext,
         _acquired_nodes: &mut AcquiredNodes<'_>,
         _draw_ctx: &mut DrawingCtx,
     ) -> Result<FilterOutput, FilterError> {
-        let bounds = primitive.get_bounds(ctx).into_irect(ctx);
+        let bounds = bounds_builder.into_irect(ctx);
 
         let affine = ctx.paffine().invert().unwrap();
 


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