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>
diff --git a/sd/source/filter/eppt/epptooxml.hxx b/sd/source/filter/eppt/epptooxml.hxx
index 97f7cf9..4f1a154 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 d9c98db..17d16de 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 0000000..738100b
--- /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 6142e15..e625a98 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)