reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame^] | 1 | /* 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 | |
| 36 | class SkAnimateMaker; |
| 37 | class SkDisplayable; |
| 38 | struct SkMemberInfo; |
| 39 | |
| 40 | enum 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 | |
| 170 | struct 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 |
| 180 | typedef SkDisplayTypes SkFunctionParamType; |
| 181 | #else |
| 182 | typedef unsigned char SkFunctionParamType; |
| 183 | #endif |
| 184 | |
| 185 | extern const TypeNames gTypeNames[]; |
| 186 | extern const int kTypeNamesSize; |
| 187 | |
| 188 | class SkDisplayType { |
| 189 | public: |
| 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 ); |
| 212 | private: |
| 213 | static SkDisplayTypes gNewTypes; |
| 214 | }; |
| 215 | |
| 216 | #endif // SkDisplayType_DEFINED |