diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2021-08-03 13:39:20 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2021-08-03 15:00:22 +0200 |
commit | c88ff9298b25132fc34102230cef0263f045a523 (patch) | |
tree | ad0c86c0b5965a065056dccf683e6bc64799c665 /svx | |
parent | e6671ea1ceb9e6925ef396156c922a62ded19461 (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.
Change-Id: If5bba09faa23ef35f99152d4b5d30cd9cf67ace8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119935
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'svx')
-rw-r--r-- | svx/qa/unit/data/slide-background.odp | bin | 0 -> 28090 bytes | |||
-rw-r--r-- | svx/qa/unit/data/slide-background.png | bin | 0 -> 18426 bytes | |||
-rw-r--r-- | svx/qa/unit/sdr.cxx | 24 | ||||
-rw-r--r-- | svx/source/sdr/primitive2d/sdrattributecreator.cxx | 8 |
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 Binary files differnew file mode 100644 index 000000000000..ea62bd63903b --- /dev/null +++ b/svx/qa/unit/data/slide-background.odp diff --git a/svx/qa/unit/data/slide-background.png b/svx/qa/unit/data/slide-background.png Binary files differnew file mode 100644 index 000000000000..3a8c5ceb4262 --- /dev/null +++ b/svx/qa/unit/data/slide-background.png diff --git a/svx/qa/unit/sdr.cxx b/svx/qa/unit/sdr.cxx index 10f9901a0d60..e6ca7f7a87ad 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 8b2fa387a836..855bc0daf573 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> @@ -656,6 +657,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 |