[librsvg: 3/9] Do not consume the stroke_paint / fill_paint in filters::render()
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 3/9] Do not consume the stroke_paint / fill_paint in filters::render()
- Date: Tue, 27 Apr 2021 17:54:45 +0000 (UTC)
commit 309a29df049780959bca9efd85c7113e9999456f
Author: Federico Mena Quintero <federico gnome org>
Date: Mon Apr 19 14:14:41 2021 -0500
Do not consume the stroke_paint / fill_paint in filters::render()
We pass a Rc<UserSpacePaintSource> for both arguments now. This could
be done by passing &UserSpacePaintSource and keeping lifetimes in
FilterContext, but maybe Rc is easier for now?
src/drawing_ctx.rs | 34 +++++++++++++++++++++-------------
src/filters/context.rs | 9 +++++----
src/filters/mod.rs | 5 +++--
3 files changed, 29 insertions(+), 19 deletions(-)
---
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index d4a61254..e5382372 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -949,22 +949,30 @@ impl DrawingCtx {
return Ok(surface_to_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);
+ 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,
- fill_paint_source,
+ stroke_paint_source.clone(),
+ fill_paint_source.clone(),
surface_to_filter,
acquired_nodes,
self,
diff --git a/src/filters/context.rs b/src/filters/context.rs
index b37282c9..a391f1a8 100644
--- a/src/filters/context.rs
+++ b/src/filters/context.rs
@@ -1,5 +1,6 @@
use once_cell::sync::OnceCell;
use std::collections::HashMap;
+use std::rc::Rc;
use crate::bbox::BoundingBox;
use crate::coord_units::CoordUnits;
@@ -48,9 +49,9 @@ pub enum FilterInput {
/// The filter rendering context.
pub struct FilterContext {
/// Paint source for primitives which have an input value equal to `StrokePaint`.
- stroke_paint: UserSpacePaintSource,
+ stroke_paint: Rc<UserSpacePaintSource>,
/// Paint source for primitives which have an input value equal to `FillPaint`.
- fill_paint: UserSpacePaintSource,
+ fill_paint: Rc<UserSpacePaintSource>,
/// The source graphic surface.
source_surface: SharedImageSurface,
@@ -100,8 +101,8 @@ impl FilterContext {
/// Creates a new `FilterContext`.
pub fn new(
filter: &UserSpaceFilter,
- stroke_paint: UserSpacePaintSource,
- fill_paint: UserSpacePaintSource,
+ stroke_paint: Rc<UserSpacePaintSource>,
+ fill_paint: Rc<UserSpacePaintSource>,
source_surface: &SharedImageSurface,
draw_transform: Transform,
node_bbox: BoundingBox,
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index ed2961aa..57f7c9a2 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -2,6 +2,7 @@
use cssparser::{BasicParseError, Parser};
use markup5ever::{expanded_name, local_name, namespace_url, ns};
+use std::rc::Rc;
use std::time::Instant;
use crate::bbox::BoundingBox;
@@ -316,8 +317,8 @@ pub fn extract_filter_from_filter_node(
/// Applies a filter and returns the resulting surface.
pub fn render(
filter_node: &Node,
- stroke_paint_source: UserSpacePaintSource,
- fill_paint_source: UserSpacePaintSource,
+ stroke_paint_source: Rc<UserSpacePaintSource>,
+ fill_paint_source: Rc<UserSpacePaintSource>,
source_surface: SharedImageSurface,
acquired_nodes: &mut AcquiredNodes<'_>,
draw_ctx: &mut DrawingCtx,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]