/*
* Copyright 2006 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkDisplayApply_DEFINED
#define SkDisplayApply_DEFINED
#include "SkAnimateBase.h"
#include "SkADrawable.h"
#include "SkIntArray.h"
class SkActive;
class SkApply : public SkADrawable {
DECLARE_MEMBER_INFO(Apply);
public:
SkApply();
virtual ~SkApply();
enum Transition {
kTransition_normal,
kTransition_reverse
};
enum Mode {
kMode_create,
kMode_immediate,
//kMode_once
};
void activate(SkAnimateMaker& );
void append(SkApply* apply);
void appendActive(SkActive* );
void applyValues(int animatorIndex, SkOperand* values, int count,
SkDisplayTypes , SkMSec time);
bool contains(SkDisplayable*) override;
// void createActive(SkAnimateMaker& );
SkDisplayable* deepCopy(SkAnimateMaker* ) override;
void disable();
bool draw(SkAnimateMaker& ) override;
#ifdef SK_DUMP_ENABLED
void dump(SkAnimateMaker* ) override;
#endif
bool enable(SkAnimateMaker& ) override;
void enableCreate(SkAnimateMaker& );
void enableDynamic(SkAnimateMaker& );
void endSave(int index);
Mode getMode() { return mode; }
bool getProperty(int index, SkScriptValue* value) const override;
SkADrawable* getScope() { return scope; }
void getStep(SkScriptValue* );
SkADrawable* getTarget(SkAnimateBase* );
bool hasDelayedAnimator() const;
bool hasEnable() const override;
bool inactivate(SkAnimateMaker& maker);
void initialize() override;
bool interpolate(SkAnimateMaker& , SkMSec time);
void onEndElement(SkAnimateMaker& ) override;
const SkMemberInfo* preferredChild(SkDisplayTypes type) override;
void refresh(SkAnimateMaker& );
void reset();
bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ) override;
bool resolveField(SkAnimateMaker& , SkDisplayable* parent, SkString* str);
void save(int index);
void setEmbedded() { fEmbedded = true; }
bool setProperty(int index, SkScriptValue& ) override;
void setSteps(int _steps) override;
// virtual void setTime(SkMSec time);
#ifdef SK_DEBUG
void validate() override;
#endif
private:
SkMSec begin;
SkBool dontDraw;
SkString dynamicScope;
SkMSec interval;
Mode mode;
#if 0
SkBool pickup;
#endif
SkBool restore;
SkADrawable* scope;
int32_t steps;
Transition transition;
SkActive* fActive;
SkTDAnimateArray fAnimators;
// SkADrawable* fCurrentScope;
SkMSec fLastTime; // used only to return script property time
SkTDDrawableArray fScopes;
SkBool fAppended : 1;
SkBool fContainsScope : 1;
SkBool fDeleteScope : 1;
SkBool fEmbedded : 1;
SkBool fEnabled : 1;
SkBool fEnabling : 1; // set if calling interpolate from enable
friend class SkActive;
friend class SkDisplayList;
typedef SkADrawable INHERITED;
};
#endif // SkDisplayApply_DEFINED