diff options
author | Federico Mena Quintero <federico@gnome.org> | 2020-09-22 11:10:13 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2020-10-02 11:54:39 -0500 |
commit | 59f5ac46026a3fa3d6ed74431bfc5f31736ca223 (patch) | |
tree | 607d611f7a321eea51e73c86ec0be05e17cacd9f | |
parent | 70147edb76d7ef1f1040c9a03153800c85e4b3aa (diff) | |
download | librsvg-59f5ac46026a3fa3d6ed74431bfc5f31736ca223.tar.gz |
Store a complete ViewBox in ViewParams, not just the size
We'll move to a model where we pass the current viewport around, which
is partly defined by a ViewBox.
-rw-r--r-- | rsvg_internals/src/drawing_ctx.rs | 20 | ||||
-rw-r--r-- | rsvg_internals/src/length.rs | 3 |
2 files changed, 9 insertions, 14 deletions
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs index f4717bf4..3b41b1ca 100644 --- a/rsvg_internals/src/drawing_ctx.rs +++ b/rsvg_internals/src/drawing_ctx.rs @@ -54,8 +54,7 @@ use crate::viewbox::ViewBox; /// previous viewport. pub struct ViewParams { pub dpi: Dpi, - pub view_box_width: f64, - pub view_box_height: f64, + pub vbox: ViewBox, view_box_stack: Option<Weak<RefCell<Vec<ViewBox>>>>, } @@ -63,8 +62,7 @@ impl ViewParams { pub fn new(dpi: Dpi, view_box_width: f64, view_box_height: f64) -> ViewParams { ViewParams { dpi, - view_box_width, - view_box_height, + vbox: ViewBox::from(Rect::from_size(view_box_width, view_box_height)), view_box_stack: None, } } @@ -294,12 +292,11 @@ impl DrawingCtx { pub fn get_view_params(&self) -> ViewParams { let view_box_stack = self.view_box_stack.borrow(); let last = view_box_stack.len() - 1; - let top_rect = &view_box_stack[last]; + let vbox = view_box_stack[last]; ViewParams { dpi: self.dpi, - view_box_width: top_rect.width(), - view_box_height: top_rect.height(), + vbox, view_box_stack: None, } } @@ -312,14 +309,13 @@ impl DrawingCtx { /// The viewport will stay in place, and will be the one returned by /// `get_view_params()`, until the returned `ViewParams` is dropped. pub fn push_view_box(&self, width: f64, height: f64) -> ViewParams { - self.view_box_stack - .borrow_mut() - .push(ViewBox::from(Rect::from_size(width, height))); + let vbox = ViewBox::from(Rect::from_size(width, height)); + + self.view_box_stack.borrow_mut().push(vbox); ViewParams { dpi: self.dpi, - view_box_width: width, - view_box_height: height, + vbox, view_box_stack: Some(Rc::downgrade(&self.view_box_stack)), } } diff --git a/rsvg_internals/src/length.rs b/rsvg_internals/src/length.rs index aadc5c64..85d5d2ae 100644 --- a/rsvg_internals/src/length.rs +++ b/rsvg_internals/src/length.rs @@ -321,8 +321,7 @@ impl<N: Normalize> Length<N> { LengthUnit::Px => self.length, LengthUnit::Percent => { - self.length - * <N as Normalize>::normalize(params.view_box_width, params.view_box_height) + self.length * <N as Normalize>::normalize(params.vbox.width(), params.vbox.height()) } LengthUnit::Em => self.length * font_size_from_values(values, params), |