summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2022-08-26 19:32:09 -0500
committerFederico Mena Quintero <federico@gnome.org>2022-08-26 21:11:17 -0500
commita1b134bf0a4c6ad884d3ae88a0767563ea68a438 (patch)
tree85ac9ea5468fc571a6bfe7a848c1286de55331e9
parentd823f14c26881d38803bb04829d1c008b7b74f98 (diff)
downloadlibrsvg-a1b134bf0a4c6ad884d3ae88a0767563ea68a438.tar.gz
(#92): In the use element, honor the overflow:hidden property of a referenced symbol
We meant to look at the referenced <symbol>'s computed values, not the <use>'s computed values. Fixes https://gitlab.gnome.org/GNOME/librsvg/-/issues/92 Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/737>
-rw-r--r--src/drawing_ctx.rs10
-rw-r--r--tests/fixtures/reftests/bugs-reftests/92-symbol-clip-ref.svg5
-rw-r--r--tests/fixtures/reftests/bugs-reftests/92-symbol-clip.svg12
-rw-r--r--tests/src/reference.rs6
4 files changed, 28 insertions, 5 deletions
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index 6347304f..7ba1c015 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -108,6 +108,8 @@ pub struct FontOptions {
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum ClipMode {
ClipToViewport,
+
+ // FIXME: this is not used anymore!?
ClipToVbox,
}
@@ -1690,12 +1692,10 @@ impl DrawingCtx {
let elt = child.borrow_element();
let symbol = borrow_element_as!(child, Symbol);
+ let symbol_values = elt.get_computed_values();
- let clip_mode = if !values.is_overflow()
- || (values.overflow() == Overflow::Visible
- && elt.get_specified_values().is_overflow())
- {
- Some(ClipMode::ClipToVbox)
+ let clip_mode = if !symbol_values.is_overflow() {
+ Some(ClipMode::ClipToViewport)
} else {
None
};
diff --git a/tests/fixtures/reftests/bugs-reftests/92-symbol-clip-ref.svg b/tests/fixtures/reftests/bugs-reftests/92-symbol-clip-ref.svg
new file mode 100644
index 00000000..c319e2fa
--- /dev/null
+++ b/tests/fixtures/reftests/bugs-reftests/92-symbol-clip-ref.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="100" height="100" viewBox="0 0 100 100">
+ <rect x="0" y="0" width="40" height="40" fill="lime"/>
+</svg>
diff --git a/tests/fixtures/reftests/bugs-reftests/92-symbol-clip.svg b/tests/fixtures/reftests/bugs-reftests/92-symbol-clip.svg
new file mode 100644
index 00000000..f25b65b2
--- /dev/null
+++ b/tests/fixtures/reftests/bugs-reftests/92-symbol-clip.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="100" height="100" viewBox="0 0 100 100">
+ <defs>
+ <symbol id="foo" viewBox="0 0 50 50">
+ <rect x="0" y="0" width="40" height="40" fill="lime"/>
+ <rect x="50" y="0" width="40" height="40" fill="red"/>
+ </symbol>
+ </defs>
+
+ <use x="0" y="0" width="50" height="50" xlink:href="#foo"/>
+</svg>
diff --git a/tests/src/reference.rs b/tests/src/reference.rs
index 665baec0..00d6428c 100644
--- a/tests/src/reference.rs
+++ b/tests/src/reference.rs
@@ -406,3 +406,9 @@ test_svg_reference!(
"tests/fixtures/reftests/bugs-reftests/880-stroke-wide-line.svg",
"tests/fixtures/reftests/bugs-reftests/880-stroke-wide-line-ref.svg"
);
+
+test_svg_reference!(
+ bug_92_symbol_clip,
+ "tests/fixtures/reftests/bugs-reftests/92-symbol-clip.svg",
+ "tests/fixtures/reftests/bugs-reftests/92-symbol-clip-ref.svg"
+);