diff options
author | Federico Mena Quintero <federico@gnome.org> | 2022-08-26 19:32:09 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2022-08-26 21:11:17 -0500 |
commit | a1b134bf0a4c6ad884d3ae88a0767563ea68a438 (patch) | |
tree | 85ac9ea5468fc571a6bfe7a848c1286de55331e9 | |
parent | d823f14c26881d38803bb04829d1c008b7b74f98 (diff) | |
download | librsvg-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.rs | 10 | ||||
-rw-r--r-- | tests/fixtures/reftests/bugs-reftests/92-symbol-clip-ref.svg | 5 | ||||
-rw-r--r-- | tests/fixtures/reftests/bugs-reftests/92-symbol-clip.svg | 12 | ||||
-rw-r--r-- | tests/src/reference.rs | 6 |
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" +); |