|
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(SkDrawable* scope, SkMSec time); |
|
27 bool draw() { return immediate(false); } |
|
28 bool enable() { return immediate(true); } |
|
29 void init( ); |
|
30 SkMSec getTime(SkMSec inTime, int animatorIndex); |
|
31 void pickUp(SkActive* existing); |
|
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 |