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