1/* libs/graphics/animator/SkDisplayTypes.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 SkDisplayTypes_DEFINED
19#define SkDisplayTypes_DEFINED
20
21#include "SkDisplayable.h"
22#include "SkMemberInfo.h"
23#include "SkTypedArray.h"
24
25class SkOpArray; // compiled script experiment
26
27
28class SkDisplayDepend : public SkDisplayable {
29public:
30    virtual bool canContainDependents() const;
31    void addDependent(SkDisplayable* displayable) {
32        if (fDependents.find(displayable) < 0)
33            *fDependents.append() = displayable;
34    }
35    virtual void dirty();
36private:
37    SkTDDisplayableArray fDependents;
38    typedef SkDisplayable INHERITED;
39};
40
41class SkDisplayBoolean : public SkDisplayDepend {
42    DECLARE_DISPLAY_MEMBER_INFO(Boolean);
43    SkDisplayBoolean();
44#ifdef SK_DUMP_ENABLED
45    virtual void dump(SkAnimateMaker* );
46#endif
47    SkBool value;
48    friend class SkAnimatorScript;
49    friend class SkAnimatorScript_Box;
50    friend class SkAnimatorScript_Unbox;
51    typedef SkDisplayDepend INHERITED;
52};
53
54class SkDisplayInt : public SkDisplayDepend {
55    DECLARE_DISPLAY_MEMBER_INFO(Int);
56    SkDisplayInt();
57#ifdef SK_DUMP_ENABLED
58    virtual void dump(SkAnimateMaker* );
59#endif
60private:
61    int32_t value;
62    friend class SkAnimatorScript;
63    friend class SkAnimatorScript_Box;
64    friend class SkAnimatorScript_Unbox;
65    typedef SkDisplayDepend INHERITED;
66};
67
68class SkDisplayFloat : public SkDisplayDepend {
69    DECLARE_DISPLAY_MEMBER_INFO(Float);
70    SkDisplayFloat();
71#ifdef SK_DUMP_ENABLED
72    virtual void dump(SkAnimateMaker* );
73#endif
74private:
75    SkScalar value;
76    friend class SkAnimatorScript;
77    friend class SkAnimatorScript_Box;
78    friend class SkAnimatorScript_Unbox;
79    typedef SkDisplayDepend INHERITED;
80};
81
82class SkDisplayString : public SkDisplayDepend {
83    DECLARE_DISPLAY_MEMBER_INFO(String);
84    SkDisplayString();
85    SkDisplayString(SkString& );
86    virtual void executeFunction(SkDisplayable* , int index,
87        SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
88        SkScriptValue* );
89    virtual const SkFunctionParamType* getFunctionsParameters();
90    virtual bool getProperty(int index, SkScriptValue* ) const;
91    SkString value;
92private:
93    static const SkFunctionParamType fFunctionParameters[];
94};
95
96class SkDisplayArray : public SkDisplayDepend {
97    DECLARE_DISPLAY_MEMBER_INFO(Array);
98    SkDisplayArray();
99    SkDisplayArray(SkTypedArray& );
100    SkDisplayArray(SkOpArray& ); // compiled script experiment
101    virtual ~SkDisplayArray();
102    virtual bool getProperty(int index, SkScriptValue* ) const;
103private:
104    SkTypedArray values;
105    friend class SkAnimator;
106    friend class SkAnimatorScript;
107    friend class SkAnimatorScript2;
108    friend class SkAnimatorScript_Unbox;
109    friend class SkDisplayable;
110    friend struct SkMemberInfo;
111    friend class SkScriptEngine;
112};
113
114#endif // SkDisplayTypes_DEFINED
115
116