Home | History | Annotate | Download | only in animator
      1 /* libs/graphics/animator/SkDisplayable.h
      2 **
      3 ** Copyright 2006, The Android Open Source Project
      4 **
      5 ** Licensed under the Apache License, Version 2.0 (the "License");
      6 ** you may not use this file except in compliance with the License.
      7 ** You may obtain a copy of the License at
      8 **
      9 **     http://www.apache.org/licenses/LICENSE-2.0
     10 **
     11 ** Unless required by applicable law or agreed to in writing, software
     12 ** distributed under the License is distributed on an "AS IS" BASIS,
     13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 ** See the License for the specific language governing permissions and
     15 ** limitations under the License.
     16 */
     17 
     18 #ifndef SkDisplayable_DEFINED
     19 #define SkDisplayable_DEFINED
     20 
     21 #include "SkOperand.h"
     22 #ifdef SK_DEBUG
     23 #include "SkString.h"
     24 #endif
     25 #include "SkIntArray.h"
     26 #include "SkRect.h"
     27 #include "SkTDArray.h"
     28 
     29 class SkAnimateMaker;
     30 class SkApply;
     31 class SkEvents;
     32 struct SkMemberInfo;
     33 struct SkScriptValue;
     34 class SkOpArray; // compiled scripting experiment
     35 union SkOperand2; // compiled scripting experiment
     36 
     37 class SkDisplayable {
     38 public:
     39 #ifdef SK_DEBUG
     40     SkDisplayable();
     41 #endif
     42     virtual ~SkDisplayable();
     43     virtual bool add(SkAnimateMaker& , SkDisplayable* child);
     44     virtual bool canContainDependents() const;
     45     virtual bool childrenNeedDisposing() const;
     46     virtual void clearBounder();
     47     virtual bool contains(SkDisplayable* );
     48     virtual SkDisplayable* contains(const SkString& );
     49     virtual SkDisplayable* deepCopy(SkAnimateMaker* );
     50     virtual void dirty();
     51 #ifdef SK_DUMP_ENABLED
     52     virtual void dump(SkAnimateMaker* );
     53     void dumpAttrs(SkAnimateMaker* );
     54     void dumpBase(SkAnimateMaker* );
     55     void dumpChildren(SkAnimateMaker* maker, bool closedAngle = false );
     56     void dumpEnd(SkAnimateMaker* );
     57     virtual void dumpEvents();
     58 #endif
     59     virtual bool enable( SkAnimateMaker& );
     60     virtual void enableBounder();
     61     virtual void executeFunction(SkDisplayable* , int functionIndex,
     62         SkTDArray<SkScriptValue>& , SkDisplayTypes , SkScriptValue* );
     63     void executeFunction(SkDisplayable* , const SkMemberInfo* ,
     64         SkTypedArray* , SkScriptValue* );
     65     virtual void executeFunction2(SkDisplayable* , int functionIndex,
     66         SkOpArray* params , SkDisplayTypes , SkOperand2* ); // compiled scripting experiment
     67     virtual void getBounds(SkRect* );
     68     virtual const SkFunctionParamType* getFunctionsParameters();
     69     virtual const SkMemberInfo* getMember(int index);
     70     virtual const SkMemberInfo* getMember(const char name[]);
     71     const SkFunctionParamType* getParameters(const SkMemberInfo* info,
     72         int* paramCount);
     73     virtual SkDisplayable* getParent() const;
     74     virtual bool getProperty(int index, SkScriptValue* value) const;
     75     virtual bool getProperty2(int index, SkOperand2* value) const;    // compiled scripting experiment
     76     virtual SkDisplayTypes getType() const;
     77     virtual bool hasEnable() const;
     78     bool isAnimate() const {
     79         SkDisplayTypes type = getType();
     80         return type == SkType_Animate || type == SkType_Set; }
     81     bool isApply() const { return getType() == SkType_Apply; }
     82     bool isColor() const { return getType() == SkType_Color; }
     83     virtual bool isDrawable() const;
     84     bool isGroup() const { return getType() == SkType_Group ||
     85         getType() == SkType_Save || getType() == SkType_DrawTo ||
     86         getType() == SkType_SaveLayer; }
     87     bool isMatrix() const { return getType() == SkType_Matrix; }
     88     virtual bool isPaint() const { return getType() == SkType_Paint; }
     89     virtual bool isPath() const { return false; }
     90     bool isPost() const { return getType() == SkType_Post; }
     91     virtual void onEndElement(SkAnimateMaker& );
     92     virtual const SkMemberInfo* preferredChild(SkDisplayTypes type);
     93     virtual bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* );
     94     virtual void setChildHasID();
     95     virtual bool setParent(SkDisplayable* );
     96     virtual bool setProperty(int index, SkScriptValue& );
     97     void setReference(const SkMemberInfo* info, SkDisplayable* ref);
     98 #ifdef SK_DEBUG
     99     bool isData() const { return getType() == SkType_Data; };
    100     bool isEvent() const { return getType() == SkType_Event; }
    101     virtual bool isMatrixPart() const { return false; }
    102     bool isPatch() const { return getType() == SkType_3D_Patch; }
    103     virtual bool isPaintPart() const { return false; }
    104     virtual bool isPathPart() const { return false; }
    105     virtual void validate();
    106     SkString _id;
    107     const char* id;
    108 //  static int fAllocationCount;
    109     static SkTDDisplayableArray fAllocations;
    110 #else
    111     void validate() {}
    112 #endif
    113 #ifdef SK_DUMP_ENABLED
    114 private:
    115     void dumpValues(const SkMemberInfo* info, SkDisplayTypes type, SkOperand op, SkOperand blankOp,
    116         SkOperand op2, SkOperand blankOp2);
    117 #endif
    118 };
    119 
    120 #endif // SkDisplayable_DEFINED
    121