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

Szymon Kłos szymon.klos at collabora.com
Tue Sep 19 14:22:52 UTC 2017


 oox/source/ppt/animvariantcontext.cxx     |   31 ++++++++++++++++++++++++++++--
 oox/source/ppt/pptfilterhelpers.cxx       |    1 
 oox/source/ppt/timenodelistcontext.cxx    |   13 +++++++++---
 sd/qa/unit/data/pptx/tdf112333.pptx       |binary
 sd/qa/unit/export-tests-ooxml2.cxx        |   24 +++++++++++++++++++++++
 sd/source/filter/eppt/pptexanimations.cxx |   11 ++++++++++
 sd/source/filter/eppt/pptx-epptooxml.cxx  |   12 +++++++++++
 7 files changed, 87 insertions(+), 5 deletions(-)

New commits:
commit f44aa84331cfa22db6e85e238b6cee698a8d9978
Author: Szymon Kłos <szymon.klos at collabora.com>
Date:   Mon Sep 18 15:30:59 2017 +0200

    tdf#112333 PPTX export fill.type & fill.on
    
    Change-Id: I2407d0227e10204354ee69fd9a2af9ca93077221
    Reviewed-on: https://gerrit.libreoffice.org/42432
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>

diff --git a/oox/source/ppt/animvariantcontext.cxx b/oox/source/ppt/animvariantcontext.cxx
index bf96b277159f..84703367761f 100644
--- a/oox/source/ppt/animvariantcontext.cxx
+++ b/oox/source/ppt/animvariantcontext.cxx
@@ -23,6 +23,7 @@
 #include "cppuhelper/exc_hlp.hxx"
 
 #include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/drawing/FillStyle.hpp>
 #include <rtl/ustring.hxx>
 
 #include "oox/helper/attributelist.hxx"
@@ -139,6 +140,22 @@ namespace oox { namespace ppt {
         return bRet;
     }
 
+    bool convertFillStyle( const OUString& rString, css::drawing::FillStyle& rValue )
+    {
+        if( rString == "solid" )
+        {
+            rValue = css::drawing::FillStyle::FillStyle_SOLID;
+            return true;
+        }
+        else if( rString == "none" )
+        {
+            rValue = css::drawing::FillStyle::FillStyle_NONE;
+            return true;
+        }
+        else
+            return false;
+    }
+
     AnimVariantContext::AnimVariantContext( FragmentHandler2 const & rParent, sal_Int32 aElement, Any & aValue )
         : FragmentHandler2( rParent )
             , mnElement( aElement )
@@ -186,8 +203,18 @@ namespace oox { namespace ppt {
         case PPT_TOKEN( strVal ):
         {
             OUString val = rAttribs.getString( XML_val, OUString() );
-            convertMeasure( val ); // ignore success or failure if it fails, use as is
-            maValue <<= val;
+            if( convertMeasure( val ) )
+            {
+                maValue <<= val;
+            }
+            else
+            {
+                css::drawing::FillStyle eFillStyle;
+                if( convertFillStyle( val, eFillStyle ) )
+                    maValue <<= eFillStyle;
+                else
+                    maValue <<= val;
+            }
             return this;
         }
         default:
diff --git a/oox/source/ppt/pptfilterhelpers.cxx b/oox/source/ppt/pptfilterhelpers.cxx
index 6496e9153e60..f117e2a1210d 100644
--- a/oox/source/ppt/pptfilterhelpers.cxx
+++ b/oox/source/ppt/pptfilterhelpers.cxx
@@ -38,6 +38,7 @@ namespace oox { namespace ppt {
             { MS_FILLCOLOR,         "fillColor",                    "FillColor" },
             { MS_FILLCOLOR,         "fillcolor",                    "FillColor" },
             { MS_FILLTYPE,          "fill.type",                    "FillStyle" },
+            { MS_FILLTYPE,          "fill.on",                      "FillOn" },
             { MS_STROKECOLOR,       "stroke.color",                 "LineColor" },
             { MS_STROKEON,          "stroke.on",                    "LineStyle" },
             { MS_STYLECOLOR,        "style.color",                  "CharColor" },
diff --git a/oox/source/ppt/timenodelistcontext.cxx b/oox/source/ppt/timenodelistcontext.cxx
index 47e56fe38ebf..8df88793822a 100644
--- a/oox/source/ppt/timenodelistcontext.cxx
+++ b/oox/source/ppt/timenodelistcontext.cxx
@@ -180,9 +180,16 @@ namespace oox { namespace ppt {
                     OUString aString;
                     if( maTo >>= aString )
                     {
-                        maTo <<= aString == "visible";
-                        if( !maTo.has<sal_Bool>() )
-                            SAL_WARN("oox.ppt", "conversion failed" );
+                        if( aString == "visible" || aString == "true" )
+                            maTo <<= true;
+                        else if( aString == "false" )
+                            maTo <<= false;
+
+                        if (!maTo.has<sal_Bool>())
+                        {
+                            SAL_WARN("oox.ppt", "conversion failed");
+                            maTo <<= false;
+                        }
                     }
                     mpNode->setTo( maTo );
                 }
diff --git a/sd/qa/unit/data/pptx/tdf112333.pptx b/sd/qa/unit/data/pptx/tdf112333.pptx
new file mode 100755
index 000000000000..c381ed8b353e
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf112333.pptx differ
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index 38d39ead02c8..44e335d65a2d 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -108,6 +108,7 @@ public:
     void testTdf106867();
     void testTdf112280();
     void testTdf112088();
+    void testTdf112333();
 
     CPPUNIT_TEST_SUITE(SdOOXMLExportTest2);
 
@@ -143,6 +144,7 @@ public:
     CPPUNIT_TEST(testTdf106867);
     CPPUNIT_TEST(testTdf112280);
     CPPUNIT_TEST(testTdf112088);
+    CPPUNIT_TEST(testTdf112333);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -1068,6 +1070,28 @@ void SdOOXMLExportTest2::testTdf112088()
     assertXPathChildren(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[3]/p:spPr/a:gradFill/a:gsLst", 2);
 }
 
+void SdOOXMLExportTest2::testTdf112333()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf112333.pptx"), PPTX);
+    utl::TempFile tempFile;
+    xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+    xDocShRef->DoClose();
+
+    xmlDocPtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+
+    OUString sTo = getXPath(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:set[1]/p:to/p:strVal", "val");
+    CPPUNIT_ASSERT_EQUAL(OUString("solid"), sTo);
+
+    OUString sAttributeName = getXPathContent(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:set[1]/p:cBhvr/p:attrNameLst/p:attrName");
+    CPPUNIT_ASSERT_EQUAL(OUString("fill.type"), sAttributeName);
+
+    sTo = getXPath(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:set[2]/p:to/p:strVal", "val");
+    CPPUNIT_ASSERT_EQUAL(OUString("true"), sTo);
+
+    sAttributeName = getXPathContent(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:set[2]/p:cBhvr/p:attrNameLst/p:attrName");
+    CPPUNIT_ASSERT_EQUAL(OUString("fill.on"), sAttributeName);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest2);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sd/source/filter/eppt/pptexanimations.cxx b/sd/source/filter/eppt/pptexanimations.cxx
index 65c8ba385d31..1096019a2ccc 100644
--- a/sd/source/filter/eppt/pptexanimations.cxx
+++ b/sd/source/filter/eppt/pptexanimations.cxx
@@ -1451,6 +1451,17 @@ Any AnimationExporter::convertAnimateValue( const Any& rSourceValue, const OUStr
                 aDest += "solid";
         }
     }
+    else if (rAttributeName == "FillOn")
+    {
+        bool bFillOn;
+        if ( rSourceValue >>= bFillOn )
+        {
+            if ( bFillOn )
+                aDest += "true";
+            else
+                aDest += "false";
+        }
+    }
     else if ( rAttributeName == "LineStyle" )
     {
         css::drawing::LineStyle eLineStyle;
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx
index f5d39c36ba0c..37ac57f83e40 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -936,6 +936,18 @@ void PowerPointExport::WriteAnimationAttributeName(const FSHelperPtr& pFS, const
         pFS->writeEscaped("r");
         pFS->endElementNS(XML_p, XML_attrName);
     }
+    else if (rAttributeName == "FillStyle")
+    {
+        pFS->startElementNS(XML_p, XML_attrName, FSEND);
+        pFS->writeEscaped("fill.type");
+        pFS->endElementNS(XML_p, XML_attrName);
+    }
+    else if (rAttributeName == "FillOn")
+    {
+        pFS->startElementNS(XML_p, XML_attrName, FSEND);
+        pFS->writeEscaped("fill.on");
+        pFS->endElementNS(XML_p, XML_attrName);
+    }
     else
     {
         SAL_WARN("sd.eppt", "unhandled animation attribute name: " << rAttributeName);


More information about the Libreoffice-commits mailing list