/*
* 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 SkDisplayable_DEFINED
#define SkDisplayable_DEFINED
#include "SkOperand.h"
#ifdef SK_DEBUG
#include "SkString.h"
#endif
#include "SkIntArray.h"
#include "SkRect.h"
#include "SkTDArray.h"
class SkAnimateMaker;
class SkApply;
class SkEvents;
struct SkMemberInfo;
struct SkScriptValue;
class SkOpArray; // compiled scripting experiment
union SkOperand2; // compiled scripting experiment
class SkDisplayable {
public:
#ifdef SK_DEBUG
SkDisplayable();
#endif
virtual ~SkDisplayable();
virtual bool add(SkAnimateMaker& , SkDisplayable* child);
virtual bool canContainDependents() const;
virtual bool childrenNeedDisposing() const;
virtual void clearBounder();
virtual bool contains(SkDisplayable* );
virtual SkDisplayable* contains(const SkString& );
virtual SkDisplayable* deepCopy(SkAnimateMaker* );
virtual void dirty();
#ifdef SK_DUMP_ENABLED
virtual void dump(SkAnimateMaker* );
void dumpAttrs(SkAnimateMaker* );
void dumpBase(SkAnimateMaker* );
void dumpChildren(SkAnimateMaker* maker, bool closedAngle = false );
void dumpEnd(SkAnimateMaker* );
virtual void dumpEvents();
#endif
virtual bool enable( SkAnimateMaker& );
virtual void enableBounder();
virtual void executeFunction(SkDisplayable* , int functionIndex,
SkTDArray<SkScriptValue>& , SkDisplayTypes , SkScriptValue* );
void executeFunction(SkDisplayable* , const SkMemberInfo* ,
SkTypedArray* , SkScriptValue* );
virtual void executeFunction2(SkDisplayable* , int functionIndex,
SkOpArray* params , SkDisplayTypes , SkOperand2* ); // compiled scripting experiment
virtual void getBounds(SkRect* );
virtual const SkFunctionParamType* getFunctionsParameters();
virtual const SkMemberInfo* getMember(int index);
virtual const SkMemberInfo* getMember(const char name[]);
const SkFunctionParamType* getParameters(const SkMemberInfo* info,
int* paramCount);
virtual SkDisplayable* getParent() const;
virtual bool getProperty(int index, SkScriptValue* value) const;
virtual bool getProperty2(int index, SkOperand2* value) const; // compiled scripting experiment
virtual SkDisplayTypes getType() const;
virtual bool hasEnable() const;
bool isAnimate() const {
SkDisplayTypes type = getType();
return type == SkType_Animate || type == SkType_Set; }
bool isApply() const { return getType() == SkType_Apply; }
bool isColor() const { return getType() == SkType_Color; }
virtual bool isDrawable() const;
bool isGroup() const { return getType() == SkType_Group ||
getType() == SkType_Save || getType() == SkType_DrawTo ||
getType() == SkType_SaveLayer; }
bool isMatrix() const { return getType() == SkType_Matrix; }
virtual bool isPaint() const { return getType() == SkType_Paint; }
virtual bool isPath() const { return false; }
bool isPost() const { return getType() == SkType_Post; }
virtual void onEndElement(SkAnimateMaker& );
virtual const SkMemberInfo* preferredChild(SkDisplayTypes type);
virtual bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* );
virtual void setChildHasID();
virtual bool setParent(SkDisplayable* );
virtual bool setProperty(int index, SkScriptValue& );
void setReference(const SkMemberInfo* info, SkDisplayable* ref);
#ifdef SK_DEBUG
bool isDataInput() const { return getType() == SkType_DataInput; };
bool isEvent() const { return getType() == SkType_Event; }
virtual bool isMatrixPart() const { return false; }
bool isPatch() const { return getType() == SkType_3D_Patch; }
virtual bool isPaintPart() const { return false; }
virtual bool isPathPart() const { return false; }
virtual void validate();
SkString _id;
const char* id;
// static int fAllocationCount;
static SkTDDisplayableArray fAllocations;
#else
void validate() {}
#endif
#ifdef SK_DUMP_ENABLED
private:
void dumpValues(const SkMemberInfo* info, SkDisplayTypes type, SkOperand op, SkOperand blankOp,
SkOperand op2, SkOperand blankOp2);
#endif
};
#endif // SkDisplayable_DEFINED