[librsvg: 55/90] When using a temporary surface, un-transform by the initial_affine
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 55/90] When using a temporary surface, un-transform by the initial_affine
- Date: Tue, 26 Mar 2019 19:16:41 +0000 (UTC)
commit 168ab902af16393bf981ac01e4f4f69277e89656
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Mar 19 20:05:23 2019 -0600
When using a temporary surface, un-transform by the initial_affine
rsvg_internals/src/drawing_ctx.rs | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
---
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 1e2c1d63..0a78a965 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -471,7 +471,10 @@ impl DrawingCtx {
)
};
- cr.set_matrix(affine);
+ let initial_inverse = dc.initial_affine.try_invert().unwrap();
+ let untransformed = cairo::Matrix::multiply(&affine, &initial_inverse);
+ println!("untransformed: {:?}", untransformed);
+ cr.set_matrix(untransformed);
dc.cr_stack.push(dc.cr.clone());
dc.cr = cr;
@@ -497,7 +500,8 @@ impl DrawingCtx {
dc.cr.set_matrix(dc.initial_affine);
dc.cr.set_source_surface(&source_surface, 0.0, 0.0);
- dc.cr.set_matrix(affine);
+ dc.cr.set_matrix(untransformed);
+// dc.cr.set_matrix(affine);
dc.clip_to_node(clip_in_object_space)?;
if let Some(mask) = mask {
@@ -509,7 +513,7 @@ impl DrawingCtx {
res = res.and_then(|_| {
node.with_impl(|mask: &NodeMask| {
let bbox = dc.bbox;
- mask.generate_cairo_mask(&node, &affine, dc, &bbox)
+ mask.generate_cairo_mask(&node, &untransformed, dc, &bbox)
})
});
} else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]