diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2020-06-10 14:51:04 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-06-15 09:53:44 +0200 |
commit | a65dc39cb1589bede8d5220fb1a60487c8537ab4 (patch) | |
tree | 02f04619cf4dd2bb5af6556a9c8184c925d44041 /sd | |
parent | f10861b24ab735a7659066071ff82763a054ce5c (diff) |
PPTX export, custom shape, bitmap fill: fix source vs fill rect confusion
Commit 682ab832522b1349f1714bcb16f6e83468ea2920 (drawingML
export\import: cropping of shape's fill texture, 2014-02-12) improved
the DOCX filter, so the fill rectangle of a custom shape with bitmap
fill is handled.
The problem is drawingML has a source rectangle (similar to our crop
rect) to limit the usage of the bitmap, and also it has a fill rectangle
in case some margin is wanted around a stretched bitmap. We don't have a
mapping for the later.
Fix the problem by limiting the above work for DOCX, this way PPTX's
source rectangle won't be turned into a stretch's fill rectangle.
This way no unwanted margins will appear around the image -- those
margins can be large enough that the image effectively disappears on
export.
Change-Id: Ic35063545a56eec9eaf885bbd397a854705d134f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96025
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
(cherry picked from commit b00e43fa5848be0cc7ba81b185021511d94cdc00)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96097
Diffstat (limited to 'sd')
-rw-r--r-- | sd/qa/unit/data/pptx/customshape-bitmapfill-srcrect.pptx | bin | 0 -> 34892 bytes | |||
-rw-r--r-- | sd/qa/unit/export-tests-ooxml1.cxx | 25 |
2 files changed, 25 insertions, 0 deletions
diff --git a/sd/qa/unit/data/pptx/customshape-bitmapfill-srcrect.pptx b/sd/qa/unit/data/pptx/customshape-bitmapfill-srcrect.pptx Binary files differnew file mode 100644 index 000000000000..e162f7e9923f --- /dev/null +++ b/sd/qa/unit/data/pptx/customshape-bitmapfill-srcrect.pptx diff --git a/sd/qa/unit/export-tests-ooxml1.cxx b/sd/qa/unit/export-tests-ooxml1.cxx index 5de8eaf770c6..f7cec3010dc7 100644 --- a/sd/qa/unit/export-tests-ooxml1.cxx +++ b/sd/qa/unit/export-tests-ooxml1.cxx @@ -90,6 +90,7 @@ public: void testRoundtripOwnLineStyles(); void testRoundtripPrstDash(); void testDashOnHairline(); + void testCustomshapeBitmapfillSrcrect(); CPPUNIT_TEST_SUITE(SdOOXMLExportTest1); @@ -129,6 +130,7 @@ public: CPPUNIT_TEST(testRoundtripOwnLineStyles); CPPUNIT_TEST(testRoundtripPrstDash); CPPUNIT_TEST(testDashOnHairline); + CPPUNIT_TEST(testCustomshapeBitmapfillSrcrect); CPPUNIT_TEST_SUITE_END(); @@ -1070,6 +1072,29 @@ void SdOOXMLExportTest1::testDashOnHairline() assertXPath(pXmlDoc, sXmlPath, 11); } +void SdOOXMLExportTest1::testCustomshapeBitmapfillSrcrect() +{ + ::sd::DrawDocShellRef xDocShRef = loadURL( + m_directories.getURLFromSrc("sd/qa/unit/data/pptx/customshape-bitmapfill-srcrect.pptx"), + PPTX); + utl::TempFile tempFile; + xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile); + xDocShRef->DoClose(); + + xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "ppt/slides/slide1.xml"); + const OString sXmlPath = "//a:blipFill/a:srcRect"; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // - XPath '//a:blipFill/a:srcRect' number of nodes is incorrect + // i.e. <a:srcRect> was exported as <a:fillRect> in <a:stretch>, which made part of the image + // invisible. + double fLeftPercent = std::round(getXPath(pXmlDoc, sXmlPath, "l").toDouble() / 1000); + CPPUNIT_ASSERT_EQUAL(4.0, fLeftPercent); + double fRightPercent = std::round(getXPath(pXmlDoc, sXmlPath, "r").toDouble() / 1000); + CPPUNIT_ASSERT_EQUAL(4.0, fRightPercent); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest1); CPPUNIT_PLUGIN_IMPLEMENT(); |