[librsvg/librsvg-2.52: 16/18] (#823): Fix geometry computation for individual layers
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/librsvg-2.52: 16/18] (#823): Fix geometry computation for individual layers
- Date: Fri, 13 May 2022 00:09:27 +0000 (UTC)
commit 11fe145a507e30220eb0883fa317201a5d1b76f4
Author: Federico Mena Quintero <federico gnome org>
Date: Mon May 9 19:36:39 2022 -0500
(#823): Fix geometry computation for individual layers
(#823) correctly points out that commit
e3bb911b2cd860e4e4671c87ea9712913bb35d26 broke geometry computation.
I didn't see how it could, since it didn't even have to do with
extracting bounding boxes from elements.
It turns out that I forgot to copy the DrawingCtx.drawsub_stack for
the nested context. So, for an SVG with structure
a
b
c -> with isolation context (due to non-100% opacity / etc.)
d
e
f id="draw_only_this_one"
g
if one calls geometry_for_layer("draw_only_this_one"), draw_tree() would
properly create a drawsub_stack like (a b c f), but then the nested
rendering would go:
stack_top=a
stack_top=b
stack_top=c (creates isolation context, and a nested DrawingCtx)
stack_top=empty (nested DrawingCtx has an empty drawsub_stack) ->
draw every child of c since there's no drawsub_stack to limit it,
instead of just drawing f in there.
https://gitlab.gnome.org/GNOME/librsvg/-/issues/823
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/697>
src/drawing_ctx.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
---
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index b15c6c39b..65ec97c5c 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -326,7 +326,7 @@ impl DrawingCtx {
cr,
user_language: self.user_language.clone(),
viewport_stack: self.viewport_stack.clone(),
- drawsub_stack: Vec::new(),
+ drawsub_stack: self.drawsub_stack.clone(),
measuring: self.measuring,
testing: self.testing,
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]