summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorMark Hung <marklh9@gmail.com>2018-08-29 01:21:28 +0800
committerMark Hung <marklh9@gmail.com>2018-08-31 03:56:04 +0200
commit76be5c31b97a37d15a3009995f4e60e4cee011ee (patch)
treefd1d30d98e70183ea746028c18f678c95e79b994 /sd
parent135fca2f14ee4231886bf9f9efe79bf9c34e8121 (diff)
sd/pptx export: new PPTXAnimationExport class.
Create a new PPTXAnimationExport and move animation related member functions from PowerPointExport. Change-Id: Iaeb9ff032c248d9b540680a4937365004d0c921e Reviewed-on: https://gerrit.libreoffice.org/59735 Tested-by: Jenkins Reviewed-by: Mark Hung <marklh9@gmail.com>
Diffstat (limited to 'sd')
-rw-r--r--sd/source/filter/eppt/epptooxml.hxx12
-rw-r--r--sd/source/filter/eppt/pptx-animations.cxx106
-rw-r--r--sd/source/filter/eppt/pptx-animations.hxx23
-rw-r--r--sd/source/filter/eppt/pptx-epptooxml.cxx13
4 files changed, 115 insertions, 39 deletions
diff --git a/sd/source/filter/eppt/epptooxml.hxx b/sd/source/filter/eppt/epptooxml.hxx
index 97f7cf903d3f..4f1a1540da20 100644
--- a/sd/source/filter/eppt/epptooxml.hxx
+++ b/sd/source/filter/eppt/epptooxml.hxx
@@ -83,6 +83,8 @@ public:
static const char* Get8Direction( sal_uInt8 nDirection );
static int GetPPTXLayoutId( int nOffset );
+ sal_Int32 GetShapeID(const css::uno::Reference<css::drawing::XShape>& rXShape);
+ sal_Int32 GetNextAnimationNodeID();
private:
virtual void ImplWriteSlide( sal_uInt32 nPageNum, sal_uInt32 nMasterNum, sal_uInt16 nMode,
@@ -99,16 +101,6 @@ private:
virtual ::oox::ole::VbaProject* implCreateVbaProject() const override;
void WriteNotesMaster();
- void WriteAnimations( const ::sax_fastparser::FSHelperPtr& pFS );
- void WriteAnimationNode( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, bool bMainSeqChild );
- void WriteAnimationNodeAnimate( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, bool bMainSeqChild );
- void WriteAnimationNodeAnimateInside( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, bool bMainSeqChild, bool bSimple, bool bWriteTo = true );
- void WriteAnimationNodeSeq( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, bool bMainSeqChild );
- void WriteAnimationNodeEffect( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, bool bMainSeqChild );
- void WriteAnimationNodeCommand(const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, sal_Int32 nXmlNodeType, bool bMainSeqChild );
- void WriteAnimationNodeCommonPropsStart( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::animations::XAnimationNode >& rXNode, bool bSingle, bool bMainSeqChild );
-
- void WriteAnimationTarget( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Any& rTarget );
bool WriteComments( sal_uInt32 nPageNum );
void ImplWriteBackground( const ::sax_fastparser::FSHelperPtr& pFS, const css::uno::Reference< css::beans::XPropertySet >& aXBackgroundPropSet );
void WriteTransition( const ::sax_fastparser::FSHelperPtr& pFS );
diff --git a/sd/source/filter/eppt/pptx-animations.cxx b/sd/source/filter/eppt/pptx-animations.cxx
index d9c98db90415..17d16dedc591 100644
--- a/sd/source/filter/eppt/pptx-animations.cxx
+++ b/sd/source/filter/eppt/pptx-animations.cxx
@@ -54,11 +54,13 @@
#include <com/sun/star/presentation/TextAnimationType.hpp>
#include <com/sun/star/text/XSimpleText.hpp>
#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/drawing/XDrawPage.hpp>
#include <oox/export/utils.hxx>
#include <oox/ppt/pptfilterhelpers.hxx>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include "pptexanimations.hxx"
+#include "pptx-animations.hxx"
#include "../ppt/pptanimations.hxx"
using namespace ::com::sun::star::animations;
@@ -71,6 +73,7 @@ using namespace oox::core;
using namespace oox;
using ::com::sun::star::beans::NamedValue;
+using ::com::sun::star::drawing::XDrawPage;
using ::com::sun::star::drawing::XShape;
using ::com::sun::star::text::XSimpleText;
using ::sax_fastparser::FSHelperPtr;
@@ -447,9 +450,54 @@ sal_Int32 convertNodeType(sal_Int16 nType)
}
return xmlNodeType;
}
+
+class PPTXAnimationExport
+{
+ void WriteAnimationNode(const FSHelperPtr& pFS, const Reference<XAnimationNode>& rXNode,
+ bool bMainSeqChild);
+ void WriteAnimationNodeAnimate(const FSHelperPtr& pFS, const Reference<XAnimationNode>& rXNode,
+ sal_Int32 nXmlNodeType, bool bMainSeqChild);
+ void WriteAnimationNodeAnimateInside(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode,
+ bool bMainSeqChild, bool bSimple, bool bWriteTo = true);
+ void WriteAnimationNodeSeq(const FSHelperPtr& pFS, const Reference<XAnimationNode>& rXNode,
+ sal_Int32 nXmlNodeType, bool bMainSeqChild);
+ void WriteAnimationNodeEffect(const FSHelperPtr& pFS, const Reference<XAnimationNode>& rXNode,
+ sal_Int32 nXmlNodeType, bool bMainSeqChild);
+ void WriteAnimationNodeCommand(const FSHelperPtr& pFS, const Reference<XAnimationNode>& rXNode,
+ sal_Int32 nXmlNodeType, bool bMainSeqChild);
+ void WriteAnimationNodeCommonPropsStart(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode, bool bSingle,
+ bool bMainSeqChild);
+ void WriteAnimationTarget(const FSHelperPtr& pFS, const Any& rTarget);
+
+ PowerPointExport& mrPowerPointExport;
+
+public:
+ PPTXAnimationExport(PowerPointExport& rExport);
+ void WriteAnimations(const FSHelperPtr& pFS, const Reference<XDrawPage>& rXDrawPage);
+};
}
-void PowerPointExport::WriteAnimationTarget(const FSHelperPtr& pFS, const Any& rTarget)
+namespace oox
+{
+namespace core
+{
+void WriteAnimations(const FSHelperPtr& pFS, const Reference<XDrawPage>& rXDrawPage,
+ PowerPointExport& rExport)
+{
+ PPTXAnimationExport aAnimationExport(rExport);
+ aAnimationExport.WriteAnimations(pFS, rXDrawPage);
+}
+}
+}
+
+PPTXAnimationExport::PPTXAnimationExport(PowerPointExport& rExport)
+ : mrPowerPointExport(rExport)
+{
+}
+
+void PPTXAnimationExport::WriteAnimationTarget(const FSHelperPtr& pFS, const Any& rTarget)
{
sal_Int32 nParagraph = -1;
bool bParagraphTarget = false;
@@ -475,9 +523,10 @@ void PowerPointExport::WriteAnimationTarget(const FSHelperPtr& pFS, const Any& r
if (rXShape.is())
{
+ sal_Int32 nShapeID = mrPowerPointExport.GetShapeID(rXShape);
+
pFS->startElementNS(XML_p, XML_tgtEl, FSEND);
- pFS->startElementNS(XML_p, XML_spTgt, XML_spid,
- I32S(ShapeExport::GetShapeID(rXShape, &maShapeMap)), FSEND);
+ pFS->startElementNS(XML_p, XML_spTgt, XML_spid, I32S(nShapeID), FSEND);
if (bParagraphTarget)
{
pFS->startElementNS(XML_p, XML_txEl, FSEND);
@@ -490,9 +539,9 @@ void PowerPointExport::WriteAnimationTarget(const FSHelperPtr& pFS, const Any& r
}
}
-void PowerPointExport::WriteAnimationNodeAnimate(const FSHelperPtr& pFS,
- const Reference<XAnimationNode>& rXNode,
- sal_Int32 nXmlNodeType, bool bMainSeqChild)
+void PPTXAnimationExport::WriteAnimationNodeAnimate(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode,
+ sal_Int32 nXmlNodeType, bool bMainSeqChild)
{
Reference<XAnimate> rXAnimate(rXNode, UNO_QUERY);
if (!rXAnimate.is())
@@ -617,10 +666,10 @@ void PowerPointExport::WriteAnimationNodeAnimate(const FSHelperPtr& pFS,
pFS->endElementNS(XML_p, nXmlNodeType);
}
-void PowerPointExport::WriteAnimationNodeAnimateInside(const FSHelperPtr& pFS,
- const Reference<XAnimationNode>& rXNode,
- bool bMainSeqChild, bool bSimple,
- bool bWriteTo)
+void PPTXAnimationExport::WriteAnimationNodeAnimateInside(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode,
+ bool bMainSeqChild, bool bSimple,
+ bool bWriteTo)
{
Reference<XAnimate> rXAnimate(rXNode, UNO_QUERY);
if (!rXAnimate.is())
@@ -686,9 +735,9 @@ void PowerPointExport::WriteAnimationNodeAnimateInside(const FSHelperPtr& pFS,
WriteAnimateTo(pFS, rXAnimate->getTo(), rXAnimate->getAttributeName());
}
-void PowerPointExport::WriteAnimationNodeCommonPropsStart(const FSHelperPtr& pFS,
- const Reference<XAnimationNode>& rXNode,
- bool bSingle, bool bMainSeqChild)
+void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart(
+ const FSHelperPtr& pFS, const Reference<XAnimationNode>& rXNode, bool bSingle,
+ bool bMainSeqChild)
{
const char* pDuration = nullptr;
const char* pRestart = nullptr;
@@ -835,7 +884,7 @@ void PowerPointExport::WriteAnimationNodeCommonPropsStart(const FSHelperPtr& pFS
bool bAutoReverse = rXNode->getAutoReverse();
pFS->startElementNS(
- XML_p, XML_cTn, XML_id, I64S(mnAnimationNodeIdMax++), XML_dur,
+ XML_p, XML_cTn, XML_id, I64S(mrPowerPointExport.GetNextAnimationNodeID()), XML_dur,
fDuration != 0 ? I32S(static_cast<sal_Int32>(fDuration * 1000.0)) : pDuration, XML_autoRev,
bAutoReverse ? "1" : nullptr, XML_restart, pRestart, XML_nodeType, pNodeType, XML_fill,
pFill, XML_presetClass, pPresetClass, XML_presetID, bPresetId ? I64S(nPresetId) : nullptr,
@@ -924,9 +973,9 @@ void PowerPointExport::WriteAnimationNodeCommonPropsStart(const FSHelperPtr& pFS
pFS->endElementNS(XML_p, XML_cTn);
}
-void PowerPointExport::WriteAnimationNodeSeq(const FSHelperPtr& pFS,
- const Reference<XAnimationNode>& rXNode, sal_Int32,
- bool bMainSeqChild)
+void PPTXAnimationExport::WriteAnimationNodeSeq(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode, sal_Int32,
+ bool bMainSeqChild)
{
SAL_INFO("sd.eppt", "write animation node SEQ");
@@ -940,9 +989,9 @@ void PowerPointExport::WriteAnimationNodeSeq(const FSHelperPtr& pFS,
pFS->endElementNS(XML_p, XML_seq);
}
-void PowerPointExport::WriteAnimationNodeEffect(const FSHelperPtr& pFS,
- const Reference<XAnimationNode>& rXNode, sal_Int32,
- bool bMainSeqChild)
+void PPTXAnimationExport::WriteAnimationNodeEffect(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode,
+ sal_Int32, bool bMainSeqChild)
{
SAL_INFO("sd.eppt", "write animation node FILTER");
Reference<XTransitionFilter> xFilter(rXNode, UNO_QUERY);
@@ -960,9 +1009,9 @@ void PowerPointExport::WriteAnimationNodeEffect(const FSHelperPtr& pFS,
}
}
-void PowerPointExport::WriteAnimationNodeCommand(const FSHelperPtr& pFS,
- const Reference<XAnimationNode>& rXNode, sal_Int32,
- bool bMainSeqChild)
+void PPTXAnimationExport::WriteAnimationNodeCommand(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode,
+ sal_Int32, bool bMainSeqChild)
{
SAL_INFO("sd.eppt", "write animation node COMMAND");
Reference<XCommand> xCommand(rXNode, UNO_QUERY);
@@ -1002,9 +1051,9 @@ void PowerPointExport::WriteAnimationNodeCommand(const FSHelperPtr& pFS,
}
}
-void PowerPointExport::WriteAnimationNode(const FSHelperPtr& pFS,
- const Reference<XAnimationNode>& rXNode,
- bool bMainSeqChild)
+void PPTXAnimationExport::WriteAnimationNode(const FSHelperPtr& pFS,
+ const Reference<XAnimationNode>& rXNode,
+ bool bMainSeqChild)
{
SAL_INFO("sd.eppt", "export node type: " << rXNode->getType());
sal_Int32 xmlNodeType = convertNodeType(rXNode->getType());
@@ -1055,9 +1104,10 @@ void PowerPointExport::WriteAnimationNode(const FSHelperPtr& pFS,
}
}
-void PowerPointExport::WriteAnimations(const FSHelperPtr& pFS)
+void PPTXAnimationExport::WriteAnimations(const FSHelperPtr& pFS,
+ const Reference<XDrawPage>& rXDrawPage)
{
- Reference<XAnimationNodeSupplier> xNodeSupplier(mXDrawPage, UNO_QUERY);
+ Reference<XAnimationNodeSupplier> xNodeSupplier(rXDrawPage, UNO_QUERY);
if (xNodeSupplier.is())
{
const Reference<XAnimationNode> xNode(xNodeSupplier->getAnimationNode());
diff --git a/sd/source/filter/eppt/pptx-animations.hxx b/sd/source/filter/eppt/pptx-animations.hxx
new file mode 100644
index 000000000000..738100befee0
--- /dev/null
+++ b/sd/source/filter/eppt/pptx-animations.hxx
@@ -0,0 +1,23 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#ifndef INCLUDED_SD_SOURCE_FILTER_EPPT_EPPTANIMATIONS_HXX
+#define INCLUDED_SD_SOURCE_FILTER_EPPT_EPPTANIMATIONS_HXX
+
+namespace oox
+{
+namespace core
+{
+void WriteAnimations(const ::sax_fastparser::FSHelperPtr& pFS,
+ const css::uno::Reference<css::drawing::XDrawPage>& rXDrawPage,
+ PowerPointExport& rExport);
+}
+}
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx
index 6142e15a66cb..e625a98da656 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -61,6 +61,7 @@
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include "pptexanimations.hxx"
+#include "pptx-animations.hxx"
#include "../ppt/pptanimations.hxx"
#include <com/sun/star/document/XDocumentProperties.hpp>
@@ -1108,7 +1109,7 @@ void PowerPointExport::ImplWriteSlide(sal_uInt32 nPageNum, sal_uInt32 nMasterNum
pFS->endElementNS(XML_p, XML_cSld);
WriteTransition(pFS);
- WriteAnimations(pFS);
+ WriteAnimations(pFS, mXDrawPage, *this);
pFS->endElementNS(XML_p, XML_sld);
@@ -1929,6 +1930,16 @@ void PowerPointExport::WriteNotesMaster()
SAL_INFO("sd.eppt", "----------------");
}
+sal_Int32 PowerPointExport::GetShapeID(const Reference<XShape>& rXShape)
+{
+ return ShapeExport::GetShapeID(rXShape, &maShapeMap);
+}
+
+sal_Int32 PowerPointExport::GetNextAnimationNodeID()
+{
+ return mnAnimationNodeIdMax++;
+}
+
bool PowerPointExport::ImplCreateMainNotes()
{
if (mbCreateNotes)