summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2023-03-22 17:29:26 -0600
committerMarge Bot <marge-bot@gnome.org>2023-03-23 01:41:14 +0000
commitab73f6865c229317cae9ebee79582f4ba14d9cda (patch)
tree7a08c254bd7da6cd8feed33a96804210bc212612
parente9cd2617738273ad09af78638209706bd4b28cbc (diff)
downloadlibrsvg-ab73f6865c229317cae9ebee79582f4ba14d9cda.tar.gz
Use NormalizeValues throughout for PaintServer::to_user_space
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/816>
-rw-r--r--src/drawing_ctx.rs48
-rw-r--r--src/gradient.rs5
-rw-r--r--src/layout.rs4
-rw-r--r--src/paint_server.rs4
-rw-r--r--src/pattern.rs5
-rw-r--r--src/shapes.rs6
-rw-r--r--src/text.rs6
7 files changed, 39 insertions, 39 deletions
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index 30d5f4f2..81d6d7e5 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -716,7 +716,7 @@ impl DrawingCtx {
&mut self,
stacking_ctx: &StackingContext,
acquired_nodes: &mut AcquiredNodes<'_>,
- values: &ComputedValues,
+ _values: &ComputedValues,
clipping: bool,
clip_rect: Option<Rect>,
draw_fn: &mut dyn FnMut(
@@ -798,23 +798,25 @@ impl DrawingCtx {
let params = temporary_draw_ctx.get_view_params();
- let stroke_paint_source = Rc::new(
- filter
- .stroke_paint_source
- .to_user_space(&bbox.rect, &params, values),
- );
- let fill_paint_source = Rc::new(
- filter
- .fill_paint_source
- .to_user_space(&bbox.rect, &params, values),
- );
+ let stroke_paint_source =
+ Rc::new(filter.stroke_paint_source.to_user_space(
+ &bbox.rect,
+ &params,
+ &filter.normalize_values,
+ ));
+ let fill_paint_source =
+ Rc::new(filter.fill_paint_source.to_user_space(
+ &bbox.rect,
+ &params,
+ &filter.normalize_values,
+ ));
// Filter functions (like "blend()", not the <filter> element) require
// being resolved in userSpaceonUse units, since that is the default
// for primitive_units. So, get the corresponding NormalizeParams
// here and pass them down.
- let user_space_params = NormalizeParams::new(
- values,
+ let user_space_params = NormalizeParams::from_values(
+ &filter.normalize_values,
&params.with_units(CoordUnits::UserSpaceOnUse),
);
@@ -1264,23 +1266,15 @@ impl DrawingCtx {
clipping: bool,
) -> Result<BoundingBox, RenderingError> {
match &layer.kind {
- LayerKind::Shape(shape) => self.draw_shape(
- shape,
- &layer.stacking_ctx,
- acquired_nodes,
- values,
- clipping,
- ),
+ LayerKind::Shape(shape) => {
+ self.draw_shape(shape, &layer.stacking_ctx, acquired_nodes, values, clipping)
+ }
LayerKind::Text(text) => {
self.draw_text(text, &layer.stacking_ctx, acquired_nodes, values, clipping)
}
- LayerKind::Image(image) => self.draw_image(
- image,
- &layer.stacking_ctx,
- acquired_nodes,
- values,
- clipping,
- ),
+ LayerKind::Image(image) => {
+ self.draw_image(image, &layer.stacking_ctx, acquired_nodes, values, clipping)
+ }
}
}
diff --git a/src/gradient.rs b/src/gradient.rs
index 1e2d09c5..04420400 100644
--- a/src/gradient.rs
+++ b/src/gradient.rs
@@ -15,7 +15,6 @@ use crate::length::*;
use crate::node::{CascadedValues, Node, NodeBorrow};
use crate::paint_server::resolve_color;
use crate::parsers::{Parse, ParseValue};
-use crate::properties::ComputedValues;
use crate::rect::{rect_to_transform, Rect};
use crate::session::Session;
use crate::transform::{Transform, TransformAttribute};
@@ -656,12 +655,12 @@ impl ResolvedGradient {
&self,
object_bbox: &Option<Rect>,
current_params: &ViewParams,
- values: &ComputedValues,
+ values: &NormalizeValues,
) -> Option<UserSpaceGradient> {
let units = self.units.0;
let transform = rect_to_transform(object_bbox, units).ok()?;
let view_params = current_params.with_units(units);
- let params = NormalizeParams::new(values, &view_params);
+ let params = NormalizeParams::from_values(values, &view_params);
let gradient_transform = self.transform.to_transform();
let transform = transform.pre_transform(&gradient_transform).invert()?;
diff --git a/src/layout.rs b/src/layout.rs
index d867f837..434ae9a7 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -155,6 +155,7 @@ pub struct Filter {
pub current_color: RGBA,
pub stroke_paint_source: Arc<PaintSource>,
pub fill_paint_source: Arc<PaintSource>,
+ pub normalize_values: NormalizeValues,
}
fn get_filter(
@@ -200,11 +201,14 @@ fn get_filter_from_filter_list(
session,
);
+ let normalize_values = NormalizeValues::new(values);
+
Filter {
filter_list,
current_color,
stroke_paint_source,
fill_paint_source,
+ normalize_values,
}
}
diff --git a/src/paint_server.rs b/src/paint_server.rs
index 57abd61f..aa4a1768 100644
--- a/src/paint_server.rs
+++ b/src/paint_server.rs
@@ -9,10 +9,10 @@ use crate::drawing_ctx::ViewParams;
use crate::element::ElementData;
use crate::error::{AcquireError, NodeIdError, ParseError, ValueErrorKind};
use crate::gradient::{ResolvedGradient, UserSpaceGradient};
+use crate::length::NormalizeValues;
use crate::node::NodeBorrow;
use crate::parsers::Parse;
use crate::pattern::{ResolvedPattern, UserSpacePattern};
-use crate::properties::ComputedValues;
use crate::rect::Rect;
use crate::session::Session;
use crate::unit_interval::UnitInterval;
@@ -244,7 +244,7 @@ impl PaintSource {
&self,
object_bbox: &Option<Rect>,
current_params: &ViewParams,
- values: &ComputedValues,
+ values: &NormalizeValues,
) -> UserSpacePaintSource {
match *self {
PaintSource::None => UserSpacePaintSource::None,
diff --git a/src/pattern.rs b/src/pattern.rs
index 09df7af2..922df110 100644
--- a/src/pattern.rs
+++ b/src/pattern.rs
@@ -12,7 +12,6 @@ use crate::href::{is_href, set_href};
use crate::length::*;
use crate::node::{Node, NodeBorrow, WeakNode};
use crate::parsers::ParseValue;
-use crate::properties::ComputedValues;
use crate::rect::Rect;
use crate::session::Session;
use crate::transform::{Transform, TransformAttribute};
@@ -355,12 +354,12 @@ impl ResolvedPattern {
&self,
object_bbox: &Option<Rect>,
current_params: &ViewParams,
- values: &ComputedValues,
+ values: &NormalizeValues,
) -> Option<UserSpacePattern> {
let node_with_children = self.node_with_children()?;
let view_params = current_params.with_units(self.units.0);
- let params = NormalizeParams::new(values, &view_params);
+ let params = NormalizeParams::from_values(values, &view_params);
let rect = self.get_rect(&params);
diff --git a/src/shapes.rs b/src/shapes.rs
index 81571f39..73ea2fe4 100644
--- a/src/shapes.rs
+++ b/src/shapes.rs
@@ -118,8 +118,10 @@ fn draw_basic_shape(
let extents = draw_ctx.compute_path_extents(&shape_def.path)?;
- let stroke_paint = stroke_paint.to_user_space(&extents, &view_params, values);
- let fill_paint = fill_paint.to_user_space(&extents, &view_params, values);
+ let normalize_values = NormalizeValues::new(values);
+
+ let stroke_paint = stroke_paint.to_user_space(&extents, &view_params, &normalize_values);
+ let fill_paint = fill_paint.to_user_space(&extents, &view_params, &normalize_values);
let shape = Box::new(Shape {
path: shape_def.path,
diff --git a/src/text.rs b/src/text.rs
index 144138e8..e60ade78 100644
--- a/src/text.rs
+++ b/src/text.rs
@@ -837,15 +837,17 @@ impl ElementTrait for Text {
let mut text_spans = Vec::new();
for span in layout_spans {
+ let normalize_values = NormalizeValues::new(&span.values);
+
let stroke_paint = span.stroke_paint.to_user_space(
&text_bbox.rect,
&layout_context.view_params,
- &span.values,
+ &normalize_values,
);
let fill_paint = span.fill_paint.to_user_space(
&text_bbox.rect,
&layout_context.view_params,
- &span.values,
+ &normalize_values,
);
let text_span = TextSpan {