1*aaef562fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*aaef562fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*aaef562fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*aaef562fSAndrew Rist * distributed with this work for additional information 6*aaef562fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*aaef562fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*aaef562fSAndrew Rist * "License"); you may not use this file except in compliance 9*aaef562fSAndrew Rist * with the License. You may obtain a copy of the License at 10*aaef562fSAndrew Rist * 11*aaef562fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*aaef562fSAndrew Rist * 13*aaef562fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*aaef562fSAndrew Rist * software distributed under the License is distributed on an 15*aaef562fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*aaef562fSAndrew Rist * KIND, either express or implied. See the License for the 17*aaef562fSAndrew Rist * specific language governing permissions and limitations 18*aaef562fSAndrew Rist * under the License. 19*aaef562fSAndrew Rist * 20*aaef562fSAndrew Rist *************************************************************/ 21*aaef562fSAndrew Rist 22*aaef562fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef INCLUDED_SLIDESHOW_ACTIVITYBASE_HXX 25cdf0e10cSrcweir #define INCLUDED_SLIDESHOW_ACTIVITYBASE_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "animationactivity.hxx" 28cdf0e10cSrcweir #include "activityparameters.hxx" 29cdf0e10cSrcweir #include "animatableshape.hxx" 30cdf0e10cSrcweir #include "shapeattributelayer.hxx" 31cdf0e10cSrcweir 32cdf0e10cSrcweir namespace slideshow { 33cdf0e10cSrcweir namespace internal { 34cdf0e10cSrcweir 35cdf0e10cSrcweir /** Base class for animation activities. 36cdf0e10cSrcweir 37cdf0e10cSrcweir This whole class hierarchy is only for code sharing 38cdf0e10cSrcweir between the various specializations (with or without 39cdf0e10cSrcweir key times, fully discrete, etc.). 40cdf0e10cSrcweir */ 41cdf0e10cSrcweir class ActivityBase : public AnimationActivity 42cdf0e10cSrcweir { 43cdf0e10cSrcweir public: 44cdf0e10cSrcweir ActivityBase( const ActivityParameters& rParms ); 45cdf0e10cSrcweir 46cdf0e10cSrcweir /// From Disposable interface 47cdf0e10cSrcweir virtual void dispose(); 48cdf0e10cSrcweir 49cdf0e10cSrcweir protected: 50cdf0e10cSrcweir /** From Activity interface 51cdf0e10cSrcweir 52cdf0e10cSrcweir Derived classes should override, call this first 53cdf0e10cSrcweir and then perform their work. 54cdf0e10cSrcweir */ 55cdf0e10cSrcweir virtual bool perform(); 56cdf0e10cSrcweir virtual double calcTimeLag() const; 57cdf0e10cSrcweir virtual bool isActive() const; 58cdf0e10cSrcweir 59cdf0e10cSrcweir private: 60cdf0e10cSrcweir virtual void dequeued(); 61cdf0e10cSrcweir 62cdf0e10cSrcweir // From AnimationActivity interface 63cdf0e10cSrcweir virtual void setTargets( 64cdf0e10cSrcweir const AnimatableShapeSharedPtr& rShape, 65cdf0e10cSrcweir const ShapeAttributeLayerSharedPtr& rAttrLayer ); 66cdf0e10cSrcweir 67cdf0e10cSrcweir private: 68cdf0e10cSrcweir /** Hook for derived classes 69cdf0e10cSrcweir 70cdf0e10cSrcweir This method will be called from the first 71cdf0e10cSrcweir perform() invocation, to signal the start of the 72cdf0e10cSrcweir activity. 73cdf0e10cSrcweir */ 74cdf0e10cSrcweir virtual void startAnimation() = 0; 75cdf0e10cSrcweir 76cdf0e10cSrcweir /** Hook for derived classes 77cdf0e10cSrcweir 78cdf0e10cSrcweir This method will be called after the last perform() 79cdf0e10cSrcweir invocation, and after the potential changes of that 80cdf0e10cSrcweir perform() call are committed to screen. That is, in 81cdf0e10cSrcweir endAnimation(), the animation objects (sprites, 82cdf0e10cSrcweir animation) can safely be destroyed, without causing 83cdf0e10cSrcweir visible artifacts on screen. 84cdf0e10cSrcweir */ 85cdf0e10cSrcweir virtual void endAnimation() = 0; 86cdf0e10cSrcweir 87cdf0e10cSrcweir protected: 88cdf0e10cSrcweir 89cdf0e10cSrcweir /** End this activity, in a regular way. 90cdf0e10cSrcweir 91cdf0e10cSrcweir This method is for derived classes needing to signal a 92cdf0e10cSrcweir regular activity end (i.e. because the regular 93cdf0e10cSrcweir duration is over) 94cdf0e10cSrcweir */ 95cdf0e10cSrcweir void endActivity(); 96cdf0e10cSrcweir 97cdf0e10cSrcweir /** Modify fractional time. 98cdf0e10cSrcweir 99cdf0e10cSrcweir This method modifies the fractional time (total 100cdf0e10cSrcweir duration mapped to the [0,1] range) to the 101cdf0e10cSrcweir effective simple time, but only according to 102cdf0e10cSrcweir acceleration/deceleration. 103cdf0e10cSrcweir */ 104cdf0e10cSrcweir double calcAcceleratedTime( double nT ) const; 105cdf0e10cSrcweir 106cdf0e10cSrcweir bool isDisposed() const { 107cdf0e10cSrcweir return (!mbIsActive && !mpEndEvent && !mpShape && 108cdf0e10cSrcweir !mpAttributeLayer); 109cdf0e10cSrcweir } 110cdf0e10cSrcweir 111cdf0e10cSrcweir EventQueue& getEventQueue() const { return mrEventQueue; } 112cdf0e10cSrcweir 113cdf0e10cSrcweir AnimatableShapeSharedPtr getShape() const { return mpShape; } 114cdf0e10cSrcweir 115cdf0e10cSrcweir ShapeAttributeLayerSharedPtr getShapeAttributeLayer() const 116cdf0e10cSrcweir { return mpAttributeLayer; } 117cdf0e10cSrcweir 118cdf0e10cSrcweir bool isRepeatCountValid() const { return maRepeats; } 119cdf0e10cSrcweir double getRepeatCount() const { return *maRepeats; } 120cdf0e10cSrcweir bool isAutoReverse() const { return mbAutoReverse; } 121cdf0e10cSrcweir 122cdf0e10cSrcweir private: 123cdf0e10cSrcweir /// Activity: 124cdf0e10cSrcweir virtual void end(); 125cdf0e10cSrcweir virtual void performEnd() = 0; 126cdf0e10cSrcweir 127cdf0e10cSrcweir private: 128cdf0e10cSrcweir EventSharedPtr mpEndEvent; 129cdf0e10cSrcweir EventQueue& mrEventQueue; 130cdf0e10cSrcweir AnimatableShapeSharedPtr mpShape; // only to pass on to animation 131cdf0e10cSrcweir ShapeAttributeLayerSharedPtr mpAttributeLayer; // only to pass on to anim 132cdf0e10cSrcweir 133cdf0e10cSrcweir ::boost::optional<double> const maRepeats; 134cdf0e10cSrcweir const double mnAccelerationFraction; 135cdf0e10cSrcweir const double mnDecelerationFraction; 136cdf0e10cSrcweir 137cdf0e10cSrcweir const bool mbAutoReverse; 138cdf0e10cSrcweir 139cdf0e10cSrcweir // true, if perform() has not yet been called: 140cdf0e10cSrcweir mutable bool mbFirstPerformCall; 141cdf0e10cSrcweir bool mbIsActive; 142cdf0e10cSrcweir }; 143cdf0e10cSrcweir 144cdf0e10cSrcweir } // namespace internal 145cdf0e10cSrcweir } // namespace presentation 146cdf0e10cSrcweir 147cdf0e10cSrcweir #endif /* INCLUDED_SLIDESHOW_ACTIVITYBASE_HXX */ 148cdf0e10cSrcweir 149