1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef SkAnimateActive_DEFINED 11 #define SkAnimateActive_DEFINED 12 13 #include "SkDisplayApply.h" 14 #include "SkOperandInterpolator.h" 15 #include "SkIntArray.h" 16 17 class SkAnimateMaker; 18 19 class SkActive { 20 public: 21 SkActive(SkApply& , SkAnimateMaker& ); 22 ~SkActive(); 23 void advance(); 24 void append(SkApply* ); 25 void calcDurations(int index); 26 void create(SkADrawable* scope, SkMSec time); draw()27 bool draw() { return immediate(false); } enable()28 bool enable() { return immediate(true); } 29 void init( ); 30 SkMSec getTime(SkMSec inTime, int animatorIndex); 31 void pickUp(SkActive* existing); reset()32 void reset() { fDrawIndex = 0; } 33 void setInterpolator(int index, SkOperand* from); 34 void start(); 35 #ifdef SK_DEBUG 36 void validate(); 37 #endif 38 private: 39 void appendSave(int oldCount); 40 void fixInterpolator(SkBool save); 41 bool immediate(bool enable); 42 bool initializeSave(); 43 void initState(SkApply* , int offset); 44 void resetInterpolators(); 45 void resetState(); 46 void restoreInterpolatorValues(int index); 47 void saveInterpolatorValues(int index); 48 void setSteps(int steps); 49 struct SkState { 50 // void bumpSave(); 51 SkMSec getRelativeTime(SkMSec time); 52 SkApply::Mode fMode; 53 SkApply::Transition fTransition; 54 SkBool8 fPickup; 55 SkBool8 fRestore; 56 SkBool8 fStarted; 57 SkBool8 fUnpostedEndEvent; 58 int32_t fSteps; 59 SkMSec fBegin; 60 SkMSec fStartTime; 61 SkMSec fDuration; 62 SkMSec fSave; 63 SkMSec fTicks; 64 }; 65 SkActive& operator= (const SkActive& ); 66 SkTDArray<SkOperandInterpolator*> fInterpolators; 67 SkApply& fApply; 68 SkTDArray<SkState> fState; // one per animator 69 SkTDOperandPtrArray fSaveRestore; // if apply has restore="true" 70 SkTDOperandPtrArray fSaveInterpolators; 71 SkTDAnimateArray fAnimators; 72 SkMSec fMaxTime; // greatest of all animation durations; only used by immediate mode 73 SkAnimateMaker& fMaker; 74 int fDrawIndex; 75 int fDrawMax; 76 friend class SkApply; 77 }; 78 79 #endif // SkAnimateActive_DEFINED 80