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 21 class SkAnimateMaker; 22 class SkApply; 23 class SkEvents; 24 struct SkMemberInfo; 25 struct SkScriptValue; 26 class SkOpArray; // compiled scripting experiment 27 union SkOperand2; // compiled scripting experiment 28 29 class SkDisplayable { 30 public: 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 106 private: 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