summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2020-09-22 19:00:38 -0500
committerFederico Mena Quintero <federico@gnome.org>2020-10-02 11:54:55 -0500
commit29bd059ed5f621267254b18409b5ee3d97245ea5 (patch)
treecee9bfcc441be80a88ac801e81b8e2eb5a23761c
parent1098c508cbcc251514203b34506bdd67799e5fca (diff)
downloadlibrsvg-29bd059ed5f621267254b18409b5ee3d97245ea5.tar.gz
New helper function to push a full Viewport
-rw-r--r--rsvg_internals/src/drawing_ctx.rs31
1 files changed, 19 insertions, 12 deletions
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 85a8a701..5c34d0b4 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -326,6 +326,18 @@ impl DrawingCtx {
}
}
+ fn push_viewport(&self, viewport: Viewport) -> ViewParams {
+ let vbox = viewport.vbox;
+
+ self.viewport_stack.borrow_mut().push(viewport);
+
+ ViewParams {
+ dpi: self.dpi,
+ vbox,
+ viewport_stack: Some(Rc::downgrade(&self.viewport_stack)),
+ }
+ }
+
/// Pushes a viewport size for normalizing `Length` values.
///
/// You should pass the returned `ViewParams` to all subsequent `Length.normalize()`
@@ -337,16 +349,7 @@ impl DrawingCtx {
let Viewport { transform, .. } = self.get_top_viewport();
let vbox = ViewBox::from(Rect::from_size(width, height));
-
- self.viewport_stack
- .borrow_mut()
- .push(Viewport { transform, vbox });
-
- ViewParams {
- dpi: self.dpi,
- vbox,
- viewport_stack: Some(Rc::downgrade(&self.viewport_stack)),
- }
+ self.push_viewport(Viewport { transform, vbox })
}
/// Creates a new coordinate space inside a viewport.
@@ -394,8 +397,12 @@ impl DrawingCtx {
}
}
- let vbox = vbox.unwrap_or_else(|| self.get_top_viewport().vbox);
- self.push_view_box(vbox.width(), vbox.height())
+ let top_viewport = self.get_top_viewport();
+
+ self.push_viewport(Viewport {
+ transform: top_viewport.transform.post_transform(&t),
+ vbox: vbox.unwrap_or(top_viewport.vbox),
+ })
})
}