diff options
author | Federico Mena Quintero <federico@gnome.org> | 2020-06-19 17:52:04 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2020-10-02 11:54:04 -0500 |
commit | 0145124613cb53b0efd39be35fd831588b920a40 (patch) | |
tree | 4c5dc67b8b992b8b3352a1ac1ab0a5bb89ca250f | |
parent | 0acb7ca90d9730b20164a2529df92f6996e734d2 (diff) | |
download | librsvg-0145124613cb53b0efd39be35fd831588b920a40.tar.gz |
Create the drawsub_stack outside the DrawingCtx
-rw-r--r-- | rsvg_internals/src/drawing_ctx.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs index f42b57bc..a28efd89 100644 --- a/rsvg_internals/src/drawing_ctx.rs +++ b/rsvg_internals/src/drawing_ctx.rs @@ -159,20 +159,24 @@ pub fn draw_tree( acquired_nodes: &mut AcquiredNodes, cascaded: &CascadedValues<'_>, ) -> Result<BoundingBox, RenderingError> { + let drawsub_stack = if let Some(limit_to_stack) = limit_to_stack { + limit_to_stack + .ancestors() + .map(|n| n.clone()) + .collect() + } else { + Vec::new() + }; + let mut draw_ctx = DrawingCtx::new( cr, viewport, dpi, measuring, testing, + drawsub_stack, ); - if let Some(limit_to_stack) = limit_to_stack { - for n in limit_to_stack.ancestors() { - draw_ctx.drawsub_stack.push(n.clone()); - } - } - draw_ctx.draw_node_from_stack(node, acquired_nodes, cascaded, false) } @@ -183,6 +187,7 @@ impl DrawingCtx { dpi: Dpi, measuring: bool, testing: bool, + drawsub_stack: Vec<Node>, ) -> DrawingCtx { let initial_transform = Transform::from(cr.get_matrix()); @@ -220,7 +225,7 @@ impl DrawingCtx { cr_stack: Vec::new(), cr: cr.clone(), view_box_stack: Rc::new(RefCell::new(view_box_stack)), - drawsub_stack: Vec::new(), + drawsub_stack, measuring, testing, } |