From a29cb4bffd41d4e2736bd538fd43ebb42dc0e81f Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Fri, 20 Sep 2019 07:11:41 +0200 Subject: [PATCH] Backport a patch to fix svg rendering in gnome-initial-setup https://bugzilla.redhat.com/show_bug.cgi?id=1753183 https://bugzilla.redhat.com/show_bug.cgi?id=1750040 --- ...tterns-which-reference-a-fallback-pa.patch | 93 +++++++++++++++++++ librsvg2.spec | 10 +- 2 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 0001-506-Fix-empty-patterns-which-reference-a-fallback-pa.patch diff --git a/0001-506-Fix-empty-patterns-which-reference-a-fallback-pa.patch b/0001-506-Fix-empty-patterns-which-reference-a-fallback-pa.patch new file mode 100644 index 0000000..bf5dfd9 --- /dev/null +++ b/0001-506-Fix-empty-patterns-which-reference-a-fallback-pa.patch @@ -0,0 +1,93 @@ +From ae7ecfa0846b40d75f5b20c4f122df9a0b78ee4f Mon Sep 17 00:00:00 2001 +From: Federico Mena Quintero +Date: Thu, 19 Sep 2019 15:25:03 -0500 +Subject: [PATCH] (#506): Fix empty patterns which reference a fallback pattern + with children + +When we do draw_ctx.acquired_nodes().get_node_of_type() to acquire a +pattern, or its fallback, we need to set the NodePattern.node to the +corresponding node weakref. + +This was being done correctly at the beginning of the implementation +of resolve(), as of commit 03cbbe96, where the sequence is this: + + DrawingCtx.set_source_paint_server() + paint_server = acquired_nodes.get_node() + .resolve_fallbacks_and_set_pattern() + self.resolve(node, ...) + *self.node.borrow_mut() = Some(node.downgrade()); + +However, this setting of self.node (where self is a NodePattern) to +the corresponding weakref was missing in the "while" loop in +NodePattern.resolve(), where it acquires the fallback pattern - the +fallback's NodePattern also needs its .node to be set to its node's +weakref. + +We'll clean this up at some point. + +Fixes https://gitlab.gnome.org/GNOME/librsvg/issues/506 +--- + rsvg_internals/src/pattern.rs | 6 +++++- + .../bugs/506-pattern-fallback-ref.png | Bin 0 -> 486 bytes + .../reftests/bugs/506-pattern-fallback.svg | 19 ++++++++++++++++++ + 3 files changed, 24 insertions(+), 1 deletion(-) + create mode 100644 tests/fixtures/reftests/bugs/506-pattern-fallback-ref.png + create mode 100644 tests/fixtures/reftests/bugs/506-pattern-fallback.svg + +diff --git a/rsvg_internals/src/pattern.rs b/rsvg_internals/src/pattern.rs +index 9d943b1d..291d81d3 100644 +--- a/rsvg_internals/src/pattern.rs ++++ b/rsvg_internals/src/pattern.rs +@@ -164,7 +164,11 @@ impl PaintSource for NodePattern { + } + + let node_data = a_node.borrow(); +- result.resolve_from_fallback(&node_data.get_impl::()); ++ ++ let fallback_pattern = node_data.get_impl::(); ++ *fallback_pattern.node.borrow_mut() = Some(a_node.downgrade()); ++ ++ result.resolve_from_fallback(fallback_pattern); + + stack.push(a_node); + } else { +diff --git a/tests/fixtures/reftests/bugs/506-pattern-fallback-ref.png b/tests/fixtures/reftests/bugs/506-pattern-fallback-ref.png +new file mode 100644 +index 0000000000000000000000000000000000000000..b9fec4e90e652595043b4dc7d6f9a2e915c3b9f8 +GIT binary patch +literal 486 +zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?C_UTL +z#WAE}&f6;+c^eD_SR7~nt2VPVd@-?XSrfP4ZZV)9T7&$XmzgUpUi ++ ++ ++ ++ ++ ++ ++ ++ ++ +-- +2.23.0 + diff --git a/librsvg2.spec b/librsvg2.spec index 452e88d..f6e3848 100644 --- a/librsvg2.spec +++ b/librsvg2.spec @@ -13,14 +13,17 @@ Name: librsvg2 Summary: An SVG library based on cairo Version: 2.46.0 -Release: 1%{?dist} +Release: 2%{?dist} License: LGPLv2+ URL: https://wiki.gnome.org/Projects/LibRsvg Source0: https://download.gnome.org/sources/librsvg/2.46/librsvg-%{version}.tar.xz +# Backported from upstream +Patch0: 0001-506-Fix-empty-patterns-which-reference-a-fallback-pa.patch BuildRequires: chrpath BuildRequires: gcc +BuildRequires: git-core BuildRequires: gobject-introspection-devel BuildRequires: pkgconfig(cairo) >= %{cairo_version} BuildRequires: pkgconfig(cairo-gobject) >= %{cairo_version} @@ -102,7 +105,7 @@ Requires: %{name}%{?_isa} = %{version}-%{release} This package provides extra utilities based on the librsvg library. %prep -%autosetup -n librsvg-%{version} -p1 +%autosetup -n librsvg-%{version} -p1 -Sgit %if 0%{?bundled_rust_deps} # Use the bundled deps %else @@ -162,6 +165,9 @@ rm -vrf %{buildroot}%{_datadir}/doc %{_mandir}/man1/rsvg-convert.1* %changelog +* Fri Sep 20 2019 Kalev Lember - 2.46.0-2 +- Backport a patch to fix svg rendering in gnome-initial-setup (#1753183) + * Mon Sep 09 2019 Kalev Lember - 2.46.0-1 - Update to 2.46.0