[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - oox/source sd/qa

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Tue Apr 23 13:42:45 UTC 2019


 oox/source/ppt/pptshapegroupcontext.cxx |   26 ++++++++++++++++++++------
 sd/qa/unit/data/pptx/tdf123684.pptx     |binary
 sd/qa/unit/import-tests.cxx             |   16 ++++++++++++++++
 3 files changed, 36 insertions(+), 6 deletions(-)

New commits:
commit 1d0729a5b7a96c6fb962b60a51eddf773773e379
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Tue Apr 23 09:09:21 2019 +0200
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Apr 23 15:42:02 2019 +0200

    tdf#123684 PPTX import: fix wrong background color for <p:sp useBgFill="1">
    
    Regression from commit 59339dec1ce56213dc74a06af2f0d35ac1c534d7
    (tdf#105150 PPTX import: try harder to handle <p:sp useBgFill="1">,
    2017-01-06), the problem was that we gave a white solid fill to a shape
    which is meant to be transparent.
    
    Fix the problem by limiting the scope of the mentioned commit to solid
    colors only, and also extend to code to look for background fill from
    the masterpage as well. This allows not hardcoding the white solid fill
    and leaves the fill style of shapes as transparent where the slide
    background is a bitmap or other more complex fill type.
    
    (cherry picked from commit 943a534ac7cb3df513583e226c986dafd8ba246b)
    
    Change-Id: I0063e88d510250652d2b14856df3bd431681422d
    Reviewed-on: https://gerrit.libreoffice.org/71115
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/oox/source/ppt/pptshapegroupcontext.cxx b/oox/source/ppt/pptshapegroupcontext.cxx
index 4caa76b1c1c7..1180af3f10fb 100644
--- a/oox/source/ppt/pptshapegroupcontext.cxx
+++ b/oox/source/ppt/pptshapegroupcontext.cxx
@@ -103,13 +103,27 @@ ContextHandlerRef PPTShapeGroupContext::onCreateContext( sal_Int32 aElementToken
                 oox::drawingml::FillPropertiesPtr pBackgroundPropertiesPtr = mpSlidePersistPtr->getBackgroundProperties();
                 if (!pBackgroundPropertiesPtr)
                 {
-                    // The shape wants a background, but the slide doesn't have
-                    // one: default to white.
-                    pBackgroundPropertiesPtr.reset(new oox::drawingml::FillProperties);
-                    pBackgroundPropertiesPtr->moFillType = XML_solidFill;
-                    pBackgroundPropertiesPtr->maFillColor.setSrgbClr(0xFFFFFF);
+                    // The shape wants a background, but the slide doesn't have one.
+                    SlidePersistPtr pMaster = mpSlidePersistPtr->getMasterPersist();
+                    if (pMaster)
+                    {
+                        oox::drawingml::FillPropertiesPtr pMasterBackground
+                            = pMaster->getBackgroundProperties();
+                        if (pMasterBackground)
+                        {
+                            if (pMasterBackground->moFillType.has()
+                                && pMasterBackground->moFillType.get() == XML_solidFill)
+                            {
+                                // Master has a solid background, use that.
+                                pBackgroundPropertiesPtr = pMasterBackground;
+                            }
+                        }
+                    }
+                }
+                if (pBackgroundPropertiesPtr)
+                {
+                    pShape->getFillProperties().assignUsed(*pBackgroundPropertiesPtr);
                 }
-                pShape->getFillProperties().assignUsed( *pBackgroundPropertiesPtr );
             }
             pShape->setModelId(rAttribs.getString( XML_modelId ).get());
             return new PPTShapeContext( *this, mpSlidePersistPtr, mpGroupShapePtr, pShape );
diff --git a/sd/qa/unit/data/pptx/tdf123684.pptx b/sd/qa/unit/data/pptx/tdf123684.pptx
new file mode 100644
index 000000000000..87243422753b
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf123684.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 2c5295abcd36..879e13d8f90f 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -166,6 +166,7 @@ public:
     void testTdf104445();
     void testTdf105150();
     void testTdf105150PPT();
+    void testTdf123684();
     void testTdf100926();
     void testTdf89064();
     void testTdf108925();
@@ -252,6 +253,7 @@ public:
     CPPUNIT_TEST(testTdf104445);
     CPPUNIT_TEST(testTdf105150);
     CPPUNIT_TEST(testTdf105150PPT);
+    CPPUNIT_TEST(testTdf123684);
     CPPUNIT_TEST(testTdf100926);
     CPPUNIT_TEST(testPatternImport);
     CPPUNIT_TEST(testTdf89064);
@@ -1768,6 +1770,20 @@ void SdImportTest::testTdf105150()
     xDocShRef->DoClose();
 }
 
+void SdImportTest::testTdf123684()
+{
+    sd::DrawDocShellRef xDocShRef
+        = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf123684.pptx"), PPTX);
+    const SdrPage* pPage = GetPage(1, xDocShRef);
+    const SdrObject* pObj = pPage->GetObj(0);
+    auto& rFillStyleItem
+        = dynamic_cast<const XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+    // Without the accompanying fix in place, this test would have failed with 'Expected: 0; Actual:
+    // 1', i.e. the shape's fill was FillStyle_SOLID, making the text of the shape unreadable.
+    CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, rFillStyleItem.GetValue());
+    xDocShRef->DoClose();
+}
+
 void SdImportTest::testTdf105150PPT()
 {
     sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/ppt/tdf105150.ppt"), PPT);


More information about the Libreoffice-commits mailing list