[librsvg: 1/5] Create the StrokePaint / FillPaint outside of the filters code
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/5] Create the StrokePaint / FillPaint outside of the filters code
- Date: Fri, 9 Apr 2021 23:24:50 +0000 (UTC)
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]