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