blob: a29b2859e5a3785759a632a9750f7d36f3a04fbb [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/* libs/graphics/animator/SkDisplayType.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 SkDisplayType_DEFINED
19#define SkDisplayType_DEFINED
20
21#include "SkMath.h"
22#include "SkScalar.h"
23
24#ifdef SK_DEBUG
25 #ifdef SK_CAN_USE_FLOAT
26 #define SK_DUMP_ENABLED
27 #endif
28 #ifdef SK_BUILD_FOR_MAC
29 #define SK_FIND_LEAKS
30 #endif
31#endif
32
33#define SK_LITERAL_STR_EQUAL(str, token, len) (sizeof(str) - 1 == len \
34 && strncmp(str, token, sizeof(str) - 1) == 0)
35
36class SkAnimateMaker;
37class SkDisplayable;
38struct SkMemberInfo;
39
40enum SkDisplayTypes {
41 SkType_Unknown,
42 SkType_Math, // for ecmascript compatible Math functions and constants
43 SkType_Number, // for for ecmascript compatible Number functions and constants
44 SkType_Add,
45 SkType_AddCircle,
46 SkType_AddGeom,
47 SkType_AddMode,
48 SkType_AddOval,
49 SkType_AddPath,
50 SkType_AddRect, // path part
51 SkType_AddRoundRect,
52 SkType_Align,
53 SkType_Animate,
54 SkType_AnimateBase, // base type for animate, set
55 SkType_Apply,
56 SkType_ApplyMode,
57 SkType_ApplyTransition,
58 SkType_Array,
59 SkType_ARGB,
60 SkType_Base64,
61 SkType_BaseBitmap,
62 SkType_BaseClassInfo,
63 SkType_Bitmap,
64 SkType_BitmapEncoding,
65 SkType_BitmapFormat,
66 SkType_BitmapShader,
67 SkType_Blur,
68 SkType_Boolean, // can have values -1 (uninitialized), 0, 1
69 SkType_Boundable,
70 SkType_Bounds,
71 SkType_Cap,
72 SkType_Clear,
73 SkType_Clip,
74 SkType_Close,
75 SkType_Color,
76 SkType_CubicTo,
77 SkType_Dash,
78 SkType_Data,
79 SkType_Discrete,
80 SkType_Displayable,
81 SkType_Drawable,
82 SkType_DrawTo,
83 SkType_Dump,
84 SkType_DynamicString, // evaluate at draw time
85 SkType_Emboss,
86 SkType_Event,
87 SkType_EventCode,
88 SkType_EventKind,
89 SkType_EventMode,
90 SkType_FillType,
91 SkType_FilterType,
92 SkType_Float,
93 SkType_FontStyle,
94 SkType_FromPath,
95 SkType_FromPathMode,
96 SkType_Full,
97 SkType_Gradient,
98 SkType_Group,
99 SkType_HitClear,
100 SkType_HitTest,
101 SkType_Image,
102 SkType_Include,
103 SkType_Input,
104 SkType_Int,
105 SkType_Join,
106 SkType_Line, // simple line primitive
107 SkType_LineTo, // used as part of path construction
108 SkType_LinearGradient,
109 SkType_MaskFilter,
110 SkType_MaskFilterBlurStyle,
111 SkType_MaskFilterLight,
112 SkType_Matrix,
113 SkType_MemberFunction,
114 SkType_MemberProperty,
115 SkType_Move,
116 SkType_MoveTo,
117 SkType_Movie,
118 SkType_MSec,
119 SkType_Oval,
120 SkType_Paint,
121 SkType_Path,
122 SkType_PathDirection,
123 SkType_PathEffect,
124 SkType_Point, // used inside other structures, no vtable
125 SkType_DrawPoint, // used to draw points, has a vtable
126 SkType_PolyToPoly,
127 SkType_Polygon,
128 SkType_Polyline,
129 SkType_Post,
130 SkType_QuadTo,
131 SkType_RCubicTo,
132 SkType_RLineTo,
133 SkType_RMoveTo,
134 SkType_RQuadTo,
135 SkType_RadialGradient,
136 SkType_Random,
137 SkType_Rect,
138 SkType_RectToRect,
139 SkType_Remove,
140 SkType_Replace,
141 SkType_Rotate,
142 SkType_RoundRect,
143 SkType_Save,
144 SkType_SaveLayer,
145 SkType_Scale,
146 SkType_Screenplay,
147 SkType_Set,
148 SkType_Shader,
149 SkType_Skew,
150 SkType_3D_Camera,
151 SkType_3D_Patch,
152 SkType_3D_Point,
153 SkType_Snapshot,
154 SkType_String, // pointer to SkString
155 SkType_Style,
156 SkType_Text,
157 SkType_TextBox,
158 SkType_TextBoxAlign,
159 SkType_TextBoxMode,
160 SkType_TextOnPath,
161 SkType_TextToPath,
162 SkType_TileMode,
163 SkType_Translate,
164 SkType_TransparentShader,
165 SkType_Typeface,
166 SkType_Xfermode,
167 kNumberOfTypes
168};
169
170struct TypeNames {
171 const char* fName;
172 SkDisplayTypes fType;
173#if defined SK_DEBUG || defined SK_BUILD_CONDENSED
174 bool fDrawPrefix;
175 bool fDisplayPrefix;
176#endif
177};
178
179#ifdef SK_DEBUG
180typedef SkDisplayTypes SkFunctionParamType;
181#else
182typedef unsigned char SkFunctionParamType;
183#endif
184
185extern const TypeNames gTypeNames[];
186extern const int kTypeNamesSize;
187
188class SkDisplayType {
189public:
190 static SkDisplayTypes Find(SkAnimateMaker* , const SkMemberInfo* );
191 static const SkMemberInfo* GetMember(SkAnimateMaker* , SkDisplayTypes , const char** );
192 static const SkMemberInfo* GetMembers(SkAnimateMaker* , SkDisplayTypes , int* infoCountPtr);
193 static SkDisplayTypes GetParent(SkAnimateMaker* , SkDisplayTypes );
194 static bool IsDisplayable(SkAnimateMaker* , SkDisplayTypes );
195 static bool IsEnum(SkAnimateMaker* , SkDisplayTypes );
196 static bool IsStruct(SkAnimateMaker* , SkDisplayTypes );
197 static SkDisplayTypes RegisterNewType();
198 static SkDisplayTypes Resolve(const char[] , const SkMemberInfo** );
199#ifdef SK_DEBUG
200 static bool IsAnimate(SkDisplayTypes type ) { return type == SkType_Animate ||
201 type == SkType_Set; }
202 static const char* GetName(SkAnimateMaker* , SkDisplayTypes );
203#endif
204#ifdef SK_SUPPORT_UNITTEST
205 static void UnitTest();
206#endif
207#if defined SK_DEBUG || defined SK_BUILD_CONDENSED
208 static void BuildCondensedInfo(SkAnimateMaker* );
209#endif
210 static SkDisplayTypes GetType(SkAnimateMaker* , const char[] , size_t len);
211 static SkDisplayable* CreateInstance(SkAnimateMaker* , SkDisplayTypes );
212private:
213 static SkDisplayTypes gNewTypes;
214};
215
216#endif // SkDisplayType_DEFINED