diff options
Diffstat (limited to 'slideshow/source/engine')
-rw-r--r-- | slideshow/source/engine/animationnodes/basecontainernode.cxx | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/slideshow/source/engine/animationnodes/basecontainernode.cxx b/slideshow/source/engine/animationnodes/basecontainernode.cxx index d48df81161cb..e8e5dfbd7f88 100644 --- a/slideshow/source/engine/animationnodes/basecontainernode.cxx +++ b/slideshow/source/engine/animationnodes/basecontainernode.cxx @@ -19,6 +19,7 @@ #include <basecontainernode.hxx> +#include <com/sun/star/animations/AnimationRestart.hpp> #include <eventqueue.hxx> #include <tools.hxx> #include "nodetools.hxx" @@ -32,6 +33,19 @@ using namespace com::sun::star; namespace slideshow { namespace internal { +namespace { +bool isRepeatIndefinite(const uno::Reference<animations::XAnimationNode>& xNode) +{ + return xNode->getRepeatCount().hasValue() && isIndefiniteTiming(xNode->getRepeatCount()); +} + +bool isRestart(const uno::Reference<animations::XAnimationNode>& xNode) +{ + sal_Int16 nRestart = xNode->getRestart(); + return nRestart == animations::AnimationRestart::WHEN_NOT_ACTIVE || + nRestart == animations::AnimationRestart::ALWAYS; +} +} BaseContainerNode::BaseContainerNode( const uno::Reference< animations::XAnimationNode >& xNode, @@ -41,7 +55,8 @@ BaseContainerNode::BaseContainerNode( maChildren(), mnFinishedChildren(0), mnLeftIterations(0), - mbRepeatIndefinite(xNode->getRepeatCount().hasValue() && isIndefiniteTiming(xNode->getRepeatCount())), + mbRepeatIndefinite(isRepeatIndefinite(xNode)), + mbRestart(isRestart(xNode)), mbDurationIndefinite( isIndefiniteTiming( xNode->getEnd() ) && isIndefiniteTiming( xNode->getDuration() ) ) { @@ -144,9 +159,11 @@ bool BaseContainerNode::notifyDeactivatedChild( { mnLeftIterations -= 1.0; } - if( mnLeftIterations >= 1.0 ) + if(mnLeftIterations >= 1.0 || mbRestart) { - bFinished = false; + if (mnLeftIterations >= 1.0) + bFinished = false; + EventSharedPtr aRepetitionEvent = makeDelay( [this] () { this->repeat(); }, 0.0, |