[librsvg: 59/90] Only use an untransformed affine if the cr_stack is empty
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 59/90] Only use an untransformed affine if the cr_stack is empty
- Date: Tue, 26 Mar 2019 19:17:01 +0000 (UTC)
commit dff605dc80766e16dc2ebb125691ecd17c6c82a8
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Mar 20 11:24:19 2019 -0600
Only use an untransformed affine if the cr_stack is empty
I.e. only if the Cairo contexts are not nested yet, like in the old
code.
587 pass, 179 fail
rsvg_internals/src/drawing_ctx.rs | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 2e9824ba..c725a782 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -471,15 +471,24 @@ impl DrawingCtx {
)
};
- let initial_inverse = dc.initial_affine.try_invert().unwrap();
- let untransformed = cairo::Matrix::multiply(&affine, &initial_inverse);
- cr.set_matrix(untransformed);
+ let stack_was_empty = dc.cr_stack.len() == 0;
+
+ let temporary_affine = if stack_was_empty {
+ let initial_inverse = dc.initial_affine.try_invert().unwrap();
+ let untransformed = cairo::Matrix::multiply(&affine, &initial_inverse);
+ untransformed
+ } else {
+ cr.get_matrix()
+ };
+
+ cr.set_matrix(temporary_affine);
dc.cr_stack.push(dc.cr.clone());
dc.cr = cr;
let prev_bbox = dc.bbox;
- dc.bbox = BoundingBox::new(&untransformed);
+
+ dc.bbox = BoundingBox::new(&temporary_affine);
let mut res = draw_fn(dc);
@@ -509,7 +518,7 @@ impl DrawingCtx {
res = res.and_then(|_| {
node.with_impl(|mask: &NodeMask| {
let bbox = dc.bbox;
- mask.generate_cairo_mask(&node, &untransformed, dc, &bbox)
+ mask.generate_cairo_mask(&node, &temporary_affine, dc, &bbox)
})
});
} else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]