1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/animator/SkAnimateMaker.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,160 @@ 1.4 + 1.5 +/* 1.6 + * Copyright 2006 The Android Open Source Project 1.7 + * 1.8 + * Use of this source code is governed by a BSD-style license that can be 1.9 + * found in the LICENSE file. 1.10 + */ 1.11 + 1.12 + 1.13 +#ifndef SkAnimateMaker_DEFINED 1.14 +#define SkAnimateMaker_DEFINED 1.15 + 1.16 +// #define SK_DEBUG_ANIMATION_TIMING 1.17 + 1.18 +#include "SkAnimator.h" 1.19 +#include "SkBitmap.h" 1.20 +#include "SkIntArray.h" 1.21 +#include "SkDisplayEvents.h" 1.22 +#include "SkDisplayList.h" 1.23 +#include "SkDisplayScreenplay.h" 1.24 +#include "SkDisplayXMLParser.h" 1.25 +#include "SkScript.h" 1.26 +#include "SkString.h" 1.27 +#include "SkTDict.h" 1.28 + 1.29 +// not sure where this little helper macro should go 1.30 + 1.31 + 1.32 +class SkActive; 1.33 +class SkAnimate; 1.34 +class SkCanvas; 1.35 +class SkDisplayable; 1.36 +class SkDrawable; 1.37 +class SkDump; 1.38 +class SkEvent; 1.39 +class SkEventSink; 1.40 +class SkExtras; 1.41 +class SkGroup; 1.42 +class SkPaint; 1.43 +class SkStream; 1.44 + 1.45 +class SkAnimateMaker { 1.46 +public: 1.47 + SkAnimateMaker(SkAnimator* animator, SkCanvas* canvas, SkPaint* paint); 1.48 + ~SkAnimateMaker(); 1.49 + void appendActive(SkActive* ); 1.50 + void childrenAdd(SkDisplayable* child) { *fChildren.append() = child; } 1.51 + void clearExtraPropertyCallBack(SkDisplayTypes type); 1.52 + bool computeID(SkDisplayable* displayable, SkDisplayable* parent, SkString* newID); 1.53 + SkDisplayable* createInstance(const char name[], size_t len); 1.54 + bool decodeStream(SkStream* stream); 1.55 + bool decodeURI(const char uri[]); 1.56 + void delayEnable(SkApply* apply, SkMSec time); 1.57 + void doDelayedEvent(); 1.58 + bool doEvent(const SkEvent& event); 1.59 +#ifdef SK_DUMP_ENABLED 1.60 + void dump(const char* match); 1.61 +#endif 1.62 + int dynamicProperty(SkString& nameStr, SkDisplayable** ); 1.63 + bool find(const char* str, SkDisplayable** displayablePtr) const { 1.64 + return fIDs.find(str, displayablePtr); 1.65 + } 1.66 + bool find(const char* str, size_t len, SkDisplayable** displayablePtr) const { 1.67 + return fIDs.find(str, len, displayablePtr); 1.68 + } 1.69 + bool findKey(SkDisplayable* displayable, const char** string) const { 1.70 + return fIDs.findKey(displayable, string); 1.71 + } 1.72 +// bool find(SkString& string, SkDisplayable** displayablePtr) { 1.73 +// return fIDs.find(string.c_str(), displayablePtr); 1.74 +// } 1.75 + SkAnimator* getAnimator() { return fAnimator; } 1.76 + SkMSec getAppTime() const; // call caller to get current time 1.77 +#ifdef SK_DEBUG 1.78 + SkAnimator* getRoot(); 1.79 +#endif 1.80 + SkXMLParserError::ErrorCode getErrorCode() const { return fError.getErrorCode(); } 1.81 + SkMSec getInTime() { return fDisplayList.getTime(); } 1.82 + int getNativeCode() const { return fError.getNativeCode(); } 1.83 + bool hasError() { return fError.hasError(); } 1.84 + void helperAdd(SkDisplayable* trackMe); 1.85 + void helperRemove(SkDisplayable* alreadyTracked); 1.86 + void idsSet(const char* attrValue, size_t len, SkDisplayable* displayable) { 1.87 + fIDs.set(attrValue, len, displayable); } 1.88 +// void loadMovies(); 1.89 + void notifyInval(); 1.90 + void notifyInvalTime(SkMSec time); 1.91 + void postOnEnd(SkAnimateBase* animate, SkMSec end); 1.92 + void removeActive(SkActive* ); 1.93 + void reset(); 1.94 + bool resolveID(SkDisplayable* displayable, SkDisplayable* original); 1.95 + void setEnableTime(SkMSec appTime, SkMSec expectedTime); 1.96 + void setErrorCode(SkXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.INHERITED::setCode(err); } 1.97 + void setErrorCode(SkDisplayXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.setCode(err); } 1.98 + void setErrorNoun(const SkString& str) { if (fError.hasError() == false) fError.setNoun(str); } 1.99 + void setErrorString(); 1.100 + void setExtraPropertyCallBack(SkDisplayTypes type, SkScriptEngine::_propertyCallBack , void* userStorage); 1.101 + void setID(SkDisplayable* displayable, const SkString& newID); 1.102 + void setInnerError(SkAnimateMaker* maker, const SkString& str) { fError.setInnerError(maker, str); } 1.103 + void setScriptError(const SkScriptEngine& ); 1.104 +#ifdef SK_DEBUG 1.105 + void validate() { fDisplayList.validate(); } 1.106 +#else 1.107 + void validate() {} 1.108 +#endif 1.109 + SkDisplayEvent* fActiveEvent; 1.110 + SkMSec fAdjustedStart; 1.111 + SkCanvas* fCanvas; 1.112 + SkMSec fEnableTime; 1.113 + int fEndDepth; // passed parameter to onEndElement 1.114 + SkEvents fEvents; 1.115 + SkDisplayList fDisplayList; 1.116 + SkEventSinkID fHostEventSinkID; 1.117 + SkMSec fMinimumInterval; 1.118 + SkPaint* fPaint; 1.119 + SkAnimateMaker* fParentMaker; 1.120 + SkString fPrefix; 1.121 + SkDisplayScreenplay fScreenplay; 1.122 + const SkAnimator::Timeline* fTimeline; 1.123 + SkBool8 fInInclude; 1.124 + SkBool8 fInMovie; 1.125 + SkBool8 fFirstScriptError; 1.126 +#if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING 1.127 + SkMSec fDebugTimeBase; 1.128 +#endif 1.129 +#ifdef SK_DUMP_ENABLED 1.130 + SkString fDumpAnimated; 1.131 + SkBool8 fDumpEvents; 1.132 + SkBool8 fDumpGConditions; 1.133 + SkBool8 fDumpPosts; 1.134 +#endif 1.135 +private: 1.136 + void deleteMembers(); 1.137 + static bool GetStep(const char* token, size_t len, void* stepPtr, SkScriptValue* ); 1.138 + SkAnimateMaker& operator=(SkAnimateMaker& ); 1.139 + SkTDDisplayableArray fChildren; 1.140 + SkTDDisplayableArray fDelayed; // SkApply that contain delayed enable events 1.141 + SkDisplayXMLParserError fError; 1.142 + SkString fErrorString; 1.143 + SkTDArray<SkExtras*> fExtras; 1.144 + SkString fFileName; 1.145 + SkTDDisplayableArray fHelpers; // helper displayables 1.146 + SkBool8 fLoaded; 1.147 + SkTDDisplayableArray fMovies; 1.148 + SkTDict<SkDisplayable*> fIDs; 1.149 + SkAnimator* fAnimator; 1.150 + friend class SkAdd; 1.151 + friend class SkAnimateBase; 1.152 + friend class SkDisplayXMLParser; 1.153 + friend class SkAnimator; 1.154 + friend class SkAnimatorScript; 1.155 + friend class SkApply; 1.156 + friend class SkDisplayMovie; 1.157 + friend class SkDisplayType; 1.158 + friend class SkEvents; 1.159 + friend class SkGroup; 1.160 + friend struct SkMemberInfo; 1.161 +}; 1.162 + 1.163 +#endif // SkAnimateMaker_DEFINED