mirror of https://github.com/axmolengine/axmol.git
170 lines
5.9 KiB
C++
170 lines
5.9 KiB
C++
/* libs/graphics/animator/SkAnimateMaker.h
|
|
**
|
|
** Copyright 2006, The Android Open Source Project
|
|
**
|
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
** you may not use this file except in compliance with the License.
|
|
** You may obtain a copy of the License at
|
|
**
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
**
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
** See the License for the specific language governing permissions and
|
|
** limitations under the License.
|
|
*/
|
|
|
|
#ifndef SkAnimateMaker_DEFINED
|
|
#define SkAnimateMaker_DEFINED
|
|
|
|
// #define SK_DEBUG_ANIMATION_TIMING
|
|
|
|
#include "SkAnimator.h"
|
|
#include "SkBitmap.h"
|
|
#include "SkIntArray.h"
|
|
#include "SkDisplayEvents.h"
|
|
#include "SkDisplayList.h"
|
|
#include "SkDisplayScreenplay.h"
|
|
#include "SkDisplayXMLParser.h"
|
|
#include "SkScript.h"
|
|
#include "SkString.h"
|
|
#include "SkTDict.h"
|
|
|
|
// not sure where this little helper macro should go
|
|
|
|
|
|
class SkActive;
|
|
class SkAnimate;
|
|
class SkCanvas;
|
|
class SkDisplayable;
|
|
class SkDrawable;
|
|
class SkDump;
|
|
class SkEvent;
|
|
class SkEventSink;
|
|
class SkExtras;
|
|
class SkGroup;
|
|
class SkPaint;
|
|
class SkStream;
|
|
|
|
class SkAnimateMaker {
|
|
public:
|
|
SkAnimateMaker(SkAnimator* animator, SkCanvas* canvas, SkPaint* paint);
|
|
~SkAnimateMaker();
|
|
void appendActive(SkActive* );
|
|
void childrenAdd(SkDisplayable* child) { *fChildren.append() = child; }
|
|
void clearExtraPropertyCallBack(SkDisplayTypes type);
|
|
bool computeID(SkDisplayable* displayable, SkDisplayable* parent, SkString* newID);
|
|
SkDisplayable* createInstance(const char name[], size_t len);
|
|
bool decodeStream(SkStream* stream);
|
|
bool decodeURI(const char uri[]);
|
|
void delayEnable(SkApply* apply, SkMSec time);
|
|
void doDelayedEvent();
|
|
bool doEvent(const SkEvent& event);
|
|
#ifdef SK_DUMP_ENABLED
|
|
void dump(const char* match);
|
|
#endif
|
|
int dynamicProperty(SkString& nameStr, SkDisplayable** );
|
|
bool find(const char* str, SkDisplayable** displayablePtr) const {
|
|
return fIDs.find(str, displayablePtr);
|
|
}
|
|
bool find(const char* str, size_t len, SkDisplayable** displayablePtr) const {
|
|
return fIDs.find(str, len, displayablePtr);
|
|
}
|
|
bool findKey(SkDisplayable* displayable, const char** string) const {
|
|
return fIDs.findKey(displayable, string);
|
|
}
|
|
// bool find(SkString& string, SkDisplayable** displayablePtr) {
|
|
// return fIDs.find(string.c_str(), displayablePtr);
|
|
// }
|
|
SkAnimator* getAnimator() { return fAnimator; }
|
|
SkMSec getAppTime() const; // call caller to get current time
|
|
#ifdef SK_DEBUG
|
|
SkAnimator* getRoot();
|
|
#endif
|
|
SkXMLParserError::ErrorCode getErrorCode() const { return fError.getErrorCode(); }
|
|
SkMSec getInTime() { return fDisplayList.getTime(); }
|
|
int getNativeCode() const { return fError.getNativeCode(); }
|
|
bool hasError() { return fError.hasError(); }
|
|
void helperAdd(SkDisplayable* trackMe);
|
|
void helperRemove(SkDisplayable* alreadyTracked);
|
|
void idsSet(const char* attrValue, size_t len, SkDisplayable* displayable) {
|
|
fIDs.set(attrValue, len, displayable); }
|
|
// void loadMovies();
|
|
void notifyInval();
|
|
void notifyInvalTime(SkMSec time);
|
|
void postOnEnd(SkAnimateBase* animate, SkMSec end);
|
|
void removeActive(SkActive* );
|
|
void reset();
|
|
bool resolveID(SkDisplayable* displayable, SkDisplayable* original);
|
|
void setEnableTime(SkMSec appTime, SkMSec expectedTime);
|
|
void setErrorCode(SkXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.INHERITED::setCode(err); }
|
|
void setErrorCode(SkDisplayXMLParserError::ErrorCode err) { if (fError.hasError() == false) fError.setCode(err); }
|
|
void setErrorNoun(const SkString& str) { if (fError.hasError() == false) fError.setNoun(str); }
|
|
void setErrorString();
|
|
void setExtraPropertyCallBack(SkDisplayTypes type, SkScriptEngine::_propertyCallBack , void* userStorage);
|
|
void setID(SkDisplayable* displayable, const SkString& newID);
|
|
void setInnerError(SkAnimateMaker* maker, const SkString& str) { fError.setInnerError(maker, str); }
|
|
void setScriptError(const SkScriptEngine& );
|
|
#ifdef SK_DEBUG
|
|
void validate() { fDisplayList.validate(); }
|
|
#else
|
|
void validate() {}
|
|
#endif
|
|
SkDisplayEvent* fActiveEvent;
|
|
SkMSec fAdjustedStart;
|
|
SkCanvas* fCanvas;
|
|
SkMSec fEnableTime;
|
|
int fEndDepth; // passed parameter to onEndElement
|
|
SkEvents fEvents;
|
|
SkDisplayList fDisplayList;
|
|
SkEventSinkID fHostEventSinkID;
|
|
SkMSec fMinimumInterval;
|
|
SkPaint* fPaint;
|
|
SkAnimateMaker* fParentMaker;
|
|
SkString fPrefix;
|
|
SkDisplayScreenplay fScreenplay;
|
|
const SkAnimator::Timeline* fTimeline;
|
|
SkBool8 fInInclude;
|
|
SkBool8 fInMovie;
|
|
SkBool8 fFirstScriptError;
|
|
#if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING
|
|
SkMSec fDebugTimeBase;
|
|
#endif
|
|
#ifdef SK_DUMP_ENABLED
|
|
SkString fDumpAnimated;
|
|
SkBool8 fDumpEvents;
|
|
SkBool8 fDumpGConditions;
|
|
SkBool8 fDumpPosts;
|
|
#endif
|
|
private:
|
|
void deleteMembers();
|
|
static bool GetStep(const char* token, size_t len, void* stepPtr, SkScriptValue* );
|
|
SkAnimateMaker& operator=(SkAnimateMaker& );
|
|
SkTDDisplayableArray fChildren;
|
|
SkTDDisplayableArray fDelayed; // SkApply that contain delayed enable events
|
|
SkDisplayXMLParserError fError;
|
|
SkString fErrorString;
|
|
SkTDArray<SkExtras*> fExtras;
|
|
SkString fFileName;
|
|
SkTDDisplayableArray fHelpers; // helper displayables
|
|
SkBool8 fLoaded;
|
|
SkTDDisplayableArray fMovies;
|
|
SkTDict<SkDisplayable*> fIDs;
|
|
SkAnimator* fAnimator;
|
|
friend class SkAdd;
|
|
friend class SkAnimateBase;
|
|
friend class SkDisplayXMLParser;
|
|
friend class SkAnimator;
|
|
friend class SkAnimatorScript;
|
|
friend class SkApply;
|
|
friend class SkDisplayMovie;
|
|
friend class SkDisplayType;
|
|
friend class SkEvents;
|
|
friend class SkGroup;
|
|
friend struct SkMemberInfo;
|
|
};
|
|
|
|
#endif // SkAnimateMaker_DEFINED
|
|
|