1 2/* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10#ifndef SkDisplayable_DEFINED 11#define SkDisplayable_DEFINED 12 13#include "SkOperand.h" 14#ifdef SK_DEBUG 15#include "SkString.h" 16#endif 17#include "SkIntArray.h" 18#include "SkRect.h" 19#include "SkTDArray.h" 20 21class SkAnimateMaker; 22class SkApply; 23class SkEvents; 24struct SkMemberInfo; 25struct SkScriptValue; 26class SkOpArray; // compiled scripting experiment 27union SkOperand2; // compiled scripting experiment 28 29class SkDisplayable { 30public: 31#ifdef SK_DEBUG 32 SkDisplayable(); 33#endif 34 virtual ~SkDisplayable(); 35 virtual bool addChild(SkAnimateMaker& , SkDisplayable* child); 36 virtual bool canContainDependents() const; 37 virtual bool childrenNeedDisposing() const; 38 virtual void clearBounder(); 39 virtual bool contains(SkDisplayable* ); 40 virtual SkDisplayable* contains(const SkString& ); 41 virtual SkDisplayable* deepCopy(SkAnimateMaker* ); 42 virtual void dirty(); 43#ifdef SK_DUMP_ENABLED 44 virtual void dump(SkAnimateMaker* ); 45 void dumpAttrs(SkAnimateMaker* ); 46 void dumpBase(SkAnimateMaker* ); 47 void dumpChildren(SkAnimateMaker* maker, bool closedAngle = false ); 48 void dumpEnd(SkAnimateMaker* ); 49 virtual void dumpEvents(); 50#endif 51 virtual bool enable( SkAnimateMaker& ); 52 virtual void enableBounder(); 53 virtual void executeFunction(SkDisplayable* , int functionIndex, 54 SkTDArray<SkScriptValue>& , SkDisplayTypes , SkScriptValue* ); 55 void executeFunction(SkDisplayable* , const SkMemberInfo* , 56 SkTypedArray* , SkScriptValue* ); 57 virtual void executeFunction2(SkDisplayable* , int functionIndex, 58 SkOpArray* params , SkDisplayTypes , SkOperand2* ); // compiled scripting experiment 59 virtual void getBounds(SkRect* ); 60 virtual const SkFunctionParamType* getFunctionsParameters(); 61 virtual const SkMemberInfo* getMember(int index); 62 virtual const SkMemberInfo* getMember(const char name[]); 63 const SkFunctionParamType* getParameters(const SkMemberInfo* info, 64 int* paramCount); 65 virtual SkDisplayable* getParent() const; 66 virtual bool getProperty(int index, SkScriptValue* value) const; 67 virtual bool getProperty2(int index, SkOperand2* value) const; // compiled scripting experiment 68 virtual SkDisplayTypes getType() const; 69 virtual bool hasEnable() const; 70 bool isAnimate() const { 71 SkDisplayTypes type = getType(); 72 return type == SkType_Animate || type == SkType_Set; } 73 bool isApply() const { return getType() == SkType_Apply; } 74 bool isColor() const { return getType() == SkType_Color; } 75 virtual bool isDrawable() const; 76 bool isGroup() const { return getType() == SkType_Group || 77 getType() == SkType_Save || getType() == SkType_DrawTo || 78 getType() == SkType_SaveLayer; } 79 bool isMatrix() const { return getType() == SkType_Matrix; } 80 virtual bool isPaint() const { return getType() == SkType_Paint; } 81 virtual bool isPath() const { return false; } 82 bool isPost() const { return getType() == SkType_Post; } 83 virtual void onEndElement(SkAnimateMaker& ); 84 virtual const SkMemberInfo* preferredChild(SkDisplayTypes type); 85 virtual bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* ); 86 virtual void setChildHasID(); 87 virtual bool setParent(SkDisplayable* ); 88 virtual bool setProperty(int index, SkScriptValue& ); 89 void setReference(const SkMemberInfo* info, SkDisplayable* ref); 90#ifdef SK_DEBUG 91 bool isDataInput() const { return getType() == SkType_DataInput; }; 92 bool isEvent() const { return getType() == SkType_Event; } 93 virtual bool isMatrixPart() const { return false; } 94 bool isPatch() const { return getType() == SkType_3D_Patch; } 95 virtual bool isPaintPart() const { return false; } 96 virtual bool isPathPart() const { return false; } 97 virtual void validate(); 98 SkString _id; 99 const char* id; 100// static int fAllocationCount; 101 static SkTDDisplayableArray fAllocations; 102#else 103 void validate() {} 104#endif 105#ifdef SK_DUMP_ENABLED 106private: 107 void dumpValues(const SkMemberInfo* info, SkDisplayTypes type, SkOperand op, SkOperand blankOp, 108 SkOperand op2, SkOperand blankOp2); 109#endif 110}; 111 112#endif // SkDisplayable_DEFINED 113