OLD | NEW |
| (Empty) |
1 /* libs/graphics/animator/SkAnimateMaker.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 SkAnimateMaker_DEFINED | |
19 #define SkAnimateMaker_DEFINED | |
20 | |
21 // #define SK_DEBUG_ANIMATION_TIMING | |
22 | |
23 #include "SkAnimator.h" | |
24 #include "SkBitmap.h" | |
25 #include "SkIntArray.h" | |
26 #include "SkDisplayEvents.h" | |
27 #include "SkDisplayList.h" | |
28 #include "SkDisplayScreenplay.h" | |
29 #include "SkDisplayXMLParser.h" | |
30 #include "SkScript.h" | |
31 #include "SkString.h" | |
32 #include "SkTDict.h" | |
33 | |
34 // not sure where this little helper macro should go | |
35 | |
36 | |
37 class SkActive; | |
38 class SkAnimate; | |
39 class SkCanvas; | |
40 class SkDisplayable; | |
41 class SkDrawable; | |
42 class SkDump; | |
43 class SkEvent; | |
44 class SkEventSink; | |
45 class SkExtras; | |
46 class SkGroup; | |
47 class SkPaint; | |
48 class SkStream; | |
49 | |
50 class SkAnimateMaker { | |
51 public: | |
52 SkAnimateMaker(SkAnimator* animator, SkCanvas* canvas, SkPaint* paint); | |
53 ~SkAnimateMaker(); | |
54 void appendActive(SkActive* ); | |
55 void childrenAdd(SkDisplayable* child) { *fChildren.append() = child; } | |
56 void clearExtraPropertyCallBack(SkDisplayTypes type); | |
57 bool computeID(SkDisplayable* displayable, SkDisplayable* parent, SkString*
newID); | |
58 SkDisplayable* createInstance(const char name[], size_t len); | |
59 bool decodeStream(SkStream* stream); | |
60 bool decodeURI(const char uri[]); | |
61 void delayEnable(SkApply* apply, SkMSec time); | |
62 void doDelayedEvent(); | |
63 bool doEvent(const SkEvent& event); | |
64 #ifdef SK_DUMP_ENABLED | |
65 void dump(const char* match); | |
66 #endif | |
67 int dynamicProperty(SkString& nameStr, SkDisplayable** ); | |
68 bool find(const char* str, SkDisplayable** displayablePtr) const { | |
69 return fIDs.find(str, displayablePtr); | |
70 } | |
71 bool find(const char* str, size_t len, SkDisplayable** displayablePtr) const
{ | |
72 return fIDs.find(str, len, displayablePtr); | |
73 } | |
74 bool findKey(SkDisplayable* displayable, const char** string) const { | |
75 return fIDs.findKey(displayable, string); | |
76 } | |
77 // bool find(SkString& string, SkDisplayable** displayablePtr) { | |
78 // return fIDs.find(string.c_str(), displayablePtr); | |
79 // } | |
80 SkAnimator* getAnimator() { return fAnimator; } | |
81 SkMSec getAppTime() const; // call caller to get current time | |
82 #ifdef SK_DEBUG | |
83 SkAnimator* getRoot(); | |
84 #endif | |
85 SkXMLParserError::ErrorCode getErrorCode() const { return fError.getErrorCod
e(); } | |
86 SkMSec getInTime() { return fDisplayList.getTime(); } | |
87 int getNativeCode() const { return fError.getNativeCode(); } | |
88 bool hasError() { return fError.hasError(); } | |
89 void helperAdd(SkDisplayable* trackMe); | |
90 void helperRemove(SkDisplayable* alreadyTracked); | |
91 void idsSet(const char* attrValue, size_t len, SkDisplayable* displayable) {
| |
92 fIDs.set(attrValue, len, displayable); } | |
93 // void loadMovies(); | |
94 void notifyInval(); | |
95 void notifyInvalTime(SkMSec time); | |
96 void postOnEnd(SkAnimateBase* animate, SkMSec end); | |
97 void removeActive(SkActive* ); | |
98 void reset(); | |
99 bool resolveID(SkDisplayable* displayable, SkDisplayable* original); | |
100 void setEnableTime(SkMSec appTime, SkMSec expectedTime); | |
101 void setErrorCode(SkXMLParserError::ErrorCode err) { if (fError.hasError() =
= false) fError.INHERITED::setCode(err); } | |
102 void setErrorCode(SkDisplayXMLParserError::ErrorCode err) { if (fError.hasEr
ror() == false) fError.setCode(err); } | |
103 void setErrorNoun(const SkString& str) { if (fError.hasError() == false) fEr
ror.setNoun(str); } | |
104 void setErrorString(); | |
105 void setExtraPropertyCallBack(SkDisplayTypes type, SkScriptEngine::_property
CallBack , void* userStorage); | |
106 void setID(SkDisplayable* displayable, const SkString& newID); | |
107 void setInnerError(SkAnimateMaker* maker, const SkString& str) { fError.setI
nnerError(maker, str); } | |
108 void setScriptError(const SkScriptEngine& ); | |
109 #ifdef SK_DEBUG | |
110 void validate() { fDisplayList.validate(); } | |
111 #else | |
112 void validate() {} | |
113 #endif | |
114 SkDisplayEvent* fActiveEvent; | |
115 SkMSec fAdjustedStart; | |
116 SkCanvas* fCanvas; | |
117 SkMSec fEnableTime; | |
118 int fEndDepth; // passed parameter to onEndElement | |
119 SkEvents fEvents; | |
120 SkDisplayList fDisplayList; | |
121 SkEventSinkID fHostEventSinkID; | |
122 SkMSec fMinimumInterval; | |
123 SkPaint* fPaint; | |
124 SkAnimateMaker* fParentMaker; | |
125 SkString fPrefix; | |
126 SkDisplayScreenplay fScreenplay; | |
127 const SkAnimator::Timeline* fTimeline; | |
128 SkBool8 fInInclude; | |
129 SkBool8 fInMovie; | |
130 SkBool8 fFirstScriptError; | |
131 #if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING | |
132 SkMSec fDebugTimeBase; | |
133 #endif | |
134 #ifdef SK_DUMP_ENABLED | |
135 SkString fDumpAnimated; | |
136 SkBool8 fDumpEvents; | |
137 SkBool8 fDumpGConditions; | |
138 SkBool8 fDumpPosts; | |
139 #endif | |
140 private: | |
141 void deleteMembers(); | |
142 static bool GetStep(const char* token, size_t len, void* stepPtr, SkScriptVa
lue* ); | |
143 SkAnimateMaker& operator=(SkAnimateMaker& ); | |
144 SkTDDisplayableArray fChildren; | |
145 SkTDDisplayableArray fDelayed; // SkApply that contain delayed enable events | |
146 SkDisplayXMLParserError fError; | |
147 SkString fErrorString; | |
148 SkTDArray<SkExtras*> fExtras; | |
149 SkString fFileName; | |
150 SkTDDisplayableArray fHelpers; // helper displayables | |
151 SkBool8 fLoaded; | |
152 SkTDDisplayableArray fMovies; | |
153 SkTDict<SkDisplayable*> fIDs; | |
154 SkAnimator* fAnimator; | |
155 friend class SkAdd; | |
156 friend class SkAnimateBase; | |
157 friend class SkDisplayXMLParser; | |
158 friend class SkAnimator; | |
159 friend class SkAnimatorScript; | |
160 friend class SkApply; | |
161 friend class SkDisplayMovie; | |
162 friend class SkDisplayType; | |
163 friend class SkEvents; | |
164 friend class SkGroup; | |
165 friend struct SkMemberInfo; | |
166 }; | |
167 | |
168 #endif // SkAnimateMaker_DEFINED | |
169 | |
OLD | NEW |