michael@0: michael@0: /* michael@0: * Copyright 2006 The Android Open Source Project michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: michael@0: #ifndef SkAnimateBase_DEFINED michael@0: #define SkAnimateBase_DEFINED michael@0: michael@0: #include "SkDisplayable.h" michael@0: #include "SkMath.h" michael@0: #include "SkMemberInfo.h" michael@0: #include "SkTypedArray.h" michael@0: michael@0: class SkApply; michael@0: class SkDrawable; michael@0: michael@0: class SkAnimateBase : public SkDisplayable { michael@0: public: michael@0: DECLARE_MEMBER_INFO(AnimateBase); michael@0: SkAnimateBase(); michael@0: virtual ~SkAnimateBase(); michael@0: virtual int components(); michael@0: virtual SkDisplayable* deepCopy(SkAnimateMaker* ); michael@0: virtual void dirty(); michael@0: #ifdef SK_DUMP_ENABLED michael@0: virtual void dump(SkAnimateMaker* ); michael@0: #endif michael@0: int entries() { return fValues.count() / components(); } michael@0: virtual bool hasExecute() const; michael@0: bool isDynamic() const { return SkToBool(fDynamic); } michael@0: virtual SkDisplayable* getParent() const; michael@0: virtual bool getProperty(int index, SkScriptValue* value) const; michael@0: SkMSec getStart() const { return fStart; } michael@0: SkOperand* getValues() { return fValues.begin(); } michael@0: SkDisplayTypes getValuesType() { return fValues.getType(); } michael@0: virtual void onEndElement(SkAnimateMaker& ); michael@0: void packARGB(SkScalar [], int count, SkTDOperandArray* ); michael@0: virtual void refresh(SkAnimateMaker& ); michael@0: void setChanged(bool changed) { fChanged = changed; } michael@0: void setHasEndEvent() { fHasEndEvent = true; } michael@0: virtual bool setParent(SkDisplayable* ); michael@0: virtual bool setProperty(int index, SkScriptValue& value); michael@0: void setTarget(SkAnimateMaker& ); michael@0: virtual bool targetNeedsInitialization() const; michael@0: protected: michael@0: SkMSec begin; michael@0: SkTDScalarArray blend; michael@0: SkMSec dur; michael@0: // !!! make field part of a union with fFieldInfo, or fValues, something known later? michael@0: SkString field; // temporary; once target is known, this is reset michael@0: SkString formula; michael@0: SkString from; michael@0: SkString lval; michael@0: SkScalar repeat; michael@0: SkString target; // temporary; once target is known, this is reset michael@0: SkString to; michael@0: SkApply* fApply; michael@0: const SkMemberInfo* fFieldInfo; michael@0: int fFieldOffset; michael@0: SkMSec fStart; // corrected time when this apply was enabled michael@0: SkDrawable* fTarget; michael@0: SkTypedArray fValues; michael@0: unsigned fChanged : 1; // true when value referenced by script has changed michael@0: unsigned fDelayed : 1; // enabled, but undrawn pending delay michael@0: unsigned fDynamic : 1; michael@0: unsigned fHasEndEvent : 1; michael@0: unsigned fHasValues : 1; // set if 'values' passed instead of 'to' michael@0: unsigned fMirror : 1; michael@0: unsigned fReset : 1; michael@0: unsigned fResetPending : 1; michael@0: unsigned fTargetIsScope : 1; michael@0: private: michael@0: typedef SkDisplayable INHERITED; michael@0: friend class SkActive; michael@0: friend class SkApply; michael@0: friend class SkDisplayList; michael@0: }; michael@0: michael@0: #endif // SkAnimateBase_DEFINED