sd/source/filter/eppt/epptooxml.hxx | 12 --- sd/source/filter/eppt/pptx-animations.cxx | 106 ++++++++++++++++++++++-------- sd/source/filter/eppt/pptx-animations.hxx | 23 ++++++ sd/source/filter/eppt/pptx-epptooxml.cxx | 13 +++ 4 files changed, 115 insertions(+), 39 deletions(-)
New commits: commit 76be5c31b97a37d15a3009995f4e60e4cee011ee Author: Mark Hung <mark...@gmail.com> AuthorDate: Wed Aug 29 01:21:28 2018 +0800 Commit: Mark Hung <mark...@gmail.com> CommitDate: Fri Aug 31 03:56:04 2018 +0200 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 <mark...@gmail.com> 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) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits