blob: b0c4483521ee33f260e25b97cd8421d2d7384982 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/* libs/graphics/animator/SkAnimateActive.h
2**
3** Copyright 2006, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#ifndef SkAnimateActive_DEFINED
19#define SkAnimateActive_DEFINED
20
21#include "SkDisplayApply.h"
22#include "SkOperandInterpolator.h"
23#include "SkIntArray.h"
24
25class SkAnimateMaker;
26
27class SkActive {
28public:
29 SkActive(SkApply& , SkAnimateMaker& );
30 ~SkActive();
31 void advance();
32 void append(SkApply* );
33 void calcDurations(int index);
34 void create(SkDrawable* scope, SkMSec time);
35 bool draw() { return immediate(false); }
36 bool enable() { return immediate(true); }
37 void init( );
38 SkMSec getTime(SkMSec inTime, int animatorIndex);
39 void pickUp(SkActive* existing);
40 void reset() { fDrawIndex = 0; }
41 void setInterpolator(int index, SkOperand* from);
42 void start();
43#ifdef SK_DEBUG
44 void validate();
45#endif
46private:
47 void appendSave(int oldCount);
48 void fixInterpolator(SkBool save);
49 bool immediate(bool enable);
50 bool initializeSave();
51 void initState(SkApply* , int offset);
52 void resetInterpolators();
53 void resetState();
54 void restoreInterpolatorValues(int index);
55 void saveInterpolatorValues(int index);
56 void setSteps(int steps);
57 struct SkState {
58// void bumpSave();
59 SkMSec getRelativeTime(SkMSec time);
60 SkApply::Mode fMode;
61 SkApply::Transition fTransition;
62 SkBool8 fPickup;
63 SkBool8 fRestore;
64 SkBool8 fStarted;
65 SkBool8 fUnpostedEndEvent;
66 int32_t fSteps;
67 SkMSec fBegin;
68 SkMSec fStartTime;
69 SkMSec fDuration;
70 SkMSec fSave;
71 SkMSec fTicks;
72 };
73 SkActive& operator= (const SkActive& );
74 SkTDArray<SkOperandInterpolator*> fInterpolators;
75 SkApply& fApply;
76 SkTDArray<SkState> fState; // one per animator
77 SkTDOperandPtrArray fSaveRestore; // if apply has restore="true"
78 SkTDOperandPtrArray fSaveInterpolators;
79 SkTDAnimateArray fAnimators;
80 SkMSec fMaxTime; // greatest of all animation durations; only used by immediate mode
81 SkAnimateMaker& fMaker;
82 int fDrawIndex;
83 int fDrawMax;
84 friend class SkApply;
85};
86
87#endif // SkAnimateActive_DEFINED