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