[librsvg: 55/90] When using a temporary surface, un-transform by the initial_affine



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]