| |
| /* |
| * Copyright 2006 The Android Open Source Project |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| |
| #ifndef SkDisplayType_DEFINED |
| #define SkDisplayType_DEFINED |
| |
| #include "SkMath.h" |
| #include "SkScalar.h" |
| |
| #ifdef SK_DEBUG |
| #define SK_DUMP_ENABLED |
| #ifdef SK_BUILD_FOR_MAC |
| #define SK_FIND_LEAKS |
| #endif |
| #endif |
| |
| #define SK_LITERAL_STR_EQUAL(str, token, len) (sizeof(str) - 1 == len \ |
| && strncmp(str, token, sizeof(str) - 1) == 0) |
| |
| class SkAnimateMaker; |
| class SkDisplayable; |
| struct SkMemberInfo; |
| |
| enum SkDisplayTypes { |
| SkType_Unknown, |
| SkType_Math, // for ecmascript compatible Math functions and constants |
| SkType_Number, // for for ecmascript compatible Number functions and constants |
| SkType_Add, |
| SkType_AddCircle, |
| SkType_AddGeom, |
| SkType_AddMode, |
| SkType_AddOval, |
| SkType_AddPath, |
| SkType_AddRect, // path part |
| SkType_AddRoundRect, |
| SkType_Align, |
| SkType_Animate, |
| SkType_AnimateBase, // base type for animate, set |
| SkType_Apply, |
| SkType_ApplyMode, |
| SkType_ApplyTransition, |
| SkType_Array, |
| SkType_ARGB, |
| SkType_Base64, |
| SkType_BaseBitmap, |
| SkType_BaseClassInfo, |
| SkType_Bitmap, |
| SkType_BitmapEncoding, |
| SkType_BitmapFormat, |
| SkType_BitmapShader, |
| SkType_Blur, |
| SkType_Boolean, // can have values -1 (uninitialized), 0, 1 |
| SkType_Boundable, |
| SkType_Bounds, |
| SkType_Cap, |
| SkType_Clear, |
| SkType_Clip, |
| SkType_Close, |
| SkType_Color, |
| SkType_CubicTo, |
| SkType_Dash, |
| SkType_DataInput, |
| SkType_Discrete, |
| SkType_Displayable, |
| SkType_Drawable, |
| SkType_DrawTo, |
| SkType_Dump, |
| SkType_DynamicString, // evaluate at draw time |
| SkType_Emboss, |
| SkType_Event, |
| SkType_EventCode, |
| SkType_EventKind, |
| SkType_EventMode, |
| SkType_FillType, |
| SkType_FilterType, |
| SkType_Float, |
| SkType_FontStyle, |
| SkType_FromPath, |
| SkType_FromPathMode, |
| SkType_Full, |
| SkType_DrawGradient, |
| SkType_Group, |
| SkType_HitClear, |
| SkType_HitTest, |
| SkType_ImageBaseBitmap, |
| SkType_Include, |
| SkType_Input, |
| SkType_Int, |
| SkType_Join, |
| SkType_Line, // simple line primitive |
| SkType_LineTo, // used as part of path construction |
| SkType_DrawLinearGradient, |
| SkType_MaskFilter, |
| SkType_MaskFilterBlurStyle, |
| SkType_MaskFilterLight, |
| SkType_Matrix, |
| SkType_MemberFunction, |
| SkType_MemberProperty, |
| SkType_Move, |
| SkType_MoveTo, |
| SkType_Movie, |
| SkType_MSec, |
| SkType_Oval, |
| SkType_Paint, |
| SkType_Path, |
| SkType_PathDirection, |
| SkType_PathEffect, |
| SkType_Point, // used inside other structures, no vtable |
| SkType_DrawPoint, // used to draw points, has a vtable |
| SkType_PolyToPoly, |
| SkType_Polygon, |
| SkType_Polyline, |
| SkType_Post, |
| SkType_QuadTo, |
| SkType_RCubicTo, |
| SkType_RLineTo, |
| SkType_RMoveTo, |
| SkType_RQuadTo, |
| SkType_DrawRadialGradient, |
| SkType_Random, |
| SkType_Rect, |
| SkType_RectToRect, |
| SkType_Remove, |
| SkType_Replace, |
| SkType_Rotate, |
| SkType_RoundRect, |
| SkType_Save, |
| SkType_SaveLayer, |
| SkType_Scale, |
| SkType_Screenplay, |
| SkType_Set, |
| SkType_Shader, |
| SkType_Skew, |
| SkType_3D_Camera, |
| SkType_3D_Patch, |
| SkType_3D_Point, |
| SkType_Snapshot, |
| SkType_String, // pointer to SkString |
| SkType_Style, |
| SkType_Text, |
| SkType_TextBox, |
| SkType_TextBoxAlign, |
| SkType_TextBoxMode, |
| SkType_TextOnPath, |
| SkType_TextToPath, |
| SkType_TileMode, |
| SkType_Translate, |
| SkType_TransparentShader, |
| SkType_Typeface, |
| SkType_Xfermode, |
| kNumberOfTypes |
| }; |
| |
| struct TypeNames { |
| const char* fName; |
| SkDisplayTypes fType; |
| #if defined SK_DEBUG || defined SK_BUILD_CONDENSED |
| bool fDrawPrefix; |
| bool fDisplayPrefix; |
| #endif |
| }; |
| |
| #ifdef SK_DEBUG |
| typedef SkDisplayTypes SkFunctionParamType; |
| #else |
| typedef unsigned char SkFunctionParamType; |
| #endif |
| |
| extern const TypeNames gTypeNames[]; |
| extern const int kTypeNamesSize; |
| |
| class SkDisplayType { |
| public: |
| static SkDisplayTypes Find(SkAnimateMaker* , const SkMemberInfo* ); |
| static const SkMemberInfo* GetMember(SkAnimateMaker* , SkDisplayTypes , const char** ); |
| static const SkMemberInfo* GetMembers(SkAnimateMaker* , SkDisplayTypes , int* infoCountPtr); |
| static SkDisplayTypes GetParent(SkAnimateMaker* , SkDisplayTypes ); |
| static bool IsDisplayable(SkAnimateMaker* , SkDisplayTypes ); |
| static bool IsEnum(SkAnimateMaker* , SkDisplayTypes ); |
| static bool IsStruct(SkAnimateMaker* , SkDisplayTypes ); |
| static SkDisplayTypes RegisterNewType(); |
| static SkDisplayTypes Resolve(const char[] , const SkMemberInfo** ); |
| #ifdef SK_DEBUG |
| static bool IsAnimate(SkDisplayTypes type ) { return type == SkType_Animate || |
| type == SkType_Set; } |
| static const char* GetName(SkAnimateMaker* , SkDisplayTypes ); |
| #endif |
| #ifdef SK_SUPPORT_UNITTEST |
| static void UnitTest(); |
| #endif |
| #if defined SK_DEBUG || defined SK_BUILD_CONDENSED |
| static void BuildCondensedInfo(SkAnimateMaker* ); |
| #endif |
| static SkDisplayTypes GetType(SkAnimateMaker* , const char[] , size_t len); |
| static SkDisplayable* CreateInstance(SkAnimateMaker* , SkDisplayTypes ); |
| private: |
| static SkDisplayTypes gNewTypes; |
| }; |
| |
| #endif // SkDisplayType_DEFINED |