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