[librsvg: 1/5] Create the StrokePaint / FillPaint outside of the filters code




commit cb3427910bf0a2a5f8dfc4139346c05e0c018809
Author: Federico Mena Quintero <federico gnome org>
Date:   Fri Apr 9 11:54:36 2021 -0500

    Create the StrokePaint / FillPaint outside of the filters code
    
    This will let us avoid passing the ComputedValues of the node being
    filtered down to the filters code.

 src/drawing_ctx.rs | 14 ++++++++++++++
 src/filters/mod.rs | 15 +++------------
 2 files changed, 17 insertions(+), 12 deletions(-)
---
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index 5b4e3934..dc8cccc0 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -946,9 +946,23 @@ impl DrawingCtx {
 
                 match *filter_node.borrow_element() {
                     Element::Filter(_) => {
+                        let stroke_paint_source = values
+                            .stroke()
+                            .0
+                            .resolve(acquired_nodes, values.stroke_opacity().0, values.color().0)?
+                            .to_user_space(&node_bbox, self, values);
+
+                        let fill_paint_source = values
+                            .fill()
+                            .0
+                            .resolve(acquired_nodes, values.fill_opacity().0, values.color().0)?
+                            .to_user_space(&node_bbox, self, values);
+
                         return filters::render(
                             &filter_node,
                             values,
+                            stroke_paint_source,
+                            fill_paint_source,
                             child_surface,
                             acquired_nodes,
                             self,
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index 6e8d7b14..e18154e3 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -12,6 +12,7 @@ use crate::element::{Draw, ElementResult, SetAttributes};
 use crate::error::{ElementError, ParseError, RenderingError};
 use crate::length::*;
 use crate::node::{Node, NodeBorrow};
+use crate::paint_server::UserSpacePaintSource;
 use crate::parsers::{CustomIdent, Parse, ParseValue};
 use crate::properties::ComputedValues;
 use crate::property_defs::ColorInterpolationFilters;
@@ -224,6 +225,8 @@ impl Primitive {
 pub fn render(
     filter_node: &Node,
     computed_from_node_being_filtered: &ComputedValues,
+    stroke_paint_source: UserSpacePaintSource,
+    fill_paint_source: UserSpacePaintSource,
     source_surface: SharedImageSurface,
     acquired_nodes: &mut AcquiredNodes<'_>,
     draw_ctx: &mut DrawingCtx,
@@ -241,18 +244,6 @@ pub fn render(
 
     let values = computed_from_node_being_filtered;
 
-    let stroke_paint_source = values
-        .stroke()
-        .0
-        .resolve(acquired_nodes, values.stroke_opacity().0, values.color().0)?
-        .to_user_space(&node_bbox, draw_ctx, values);
-
-    let fill_paint_source = values
-        .fill()
-        .0
-        .resolve(acquired_nodes, values.fill_opacity().0, values.color().0)?
-        .to_user_space(&node_bbox, draw_ctx, values);
-
     let resolved_filter = {
         // This is in a temporary scope so we don't leave the coord_units pushed during
         // the execution of all the filter primitives.


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