summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2020-06-19 17:52:04 -0500
committerFederico Mena Quintero <federico@gnome.org>2020-10-02 11:54:04 -0500
commit0145124613cb53b0efd39be35fd831588b920a40 (patch)
tree4c5dc67b8b992b8b3352a1ac1ab0a5bb89ca250f
parent0acb7ca90d9730b20164a2529df92f6996e734d2 (diff)
downloadlibrsvg-0145124613cb53b0efd39be35fd831588b920a40.tar.gz
Create the drawsub_stack outside the DrawingCtx
-rw-r--r--rsvg_internals/src/drawing_ctx.rs19
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,
}