[Libreoffice-commits] core.git: oox/source sd/qa

Miklos Vajna vmiklos at collabora.co.uk
Fri Jan 6 16:44:03 UTC 2017


 oox/source/ppt/pptshapegroupcontext.cxx |   10 +++++++++-
 sd/qa/unit/data/pptx/tdf105150.pptx     |binary
 sd/qa/unit/import-tests.cxx             |   14 ++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

New commits:
commit 59339dec1ce56213dc74a06af2f0d35ac1c534d7
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Jan 6 16:55:22 2017 +0100

    tdf#105150 PPTX import: try harder to handle <p:sp useBgFill="1">
    
    The bugdoc has two shapes. The red rectangle is supposed to be covered
    by the other shape, but it wasn't as the fill style was set to none. The
    reason for that was we ignored useBgFill, unless the slide had an
    explicit fill style. Assume that in that case a white solid fill is the
    default.
    
    Change-Id: Iea20e216e44e13db68887f285c10bc1a8feacf0a
    Reviewed-on: https://gerrit.libreoffice.org/32786
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/oox/source/ppt/pptshapegroupcontext.cxx b/oox/source/ppt/pptshapegroupcontext.cxx
index 57f0f912..5208bd4 100644
--- a/oox/source/ppt/pptshapegroupcontext.cxx
+++ b/oox/source/ppt/pptshapegroupcontext.cxx
@@ -101,7 +101,15 @@ ContextHandlerRef PPTShapeGroupContext::onCreateContext( sal_Int32 aElementToken
             std::shared_ptr<PPTShape> pShape( new PPTShape( meShapeLocation, "com.sun.star.drawing.CustomShape" ) );
             if( rAttribs.getBool( XML_useBgFill, false ) )
             {
-                const oox::drawingml::FillPropertiesPtr pBackgroundPropertiesPtr = mpSlidePersistPtr->getBackgroundProperties();
+                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);
+                }
                 if ( pBackgroundPropertiesPtr ) {
                     pShape->getFillProperties().assignUsed( *pBackgroundPropertiesPtr );
                 }
diff --git a/sd/qa/unit/data/pptx/tdf105150.pptx b/sd/qa/unit/data/pptx/tdf105150.pptx
new file mode 100644
index 0000000..48a2e01
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf105150.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index f4faf00..eb56ffb 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -134,6 +134,7 @@ public:
     void testTdf104201();
     void testTdf103477();
     void testTdf104445();
+    void testTdf105150();
 
     CPPUNIT_TEST_SUITE(SdImportTest);
 
@@ -192,6 +193,7 @@ public:
     CPPUNIT_TEST(testTdf104201);
     CPPUNIT_TEST(testTdf103477);
     CPPUNIT_TEST(testTdf104445);
+    CPPUNIT_TEST(testTdf105150);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -1641,6 +1643,18 @@ void SdImportTest::testTdf103477()
     xDocShRef->DoClose();
 }
 
+void SdImportTest::testTdf105150()
+{
+    sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf105150.pptx"), PPTX);
+    const SdrPage* pPage = GetPage(1, xDocShRef);
+    const SdrObject* pObj = pPage->GetObj(1);
+    auto& rFillStyleItem = dynamic_cast<const XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+    // This was drawing::FillStyle_NONE, <p:sp useBgFill="1"> was ignored when
+    // the slide didn't have an explicit background fill.
+    CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rFillStyleItem.GetValue());
+    xDocShRef->DoClose();
+}
+
 void SdImportTest::testTdf104445()
 {
     // Extra bullets were added to the first shape


More information about the Libreoffice-commits mailing list