oox/source/ppt/animvariantcontext.cxx     |   32 ++++++++++++++++++++++++++++--
 oox/source/ppt/pptfilterhelpers.cxx       |    1 
 oox/source/ppt/timenodelistcontext.cxx    |   14 ++++++++++---
 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, 89 insertions(+), 5 deletions(-)

New commits:
commit ed8d2a45cb9745b8de1f287a2a6ce95e3ab6b07f
Author: Szymon Kłos <szymon.k...@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 <c...@libreoffice.org>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/42526
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/oox/source/ppt/animvariantcontext.cxx 
b/oox/source/ppt/animvariantcontext.cxx
index 1c879a6582ec..9cbfab2e0bb4 100644
--- a/oox/source/ppt/animvariantcontext.cxx
+++ b/oox/source/ppt/animvariantcontext.cxx
@@ -24,6 +24,7 @@
 #include <osl/diagnose.h>
 
 #include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/drawing/FillStyle.hpp>
 #include <rtl/ustring.hxx>
 
 #include "oox/helper/attributelist.hxx"
@@ -140,6 +141,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& rParent, 
sal_Int32 aElement, Any & aValue )
         : FragmentHandler2( rParent )
             , mnElement( aElement )
@@ -187,8 +204,19 @@ 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 = makeAny( 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 287e67ebf066..fc890c8b97c2 100644
--- a/oox/source/ppt/timenodelistcontext.cxx
+++ b/oox/source/ppt/timenodelistcontext.cxx
@@ -189,9 +189,17 @@ namespace oox { namespace ppt {
                     if( maTo >>= aString )
                     {
                         OSL_TRACE( "Magic conversion %s", OUSTRING_TO_CSTR( 
aString ) );
-                        maTo = makeAny( aString == "visible" );
-                        if( !maTo.has<sal_Bool>() )
-                            OSL_TRACE( "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 eee4dadbbeb5..9fda601f4bbf 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -110,6 +110,7 @@ public:
     void testTdf112552();
     void testTdf112557();
     void testTdf112088();
+    void testTdf112333();
 
     CPPUNIT_TEST_SUITE(SdOOXMLExportTest2);
 
@@ -143,6 +144,7 @@ public:
     CPPUNIT_TEST(testTdf112552);
     CPPUNIT_TEST(testTdf112557);
     CPPUNIT_TEST(testTdf112088);
+    CPPUNIT_TEST(testTdf112333);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -900,6 +902,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 30bb1a7276c4..7a15904c7c94 100644
--- a/sd/source/filter/eppt/pptexanimations.cxx
+++ b/sd/source/filter/eppt/pptexanimations.cxx
@@ -1459,6 +1459,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 5d59edfebda0..d76b524119c9 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -923,6 +923,18 @@ void PowerPointExport::WriteAnimationAttributeName( const 
FSHelperPtr& pFS, cons
         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_INFO("sd.eppt", "unhandled animation attribute name: " << 
rAttributeName);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to