• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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* );
childrenAdd(SkDisplayable * child)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**  );
find(const char * str,SkDisplayable ** displayablePtr)68     bool find(const char* str, SkDisplayable** displayablePtr) const {
69         return fIDs.find(str, displayablePtr);
70     }
find(const char * str,size_t len,SkDisplayable ** displayablePtr)71     bool find(const char* str, size_t len, SkDisplayable** displayablePtr) const {
72         return fIDs.find(str, len, displayablePtr);
73     }
findKey(SkDisplayable * displayable,const char ** string)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 //  }
getAnimator()80     SkAnimator* getAnimator() { return fAnimator; }
81     SkMSec getAppTime() const; // call caller to get current time
82 #ifdef SK_DEBUG
83     SkAnimator* getRoot();
84 #endif
getErrorCode()85     SkXMLParserError::ErrorCode getErrorCode() const { return fError.getErrorCode(); }
getInTime()86     SkMSec getInTime() { return fDisplayList.getTime(); }
getNativeCode()87     int getNativeCode() const { return fError.getNativeCode(); }
hasError()88     bool hasError() { return fError.hasError(); }
89     void helperAdd(SkDisplayable* trackMe);
90     void helperRemove(SkDisplayable* alreadyTracked);
idsSet(const char * attrValue,size_t len,SkDisplayable * displayable)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);
setErrorCode(SkXMLParserError::ErrorCode err)101     void setErrorCode(SkXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.INHERITED::setCode(err); }
setErrorCode(SkDisplayXMLParserError::ErrorCode err)102     void setErrorCode(SkDisplayXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.setCode(err); }
setErrorNoun(const SkString & str)103     void setErrorNoun(const SkString& str) { if (fError.hasError() == false) fError.setNoun(str); }
104     void setErrorString();
105     void setExtraPropertyCallBack(SkDisplayTypes type, SkScriptEngine::_propertyCallBack , void* userStorage);
106     void setID(SkDisplayable* displayable, const SkString& newID);
setInnerError(SkAnimateMaker * maker,const SkString & str)107     void setInnerError(SkAnimateMaker* maker, const SkString& str) { fError.setInnerError(maker, str); }
108     void setScriptError(const SkScriptEngine& );
109 #ifdef SK_DEBUG
validate()110     void validate() { fDisplayList.validate(); }
111 #else
validate()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, SkScriptValue* );
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 
170