summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-08-03 13:39:20 +0200
committerMiklos Vajna <vmiklos@collabora.com>2021-08-10 12:20:56 +0200
commitcd9c016d2f7d8c00017c10d348e7b8fad5d02fa7 (patch)
tree9c986b1fee04daff8bd43c3023e11bc1e637b226 /svx
parentb606764ce2a042f2a38c98820d7236661149d20c (diff)
tdf#142436 svx: fix handling of linked background images
Regression from commit 9fb7aaf570c03c8a26d763f1205fb8c890e8211a (Make linked graphic register into LinkedManager again, 2018-04-13), the problem was that now SvXMLImport::loadGraphicByURL() produces a Graphic that has its type set to GraphicType::Default, but when drawinglayer::primitive2d::createNewSdrFillGraphicAttribute() consumes this graphic, it expects that the type is either a bitmap or a metafile. Fix the problem by explicitly loading the image when the default-type, origin-url-set case happens: this is rendering, so no problem to load the URL and that will give us the expected graphic type. This is also meant to keep the original problem fixed, since the Graphic that is part of the doc model is unchanged. (cherry picked from commit c88ff9298b25132fc34102230cef0263f045a523) Conflicts: drawinglayer/source/tools/primitive2dxmldump.cxx Change-Id: If5bba09faa23ef35f99152d4b5d30cd9cf67ace8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120140 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120231 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/qa/unit/data/slide-background.odpbin0 -> 28090 bytes
-rw-r--r--svx/qa/unit/data/slide-background.pngbin0 -> 18426 bytes
-rw-r--r--svx/qa/unit/sdr.cxx24
-rw-r--r--svx/source/sdr/primitive2d/sdrattributecreator.cxx8
4 files changed, 32 insertions, 0 deletions
diff --git a/svx/qa/unit/data/slide-background.odp b/svx/qa/unit/data/slide-background.odp
new file mode 100644
index 000000000000..ea62bd63903b
--- /dev/null
+++ b/svx/qa/unit/data/slide-background.odp
Binary files differ
diff --git a/svx/qa/unit/data/slide-background.png b/svx/qa/unit/data/slide-background.png
new file mode 100644
index 000000000000..3a8c5ceb4262
--- /dev/null
+++ b/svx/qa/unit/data/slide-background.png
Binary files differ
diff --git a/svx/qa/unit/sdr.cxx b/svx/qa/unit/sdr.cxx
index cde622cffe6f..fd951da96100 100644
--- a/svx/qa/unit/sdr.cxx
+++ b/svx/qa/unit/sdr.cxx
@@ -118,6 +118,30 @@ CPPUNIT_TEST_FIXTURE(SdrTest, testZeroWidthTextWrap)
// i.e. the text on the only shape on the slide had 12 lines, not a single one.
assertXPath(pDocument, "//textsimpleportion", 1);
}
+
+CPPUNIT_TEST_FIXTURE(SdrTest, testSlideBackground)
+{
+ // Given a document with a slide what has a linked background image:
+ test::Directories aDirectories;
+ OUString aURL = aDirectories.getURLFromSrc(u"svx/qa/unit/data/slide-background.odp");
+ getComponent() = loadFromDesktop(aURL);
+ uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
+ uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
+ uno::UNO_QUERY);
+
+ // When rendering that document:
+ drawinglayer::primitive2d::Primitive2DContainer xPrimitiveSequence
+ = renderPageToPrimitives(xDrawPage);
+
+ // Then make sure that the background has a bitmap:
+ drawinglayer::Primitive2dXmlDump aDumper;
+ xmlDocUniquePtr pDocument = aDumper.dumpAndParse(xPrimitiveSequence);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the rendering did not find the bitmap.
+ assertXPath(pDocument, "//bitmap", 1);
+}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/sdr/primitive2d/sdrattributecreator.cxx b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
index c3cad4f96209..90ebe3dc634f 100644
--- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx
+++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
@@ -58,6 +58,7 @@
#include <svx/xbtmpit.hxx>
#include <svl/itempool.hxx>
#include <vcl/svapp.hxx>
+#include <vcl/GraphicLoader.hxx>
#include <basegfx/range/b2drange.hxx>
#include <svx/svx3ditems.hxx>
#include <com/sun/star/drawing/ProjectionMode.hpp>
@@ -658,6 +659,13 @@ namespace drawinglayer::primitive2d
{
Graphic aGraphic(rSet.Get(XATTR_FILLBITMAP).GetGraphicObject().GetGraphic());
+ OUString aOriginURL = aGraphic.getOriginURL();
+ if (aGraphic.GetType() == GraphicType::Default && !aOriginURL.isEmpty())
+ {
+ aGraphic = vcl::graphic::loadFromURL(aGraphic.getOriginURL());
+ aGraphic.setOriginURL(aOriginURL);
+ }
+
if(GraphicType::Bitmap != aGraphic.GetType() && GraphicType::GdiMetafile != aGraphic.GetType())
{
// no content if not bitmap or metafile