180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkAnimateMaker_DEFINED 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkAnimateMaker_DEFINED 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// #define SK_DEBUG_ANIMATION_TIMING 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimator.h" 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBitmap.h" 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkIntArray.h" 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayEvents.h" 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayList.h" 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayScreenplay.h" 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayXMLParser.h" 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkScript.h" 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h" 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkTDict.h" 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// not sure where this little helper macro should go 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkActive; 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkAnimate; 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkCanvas; 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkDisplayable; 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkDrawable; 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkDump; 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkEvent; 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkEventSink; 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkExtras; 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkGroup; 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkPaint; 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkStream; 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkAnimateMaker { 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimateMaker(SkAnimator* animator, SkCanvas* canvas, SkPaint* paint); 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru ~SkAnimateMaker(); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void appendActive(SkActive* ); 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void childrenAdd(SkDisplayable* child) { *fChildren.append() = child; } 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void clearExtraPropertyCallBack(SkDisplayTypes type); 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool computeID(SkDisplayable* displayable, SkDisplayable* parent, SkString* newID); 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayable* createInstance(const char name[], size_t len); 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool decodeStream(SkStream* stream); 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool decodeURI(const char uri[]); 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void delayEnable(SkApply* apply, SkMSec time); 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void doDelayedEvent(); 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool doEvent(const SkEvent& event); 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void dump(const char* match); 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int dynamicProperty(SkString& nameStr, SkDisplayable** ); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool find(const char* str, SkDisplayable** displayablePtr) const { 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fIDs.find(str, displayablePtr); 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool find(const char* str, size_t len, SkDisplayable** displayablePtr) const { 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fIDs.find(str, len, displayablePtr); 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool findKey(SkDisplayable* displayable, const char** string) const { 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fIDs.findKey(displayable, string); 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// bool find(SkString& string, SkDisplayable** displayablePtr) { 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// return fIDs.find(string.c_str(), displayablePtr); 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// } 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimator* getAnimator() { return fAnimator; } 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMSec getAppTime() const; // call caller to get current time 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DEBUG 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimator* getRoot(); 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXMLParserError::ErrorCode getErrorCode() const { return fError.getErrorCode(); } 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMSec getInTime() { return fDisplayList.getTime(); } 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int getNativeCode() const { return fError.getNativeCode(); } 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool hasError() { return fError.hasError(); } 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void helperAdd(SkDisplayable* trackMe); 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void helperRemove(SkDisplayable* alreadyTracked); 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void idsSet(const char* attrValue, size_t len, SkDisplayable* displayable) { 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fIDs.set(attrValue, len, displayable); } 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// void loadMovies(); 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void notifyInval(); 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void notifyInvalTime(SkMSec time); 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void postOnEnd(SkAnimateBase* animate, SkMSec end); 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void removeActive(SkActive* ); 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void reset(); 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool resolveID(SkDisplayable* displayable, SkDisplayable* original); 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setEnableTime(SkMSec appTime, SkMSec expectedTime); 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setErrorCode(SkXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.INHERITED::setCode(err); } 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setErrorCode(SkDisplayXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.setCode(err); } 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setErrorNoun(const SkString& str) { if (fError.hasError() == false) fError.setNoun(str); } 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setErrorString(); 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setExtraPropertyCallBack(SkDisplayTypes type, SkScriptEngine::_propertyCallBack , void* userStorage); 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setID(SkDisplayable* displayable, const SkString& newID); 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setInnerError(SkAnimateMaker* maker, const SkString& str) { fError.setInnerError(maker, str); } 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void setScriptError(const SkScriptEngine& ); 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DEBUG 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void validate() { fDisplayList.validate(); } 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#else 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void validate() {} 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayEvent* fActiveEvent; 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMSec fAdjustedStart; 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkCanvas* fCanvas; 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMSec fEnableTime; 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int fEndDepth; // passed parameter to onEndElement 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkEvents fEvents; 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayList fDisplayList; 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkEventSinkID fHostEventSinkID; 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMSec fMinimumInterval; 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPaint* fPaint; 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimateMaker* fParentMaker; 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fPrefix; 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayScreenplay fScreenplay; 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkAnimator::Timeline* fTimeline; 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBool8 fInInclude; 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBool8 fInMovie; 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBool8 fFirstScriptError; 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMSec fDebugTimeBase; 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fDumpAnimated; 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBool8 fDumpEvents; 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBool8 fDumpGConditions; 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBool8 fDumpPosts; 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void deleteMembers(); 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static bool GetStep(const char* token, size_t len, void* stepPtr, SkScriptValue* ); 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimateMaker& operator=(SkAnimateMaker& ); 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDDisplayableArray fChildren; 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDDisplayableArray fDelayed; // SkApply that contain delayed enable events 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayXMLParserError fError; 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fErrorString; 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDArray<SkExtras*> fExtras; 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fFileName; 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDDisplayableArray fHelpers; // helper displayables 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBool8 fLoaded; 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDDisplayableArray fMovies; 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDict<SkDisplayable*> fIDs; 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimator* fAnimator; 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkAdd; 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkAnimateBase; 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkDisplayXMLParser; 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkAnimator; 15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkAnimatorScript; 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkApply; 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkDisplayMovie; 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkDisplayType; 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkEvents; 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend class SkGroup; 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru friend struct SkMemberInfo; 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif // SkAnimateMaker_DEFINED 161