1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkDisplayable_DEFINED
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkDisplayable_DEFINED
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkOperand.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkString.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkIntArray.h"
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRect.h"
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTDArray.h"
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkAnimateMaker;
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkApply;
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkEvents;
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstruct SkMemberInfo;
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstruct SkScriptValue;
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkOpArray; // compiled scripting experiment
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comunion SkOperand2; // compiled scripting experiment
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDisplayable {
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkDisplayable();
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkDisplayable();
351d3c411f5e4d2ad31bc92b3a85957004329ac00dtfarina@chromium.org    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child);
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool canContainDependents() const;
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool childrenNeedDisposing() const;
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void clearBounder();
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool contains(SkDisplayable* );
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual SkDisplayable* contains(const SkString& );
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual SkDisplayable* deepCopy(SkAnimateMaker* );
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void dirty();
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DUMP_ENABLED
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void dump(SkAnimateMaker* );
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void dumpAttrs(SkAnimateMaker* );
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void dumpBase(SkAnimateMaker* );
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void dumpChildren(SkAnimateMaker* maker, bool closedAngle = false );
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void dumpEnd(SkAnimateMaker* );
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void dumpEvents();
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool enable( SkAnimateMaker& );
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void enableBounder();
53d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    virtual void executeFunction(SkDisplayable* , int functionIndex,
54d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkTDArray<SkScriptValue>& , SkDisplayTypes , SkScriptValue* );
55d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    void executeFunction(SkDisplayable* , const SkMemberInfo* ,
56d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkTypedArray* , SkScriptValue* );
57d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    virtual void executeFunction2(SkDisplayable* , int functionIndex,
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkOpArray* params , SkDisplayTypes , SkOperand2* ); // compiled scripting experiment
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void getBounds(SkRect* );
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual const SkFunctionParamType* getFunctionsParameters();
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual const SkMemberInfo* getMember(int index);
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual const SkMemberInfo* getMember(const char name[]);
63d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    const SkFunctionParamType* getParameters(const SkMemberInfo* info,
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        int* paramCount);
658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual SkDisplayable* getParent() const;
668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool getProperty(int index, SkScriptValue* value) const;
678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool getProperty2(int index, SkOperand2* value) const;    // compiled scripting experiment
688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual SkDisplayTypes getType() const;
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool hasEnable() const;
70d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    bool isAnimate() const {
71d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkDisplayTypes type = getType();
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        return type == SkType_Animate || type == SkType_Set; }
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool isApply() const { return getType() == SkType_Apply; }
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool isColor() const { return getType() == SkType_Color; }
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool isDrawable() const;
76d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    bool isGroup() const { return getType() == SkType_Group ||
778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        getType() == SkType_Save || getType() == SkType_DrawTo ||
788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        getType() == SkType_SaveLayer; }
798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool isMatrix() const { return getType() == SkType_Matrix; }
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool isPaint() const { return getType() == SkType_Paint; }
818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool isPath() const { return false; }
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool isPost() const { return getType() == SkType_Post; }
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onEndElement(SkAnimateMaker& );
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual const SkMemberInfo* preferredChild(SkDisplayTypes type);
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* );
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void setChildHasID();
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool setParent(SkDisplayable* );
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool setProperty(int index, SkScriptValue& );
898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void setReference(const SkMemberInfo* info, SkDisplayable* ref);
908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG
918d0b5770f8fcfdeb8ad9808e58c49116f14b6190reed@google.com    bool isDataInput() const { return getType() == SkType_DataInput; };
928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool isEvent() const { return getType() == SkType_Event; }
938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool isMatrixPart() const { return false; }
948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    bool isPatch() const { return getType() == SkType_3D_Patch; }
958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool isPaintPart() const { return false; }
968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool isPathPart() const { return false; }
978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void validate();
988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkString _id;
998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    const char* id;
1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//  static int fAllocationCount;
1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    static SkTDDisplayableArray fAllocations;
1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void validate() {}
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DUMP_ENABLED
1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void dumpValues(const SkMemberInfo* info, SkDisplayTypes type, SkOperand op, SkOperand blankOp,
1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkOperand op2, SkOperand blankOp2);
1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif // SkDisplayable_DEFINED
113