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 SkAnimateActive_DEFINED michael@0: #define SkAnimateActive_DEFINED michael@0: michael@0: #include "SkDisplayApply.h" michael@0: #include "SkOperandInterpolator.h" michael@0: #include "SkIntArray.h" michael@0: michael@0: class SkAnimateMaker; michael@0: michael@0: class SkActive { michael@0: public: michael@0: SkActive(SkApply& , SkAnimateMaker& ); michael@0: ~SkActive(); michael@0: void advance(); michael@0: void append(SkApply* ); michael@0: void calcDurations(int index); michael@0: void create(SkDrawable* scope, SkMSec time); michael@0: bool draw() { return immediate(false); } michael@0: bool enable() { return immediate(true); } michael@0: void init( ); michael@0: SkMSec getTime(SkMSec inTime, int animatorIndex); michael@0: void pickUp(SkActive* existing); michael@0: void reset() { fDrawIndex = 0; } michael@0: void setInterpolator(int index, SkOperand* from); michael@0: void start(); michael@0: #ifdef SK_DEBUG michael@0: void validate(); michael@0: #endif michael@0: private: michael@0: void appendSave(int oldCount); michael@0: void fixInterpolator(SkBool save); michael@0: bool immediate(bool enable); michael@0: bool initializeSave(); michael@0: void initState(SkApply* , int offset); michael@0: void resetInterpolators(); michael@0: void resetState(); michael@0: void restoreInterpolatorValues(int index); michael@0: void saveInterpolatorValues(int index); michael@0: void setSteps(int steps); michael@0: struct SkState { michael@0: // void bumpSave(); michael@0: SkMSec getRelativeTime(SkMSec time); michael@0: SkApply::Mode fMode; michael@0: SkApply::Transition fTransition; michael@0: SkBool8 fPickup; michael@0: SkBool8 fRestore; michael@0: SkBool8 fStarted; michael@0: SkBool8 fUnpostedEndEvent; michael@0: int32_t fSteps; michael@0: SkMSec fBegin; michael@0: SkMSec fStartTime; michael@0: SkMSec fDuration; michael@0: SkMSec fSave; michael@0: SkMSec fTicks; michael@0: }; michael@0: SkActive& operator= (const SkActive& ); michael@0: SkTDArray fInterpolators; michael@0: SkApply& fApply; michael@0: SkTDArray fState; // one per animator michael@0: SkTDOperandPtrArray fSaveRestore; // if apply has restore="true" michael@0: SkTDOperandPtrArray fSaveInterpolators; michael@0: SkTDAnimateArray fAnimators; michael@0: SkMSec fMaxTime; // greatest of all animation durations; only used by immediate mode michael@0: SkAnimateMaker& fMaker; michael@0: int fDrawIndex; michael@0: int fDrawMax; michael@0: friend class SkApply; michael@0: }; michael@0: michael@0: #endif // SkAnimateActive_DEFINED