143 lines
4.5 KiB
C++
143 lines
4.5 KiB
C++
/* -*- 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/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
#ifndef INCLUDED_SLIDESHOW_SOURCE_ENGINE_ANIMATIONNODES_SETACTIVITY_HXX
|
|
#define INCLUDED_SLIDESHOW_SOURCE_ENGINE_ANIMATIONNODES_SETACTIVITY_HXX
|
|
|
|
#include <comphelper/diagnose_ex.hxx>
|
|
|
|
#include <animationactivity.hxx>
|
|
#include <animatableshape.hxx>
|
|
#include <shapeattributelayer.hxx>
|
|
#include <activitiesfactory.hxx>
|
|
#include <utility>
|
|
|
|
namespace slideshow::internal {
|
|
|
|
/** Templated setter for animation values
|
|
|
|
This template class implements the AnimationActivity
|
|
interface, but only the perform() and
|
|
setAttributeLayer() methods are functional. To be used for set animations.
|
|
|
|
@see AnimationSetNode.
|
|
*/
|
|
template <class AnimationT>
|
|
class SetActivity : public AnimationActivity
|
|
{
|
|
public:
|
|
typedef ::std::shared_ptr< AnimationT > AnimationSharedPtrT;
|
|
typedef typename AnimationT::ValueType ValueT;
|
|
|
|
SetActivity( const ActivitiesFactory::CommonParameters& rParms,
|
|
AnimationSharedPtrT xAnimation,
|
|
ValueT aToValue )
|
|
: mpAnimation(std::move( xAnimation )),
|
|
mpShape(),
|
|
mpAttributeLayer(),
|
|
mpEndEvent( rParms.mpEndEvent ),
|
|
mrEventQueue( rParms.mrEventQueue ),
|
|
maToValue(std::move( aToValue )),
|
|
mbIsActive(true)
|
|
{
|
|
ENSURE_OR_THROW( mpAnimation, "Invalid animation" );
|
|
}
|
|
|
|
virtual void dispose() override
|
|
{
|
|
mbIsActive = false;
|
|
mpAnimation.reset();
|
|
mpShape.reset();
|
|
mpAttributeLayer.reset();
|
|
// discharge end event:
|
|
if (mpEndEvent && mpEndEvent->isCharged())
|
|
mpEndEvent->dispose();
|
|
mpEndEvent.reset();
|
|
}
|
|
|
|
virtual double calcTimeLag() const override
|
|
{
|
|
return 0.0;
|
|
}
|
|
|
|
virtual bool perform() override
|
|
{
|
|
if (! isActive())
|
|
return false;
|
|
// we're going inactive immediately:
|
|
mbIsActive = false;
|
|
|
|
if (mpAnimation && mpAttributeLayer && mpShape) {
|
|
mpAnimation->start( mpShape, mpAttributeLayer );
|
|
(*mpAnimation)(maToValue);
|
|
mpAnimation->end();
|
|
}
|
|
// fire end event, if any
|
|
if (mpEndEvent)
|
|
mrEventQueue.addEvent( mpEndEvent );
|
|
|
|
return false; // don't reinsert
|
|
}
|
|
|
|
virtual bool isActive() const override
|
|
{
|
|
return mbIsActive;
|
|
}
|
|
|
|
virtual void dequeued() override
|
|
{
|
|
}
|
|
|
|
virtual void end() override
|
|
{
|
|
perform();
|
|
}
|
|
|
|
virtual void setTargets( const AnimatableShapeSharedPtr& rShape,
|
|
const ShapeAttributeLayerSharedPtr& rAttrLayer ) override
|
|
{
|
|
ENSURE_OR_THROW( rShape, "Invalid shape" );
|
|
ENSURE_OR_THROW( rAttrLayer, "Invalid attribute layer" );
|
|
|
|
mpShape = rShape;
|
|
mpAttributeLayer = rAttrLayer;
|
|
}
|
|
|
|
private:
|
|
AnimationSharedPtrT mpAnimation;
|
|
AnimatableShapeSharedPtr mpShape;
|
|
ShapeAttributeLayerSharedPtr mpAttributeLayer;
|
|
EventSharedPtr mpEndEvent;
|
|
EventQueue& mrEventQueue;
|
|
ValueT maToValue;
|
|
bool mbIsActive;
|
|
};
|
|
|
|
template <class AnimationT> AnimationActivitySharedPtr makeSetActivity(
|
|
const ActivitiesFactory::CommonParameters& rParms,
|
|
const ::std::shared_ptr< AnimationT >& rAnimation,
|
|
const typename AnimationT::ValueType& rToValue )
|
|
{
|
|
return std::make_shared<SetActivity<AnimationT>>(rParms,rAnimation,rToValue);
|
|
}
|
|
|
|
} // namespace presentation::internal
|
|
|
|
#endif // INCLUDED_SLIDESHOW_SOURCE_ENGINE_ANIMATIONNODES_SETACTIVITY_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|