[librsvg: 4/9] Compute the stroke_paint / fill_paint only once for each run of filters




commit c97bac2a8794675ab951b3c1fde18b3fbff4b6d0
Author: Federico Mena Quintero <federico gnome org>
Date:   Mon Apr 19 14:19:22 2021 -0500

    Compute the stroke_paint / fill_paint only once for each run of filters

 src/drawing_ctx.rs | 46 ++++++++++++++++++++++------------------------
 1 file changed, 22 insertions(+), 24 deletions(-)
---
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index e5382372..bed6aafc 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -895,6 +895,22 @@ impl DrawingCtx {
         values: &ComputedValues,
         node_bbox: BoundingBox,
     ) -> Result<cairo::Surface, RenderingError> {
+        let stroke_paint_source = Rc::new(
+            values
+                .stroke()
+                .0
+                .resolve(acquired_nodes, values.stroke_opacity().0, values.color().0)?
+                .to_user_space(&node_bbox, self, values),
+        );
+
+        let fill_paint_source = Rc::new(
+            values
+                .fill()
+                .0
+                .resolve(acquired_nodes, values.fill_opacity().0, values.color().0)?
+                .to_user_space(&node_bbox, self, values),
+        );
+
         let surface = match filters {
             Filter::None => surface_to_filter,
             Filter::List(filter_list) => {
@@ -906,8 +922,9 @@ impl DrawingCtx {
                             self.run_filter(
                                 acquired_nodes,
                                 &f,
+                                stroke_paint_source.clone(),
+                                fill_paint_source.clone(),
                                 &node_name,
-                                values,
                                 surface,
                                 node_bbox,
                             )
@@ -929,8 +946,9 @@ impl DrawingCtx {
         &mut self,
         acquired_nodes: &mut AcquiredNodes<'_>,
         filter_uri: &NodeId,
+        stroke_paint_source: Rc<UserSpacePaintSource>,
+        fill_paint_source: Rc<UserSpacePaintSource>,
         node_name: &str,
-        values: &ComputedValues,
         surface_to_filter: SharedImageSurface,
         node_bbox: BoundingBox,
     ) -> Result<SharedImageSurface, RenderingError> {
@@ -949,30 +967,10 @@ impl DrawingCtx {
                             return Ok(surface_to_filter);
                         }
 
-                        let stroke_paint_source = Rc::new(
-                            values
-                                .stroke()
-                                .0
-                                .resolve(
-                                    acquired_nodes,
-                                    values.stroke_opacity().0,
-                                    values.color().0,
-                                )?
-                                .to_user_space(&node_bbox, self, values),
-                        );
-
-                        let fill_paint_source = Rc::new(
-                            values
-                                .fill()
-                                .0
-                                .resolve(acquired_nodes, values.fill_opacity().0, values.color().0)?
-                                .to_user_space(&node_bbox, self, values),
-                        );
-
                         return filters::render(
                             &node,
-                            stroke_paint_source.clone(),
-                            fill_paint_source.clone(),
+                            stroke_paint_source,
+                            fill_paint_source,
                             surface_to_filter,
                             acquired_nodes,
                             self,


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