Home | History | Annotate | Download | only in animator
      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
    217