[librsvg: 4/9] Compute the stroke_paint / fill_paint only once for each run of filters
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 4/9] Compute the stroke_paint / fill_paint only once for each run of filters
- Date: Tue, 27 Apr 2021 17:54:46 +0000 (UTC)
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]