diff options
author | Federico Mena Quintero <federico@gnome.org> | 2020-09-22 19:00:38 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2020-10-02 11:54:55 -0500 |
commit | 29bd059ed5f621267254b18409b5ee3d97245ea5 (patch) | |
tree | cee9bfcc441be80a88ac801e81b8e2eb5a23761c | |
parent | 1098c508cbcc251514203b34506bdd67799e5fca (diff) | |
download | librsvg-29bd059ed5f621267254b18409b5ee3d97245ea5.tar.gz |
New helper function to push a full Viewport
-rw-r--r-- | rsvg_internals/src/drawing_ctx.rs | 31 |
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), + }) }) } |