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