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