diff options
Diffstat (limited to 'rsvg_internals/src/drawing_ctx.rs')
-rw-r--r-- | rsvg_internals/src/drawing_ctx.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs index f847fb57..f7d8c60e 100644 --- a/rsvg_internals/src/drawing_ctx.rs +++ b/rsvg_internals/src/drawing_ctx.rs @@ -443,15 +443,14 @@ impl<'a> DrawingCtx { node: &RsvgNode, clipping: bool, ) { - let mut draw = false; - if let Some(top) = self.drawsub_stack.pop() { - if rc_node_ptr_eq(&top, node) { - draw = true; - } + let mut draw = true; - self.drawsub_stack.push(top); - } else { - draw = true; + let stack_top = self.drawsub_stack.pop(); + + if let Some(ref top) = stack_top { + if !rc_node_ptr_eq(&top, node) { + draw = false; + } } if draw { @@ -460,6 +459,10 @@ impl<'a> DrawingCtx { node.draw(node, cascaded, self, clipping); } } + + if let Some(top) = stack_top { + self.drawsub_stack.push(top); + } } pub fn add_node_and_ancestors_to_stack(&mut self, node: &RsvgNode) { |