| Index: skia/animator/SkDisplayType.cpp
|
| ===================================================================
|
| --- skia/animator/SkDisplayType.cpp (revision 16859)
|
| +++ skia/animator/SkDisplayType.cpp (working copy)
|
| @@ -1,774 +0,0 @@
|
| -/* libs/graphics/animator/SkDisplayType.cpp
|
| -**
|
| -** Copyright 2006, The Android Open Source Project
|
| -**
|
| -** Licensed under the Apache License, Version 2.0 (the "License");
|
| -** you may not use this file except in compliance with the License.
|
| -** You may obtain a copy of the License at
|
| -**
|
| -** http://www.apache.org/licenses/LICENSE-2.0
|
| -**
|
| -** Unless required by applicable law or agreed to in writing, software
|
| -** distributed under the License is distributed on an "AS IS" BASIS,
|
| -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -** See the License for the specific language governing permissions and
|
| -** limitations under the License.
|
| -*/
|
| -
|
| -#include "SkDisplayType.h"
|
| -#include "SkAnimateMaker.h"
|
| -#include "SkAnimateSet.h"
|
| -#include "SkDisplayAdd.h"
|
| -#include "SkDisplayApply.h"
|
| -#include "SkDisplayBounds.h"
|
| -#include "SkDisplayEvent.h"
|
| -#include "SkDisplayInclude.h"
|
| -#ifdef SK_DEBUG
|
| -#include "SkDisplayList.h"
|
| -#endif
|
| -#include "SkDisplayMath.h"
|
| -#include "SkDisplayMovie.h"
|
| -#include "SkDisplayNumber.h"
|
| -#include "SkDisplayPost.h"
|
| -#include "SkDisplayRandom.h"
|
| -#include "SkDisplayTypes.h"
|
| -#include "SkDraw3D.h"
|
| -#include "SkDrawBitmap.h"
|
| -#include "SkDrawClip.h"
|
| -#include "SkDrawDash.h"
|
| -#include "SkDrawDiscrete.h"
|
| -#include "SkDrawEmboss.h"
|
| -#include "SkDrawFull.h"
|
| -#include "SkDrawGradient.h"
|
| -#include "SkDrawLine.h"
|
| -#include "SkDrawMatrix.h"
|
| -#include "SkDrawOval.h"
|
| -#include "SkDrawPaint.h"
|
| -#include "SkDrawPath.h"
|
| -#include "SkDrawPoint.h"
|
| -#include "SkDrawSaveLayer.h"
|
| -#include "SkDrawText.h"
|
| -#include "SkDrawTextBox.h"
|
| -#include "SkDrawTo.h"
|
| -#include "SkDrawTransparentShader.h"
|
| -#include "SkDump.h"
|
| -#include "SkExtras.h"
|
| -#include "SkHitClear.h"
|
| -#include "SkHitTest.h"
|
| -#include "SkMatrixParts.h"
|
| -#include "SkPathParts.h"
|
| -#include "SkPostParts.h"
|
| -#include "SkSnapshot.h"
|
| -#include "SkTextOnPath.h"
|
| -#include "SkTextToPath.h"
|
| -#include "SkTSearch.h"
|
| -
|
| -#define CASE_NEW(_class) \
|
| - case SkType_##_class: result = new Sk##_class(); break
|
| -#define CASE_DRAW_NEW(_class) \
|
| - case SkType_##_class: result = new SkDraw##_class(); break
|
| -#define CASE_DISPLAY_NEW(_class) \
|
| - case SkType_##_class: result = new SkDisplay##_class(); break
|
| -#ifdef SK_DEBUG
|
| - #define CASE_DEBUG_RETURN_NIL(_class) \
|
| - case SkType_##_class: return NULL
|
| -#else
|
| - #define CASE_DEBUG_RETURN_NIL(_class)
|
| -#endif
|
| -
|
| -
|
| -SkDisplayTypes SkDisplayType::gNewTypes = kNumberOfTypes;
|
| -
|
| -SkDisplayable* SkDisplayType::CreateInstance(SkAnimateMaker* maker, SkDisplayTypes type) {
|
| - SkDisplayable* result = NULL;
|
| - switch (type) {
|
| - // unknown
|
| - CASE_DISPLAY_NEW(Math);
|
| - CASE_DISPLAY_NEW(Number);
|
| - CASE_NEW(Add);
|
| - CASE_NEW(AddCircle);
|
| - // addgeom
|
| - CASE_DEBUG_RETURN_NIL(AddMode);
|
| - CASE_NEW(AddOval);
|
| - CASE_NEW(AddPath);
|
| - CASE_NEW(AddRect);
|
| - CASE_NEW(AddRoundRect);
|
| - CASE_DEBUG_RETURN_NIL(Align);
|
| - CASE_NEW(Animate);
|
| - // animatebase
|
| - CASE_NEW(Apply);
|
| - CASE_DEBUG_RETURN_NIL(ApplyMode);
|
| - CASE_DEBUG_RETURN_NIL(ApplyTransition);
|
| - CASE_DISPLAY_NEW(Array);
|
| - // argb
|
| - // base64
|
| - // basebitmap
|
| - // baseclassinfo
|
| - CASE_DRAW_NEW(Bitmap);
|
| - // bitmapencoding
|
| - // bitmapformat
|
| - CASE_DRAW_NEW(BitmapShader);
|
| - CASE_DRAW_NEW(Blur);
|
| - CASE_DISPLAY_NEW(Boolean);
|
| - // boundable
|
| - CASE_DISPLAY_NEW(Bounds);
|
| - CASE_DEBUG_RETURN_NIL(Cap);
|
| - CASE_NEW(Clear);
|
| - CASE_DRAW_NEW(Clip);
|
| - CASE_NEW(Close);
|
| - CASE_DRAW_NEW(Color);
|
| - CASE_NEW(CubicTo);
|
| - CASE_NEW(Dash);
|
| - CASE_NEW(Data);
|
| - CASE_NEW(Discrete);
|
| - // displayable
|
| - // drawable
|
| - CASE_NEW(DrawTo);
|
| - CASE_NEW(Dump);
|
| - // dynamicstring
|
| - CASE_DRAW_NEW(Emboss);
|
| - CASE_DISPLAY_NEW(Event);
|
| - CASE_DEBUG_RETURN_NIL(EventCode);
|
| - CASE_DEBUG_RETURN_NIL(EventKind);
|
| - CASE_DEBUG_RETURN_NIL(EventMode);
|
| - // filltype
|
| - // filtertype
|
| - CASE_DISPLAY_NEW(Float);
|
| - CASE_NEW(FromPath);
|
| - CASE_DEBUG_RETURN_NIL(FromPathMode);
|
| - CASE_NEW(Full);
|
| - // gradient
|
| - CASE_NEW(Group);
|
| - CASE_NEW(HitClear);
|
| - CASE_NEW(HitTest);
|
| - CASE_NEW(Image);
|
| - CASE_NEW(Include);
|
| - CASE_NEW(Input);
|
| - CASE_DISPLAY_NEW(Int);
|
| - CASE_DEBUG_RETURN_NIL(Join);
|
| - CASE_NEW(Line);
|
| - CASE_NEW(LineTo);
|
| - CASE_NEW(LinearGradient);
|
| - CASE_DRAW_NEW(MaskFilter);
|
| - CASE_DEBUG_RETURN_NIL(MaskFilterBlurStyle);
|
| - // maskfilterlight
|
| - CASE_DRAW_NEW(Matrix);
|
| - // memberfunction
|
| - // memberproperty
|
| - CASE_NEW(Move);
|
| - CASE_NEW(MoveTo);
|
| - CASE_DISPLAY_NEW(Movie);
|
| - // msec
|
| - CASE_NEW(Oval);
|
| - CASE_DRAW_NEW(Paint);
|
| - CASE_DRAW_NEW(Path);
|
| - // pathdirection
|
| - CASE_DRAW_NEW(PathEffect);
|
| - // point
|
| - CASE_NEW(DrawPoint);
|
| - CASE_NEW(PolyToPoly);
|
| - CASE_NEW(Polygon);
|
| - CASE_NEW(Polyline);
|
| - CASE_NEW(Post);
|
| - CASE_NEW(QuadTo);
|
| - CASE_NEW(RCubicTo);
|
| - CASE_NEW(RLineTo);
|
| - CASE_NEW(RMoveTo);
|
| - CASE_NEW(RQuadTo);
|
| - CASE_NEW(RadialGradient);
|
| - CASE_DISPLAY_NEW(Random);
|
| - CASE_DRAW_NEW(Rect);
|
| - CASE_NEW(RectToRect);
|
| - CASE_NEW(Remove);
|
| - CASE_NEW(Replace);
|
| - CASE_NEW(Rotate);
|
| - CASE_NEW(RoundRect);
|
| - CASE_NEW(Save);
|
| - CASE_NEW(SaveLayer);
|
| - CASE_NEW(Scale);
|
| - // screenplay
|
| - CASE_NEW(Set);
|
| - CASE_DRAW_NEW(Shader);
|
| - CASE_NEW(Skew);
|
| - CASE_NEW(3D_Camera);
|
| - CASE_NEW(3D_Patch);
|
| - // 3dpoint
|
| - CASE_NEW(Snapshot);
|
| - CASE_DISPLAY_NEW(String);
|
| - // style
|
| - CASE_NEW(Text);
|
| - CASE_DRAW_NEW(TextBox);
|
| - // textboxalign
|
| - // textboxmode
|
| - CASE_NEW(TextOnPath);
|
| - CASE_NEW(TextToPath);
|
| - CASE_DEBUG_RETURN_NIL(TileMode);
|
| - CASE_NEW(Translate);
|
| - CASE_DRAW_NEW(TransparentShader);
|
| - CASE_DRAW_NEW(Typeface);
|
| - CASE_DEBUG_RETURN_NIL(Xfermode);
|
| - default:
|
| - SkExtras** end = maker->fExtras.end();
|
| - for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
|
| - if ((result = (*extraPtr)->createInstance(type)) != NULL)
|
| - return result;
|
| - }
|
| - SkASSERT(0);
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -#undef CASE_NEW
|
| -#undef CASE_DRAW_NEW
|
| -#undef CASE_DISPLAY_NEW
|
| -
|
| -#if SK_USE_CONDENSED_INFO == 0
|
| -
|
| -#define CASE_GET_INFO(_class) case SkType_##_class: \
|
| - info = Sk##_class::fInfo; infoCount = Sk##_class::fInfoCount; break
|
| -#define CASE_GET_DRAW_INFO(_class) case SkType_##_class: \
|
| - info = SkDraw##_class::fInfo; infoCount = SkDraw##_class::fInfoCount; break
|
| -#define CASE_GET_DISPLAY_INFO(_class) case SkType_##_class: \
|
| - info = SkDisplay##_class::fInfo; infoCount = SkDisplay##_class::fInfoCount; \
|
| - break
|
| -
|
| -const SkMemberInfo* SkDisplayType::GetMembers(SkAnimateMaker* maker,
|
| - SkDisplayTypes type, int* infoCountPtr) {
|
| - const SkMemberInfo* info = NULL;
|
| - int infoCount = 0;
|
| - switch (type) {
|
| - // unknown
|
| - CASE_GET_DISPLAY_INFO(Math);
|
| - CASE_GET_DISPLAY_INFO(Number);
|
| - CASE_GET_INFO(Add);
|
| - CASE_GET_INFO(AddCircle);
|
| - CASE_GET_INFO(AddGeom);
|
| - // addmode
|
| - CASE_GET_INFO(AddOval);
|
| - CASE_GET_INFO(AddPath);
|
| - CASE_GET_INFO(AddRect);
|
| - CASE_GET_INFO(AddRoundRect);
|
| - // align
|
| - CASE_GET_INFO(Animate);
|
| - CASE_GET_INFO(AnimateBase);
|
| - CASE_GET_INFO(Apply);
|
| - // applymode
|
| - // applytransition
|
| - CASE_GET_DISPLAY_INFO(Array);
|
| - // argb
|
| - // base64
|
| - CASE_GET_INFO(BaseBitmap);
|
| - // baseclassinfo
|
| - CASE_GET_DRAW_INFO(Bitmap);
|
| - // bitmapencoding
|
| - // bitmapformat
|
| - CASE_GET_DRAW_INFO(BitmapShader);
|
| - CASE_GET_DRAW_INFO(Blur);
|
| - CASE_GET_DISPLAY_INFO(Boolean);
|
| - // boundable
|
| - CASE_GET_DISPLAY_INFO(Bounds);
|
| - // cap
|
| - // clear
|
| - CASE_GET_DRAW_INFO(Clip);
|
| - // close
|
| - CASE_GET_DRAW_INFO(Color);
|
| - CASE_GET_INFO(CubicTo);
|
| - CASE_GET_INFO(Dash);
|
| - CASE_GET_INFO(Data);
|
| - CASE_GET_INFO(Discrete);
|
| - // displayable
|
| - // drawable
|
| - CASE_GET_INFO(DrawTo);
|
| - CASE_GET_INFO(Dump);
|
| - // dynamicstring
|
| - CASE_GET_DRAW_INFO(Emboss);
|
| - CASE_GET_DISPLAY_INFO(Event);
|
| - // eventcode
|
| - // eventkind
|
| - // eventmode
|
| - // filltype
|
| - // filtertype
|
| - CASE_GET_DISPLAY_INFO(Float);
|
| - CASE_GET_INFO(FromPath);
|
| - // frompathmode
|
| - // full
|
| - CASE_GET_INFO(Gradient);
|
| - CASE_GET_INFO(Group);
|
| - CASE_GET_INFO(HitClear);
|
| - CASE_GET_INFO(HitTest);
|
| - CASE_GET_INFO(Image);
|
| - CASE_GET_INFO(Include);
|
| - CASE_GET_INFO(Input);
|
| - CASE_GET_DISPLAY_INFO(Int);
|
| - // join
|
| - CASE_GET_INFO(Line);
|
| - CASE_GET_INFO(LineTo);
|
| - CASE_GET_INFO(LinearGradient);
|
| - // maskfilter
|
| - // maskfilterblurstyle
|
| - // maskfilterlight
|
| - CASE_GET_DRAW_INFO(Matrix);
|
| - // memberfunction
|
| - // memberproperty
|
| - CASE_GET_INFO(Move);
|
| - CASE_GET_INFO(MoveTo);
|
| - CASE_GET_DISPLAY_INFO(Movie);
|
| - // msec
|
| - CASE_GET_INFO(Oval);
|
| - CASE_GET_DRAW_INFO(Path);
|
| - CASE_GET_DRAW_INFO(Paint);
|
| - // pathdirection
|
| - // patheffect
|
| - case SkType_Point: info = Sk_Point::fInfo; infoCount = Sk_Point::fInfoCount; break; // no virtual flavor
|
| - CASE_GET_INFO(DrawPoint); // virtual flavor
|
| - CASE_GET_INFO(PolyToPoly);
|
| - CASE_GET_INFO(Polygon);
|
| - CASE_GET_INFO(Polyline);
|
| - CASE_GET_INFO(Post);
|
| - CASE_GET_INFO(QuadTo);
|
| - CASE_GET_INFO(RCubicTo);
|
| - CASE_GET_INFO(RLineTo);
|
| - CASE_GET_INFO(RMoveTo);
|
| - CASE_GET_INFO(RQuadTo);
|
| - CASE_GET_INFO(RadialGradient);
|
| - CASE_GET_DISPLAY_INFO(Random);
|
| - CASE_GET_DRAW_INFO(Rect);
|
| - CASE_GET_INFO(RectToRect);
|
| - CASE_GET_INFO(Remove);
|
| - CASE_GET_INFO(Replace);
|
| - CASE_GET_INFO(Rotate);
|
| - CASE_GET_INFO(RoundRect);
|
| - CASE_GET_INFO(Save);
|
| - CASE_GET_INFO(SaveLayer);
|
| - CASE_GET_INFO(Scale);
|
| - // screenplay
|
| - CASE_GET_INFO(Set);
|
| - CASE_GET_DRAW_INFO(Shader);
|
| - CASE_GET_INFO(Skew);
|
| - CASE_GET_INFO(3D_Camera);
|
| - CASE_GET_INFO(3D_Patch);
|
| - CASE_GET_INFO(3D_Point);
|
| - CASE_GET_INFO(Snapshot);
|
| - CASE_GET_DISPLAY_INFO(String);
|
| - // style
|
| - CASE_GET_INFO(Text);
|
| - CASE_GET_DRAW_INFO(TextBox);
|
| - // textboxalign
|
| - // textboxmode
|
| - CASE_GET_INFO(TextOnPath);
|
| - CASE_GET_INFO(TextToPath);
|
| - // tilemode
|
| - CASE_GET_INFO(Translate);
|
| - // transparentshader
|
| - CASE_GET_DRAW_INFO(Typeface);
|
| - // xfermode
|
| - // knumberoftypes
|
| - default:
|
| - if (maker) {
|
| - SkExtras** end = maker->fExtras.end();
|
| - for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
|
| - if ((info = (*extraPtr)->getMembers(type, infoCountPtr)) != NULL)
|
| - return info;
|
| - }
|
| - }
|
| - return NULL;
|
| - }
|
| - if (infoCountPtr)
|
| - *infoCountPtr = infoCount;
|
| - return info;
|
| -}
|
| -
|
| -const SkMemberInfo* SkDisplayType::GetMember(SkAnimateMaker* maker,
|
| - SkDisplayTypes type, const char** matchPtr ) {
|
| - int infoCount;
|
| - const SkMemberInfo* info = GetMembers(maker, type, &infoCount);
|
| - info = SkMemberInfo::Find(info, infoCount, matchPtr);
|
| -// SkASSERT(info);
|
| - return info;
|
| -}
|
| -
|
| -#undef CASE_GET_INFO
|
| -#undef CASE_GET_DRAW_INFO
|
| -#undef CASE_GET_DISPLAY_INFO
|
| -
|
| -#endif // SK_USE_CONDENSED_INFO == 0
|
| -
|
| -#if defined SK_DEBUG || defined SK_BUILD_CONDENSED
|
| - #define DRAW_NAME(_name, _type) {_name, _type, true, false }
|
| - #define DISPLAY_NAME(_name, _type) {_name, _type, false, true }
|
| - #define INIT_BOOL_FIELDS , false, false
|
| -#else
|
| - #define DRAW_NAME(_name, _type) {_name, _type }
|
| - #define DISPLAY_NAME(_name, _type) {_name, _type }
|
| - #define INIT_BOOL_FIELDS
|
| -#endif
|
| -
|
| -const TypeNames gTypeNames[] = {
|
| - // unknown
|
| - { "Math", SkType_Math INIT_BOOL_FIELDS },
|
| - { "Number", SkType_Number INIT_BOOL_FIELDS },
|
| - { "add", SkType_Add INIT_BOOL_FIELDS },
|
| - { "addCircle", SkType_AddCircle INIT_BOOL_FIELDS },
|
| - // addgeom
|
| - // addmode
|
| - { "addOval", SkType_AddOval INIT_BOOL_FIELDS },
|
| - { "addPath", SkType_AddPath INIT_BOOL_FIELDS },
|
| - { "addRect", SkType_AddRect INIT_BOOL_FIELDS },
|
| - { "addRoundRect", SkType_AddRoundRect INIT_BOOL_FIELDS },
|
| - // align
|
| - { "animate", SkType_Animate INIT_BOOL_FIELDS },
|
| - // animateBase
|
| - { "apply", SkType_Apply INIT_BOOL_FIELDS },
|
| - // applymode
|
| - // applytransition
|
| - { "array", SkType_Array INIT_BOOL_FIELDS },
|
| - // argb
|
| - // base64
|
| - // basebitmap
|
| - // baseclassinfo
|
| - DRAW_NAME("bitmap", SkType_Bitmap),
|
| - // bitmapencoding
|
| - // bitmapformat
|
| - DRAW_NAME("bitmapShader", SkType_BitmapShader),
|
| - DRAW_NAME("blur", SkType_Blur),
|
| - { "boolean", SkType_Boolean INIT_BOOL_FIELDS },
|
| - // boundable
|
| - DISPLAY_NAME("bounds", SkType_Bounds),
|
| - // cap
|
| - { "clear", SkType_Clear INIT_BOOL_FIELDS },
|
| - DRAW_NAME("clip", SkType_Clip),
|
| - { "close", SkType_Close INIT_BOOL_FIELDS },
|
| - DRAW_NAME("color", SkType_Color),
|
| - { "cubicTo", SkType_CubicTo INIT_BOOL_FIELDS },
|
| - { "dash", SkType_Dash INIT_BOOL_FIELDS },
|
| - { "data", SkType_Data INIT_BOOL_FIELDS },
|
| - { "discrete", SkType_Discrete INIT_BOOL_FIELDS },
|
| - // displayable
|
| - // drawable
|
| - { "drawTo", SkType_DrawTo INIT_BOOL_FIELDS },
|
| - { "dump", SkType_Dump INIT_BOOL_FIELDS },
|
| - // dynamicstring
|
| - DRAW_NAME("emboss", SkType_Emboss),
|
| - DISPLAY_NAME("event", SkType_Event),
|
| - // eventcode
|
| - // eventkind
|
| - // eventmode
|
| - // filltype
|
| - // filtertype
|
| - { "float", SkType_Float INIT_BOOL_FIELDS },
|
| - { "fromPath", SkType_FromPath INIT_BOOL_FIELDS },
|
| - // frompathmode
|
| - { "full", SkType_Full INIT_BOOL_FIELDS },
|
| - // gradient
|
| - { "group", SkType_Group INIT_BOOL_FIELDS },
|
| - { "hitClear", SkType_HitClear INIT_BOOL_FIELDS },
|
| - { "hitTest", SkType_HitTest INIT_BOOL_FIELDS },
|
| - { "image", SkType_Image INIT_BOOL_FIELDS },
|
| - { "include", SkType_Include INIT_BOOL_FIELDS },
|
| - { "input", SkType_Input INIT_BOOL_FIELDS },
|
| - { "int", SkType_Int INIT_BOOL_FIELDS },
|
| - // join
|
| - { "line", SkType_Line INIT_BOOL_FIELDS },
|
| - { "lineTo", SkType_LineTo INIT_BOOL_FIELDS },
|
| - { "linearGradient", SkType_LinearGradient INIT_BOOL_FIELDS },
|
| - { "maskFilter", SkType_MaskFilter INIT_BOOL_FIELDS },
|
| - // maskfilterblurstyle
|
| - // maskfilterlight
|
| - DRAW_NAME("matrix", SkType_Matrix),
|
| - // memberfunction
|
| - // memberproperty
|
| - { "move", SkType_Move INIT_BOOL_FIELDS },
|
| - { "moveTo", SkType_MoveTo INIT_BOOL_FIELDS },
|
| - { "movie", SkType_Movie INIT_BOOL_FIELDS },
|
| - // msec
|
| - { "oval", SkType_Oval INIT_BOOL_FIELDS },
|
| - DRAW_NAME("paint", SkType_Paint),
|
| - DRAW_NAME("path", SkType_Path),
|
| - // pathdirection
|
| - { "pathEffect", SkType_PathEffect INIT_BOOL_FIELDS },
|
| - // point
|
| - DRAW_NAME("point", SkType_DrawPoint),
|
| - { "polyToPoly", SkType_PolyToPoly INIT_BOOL_FIELDS },
|
| - { "polygon", SkType_Polygon INIT_BOOL_FIELDS },
|
| - { "polyline", SkType_Polyline INIT_BOOL_FIELDS },
|
| - { "post", SkType_Post INIT_BOOL_FIELDS },
|
| - { "quadTo", SkType_QuadTo INIT_BOOL_FIELDS },
|
| - { "rCubicTo", SkType_RCubicTo INIT_BOOL_FIELDS },
|
| - { "rLineTo", SkType_RLineTo INIT_BOOL_FIELDS },
|
| - { "rMoveTo", SkType_RMoveTo INIT_BOOL_FIELDS },
|
| - { "rQuadTo", SkType_RQuadTo INIT_BOOL_FIELDS },
|
| - { "radialGradient", SkType_RadialGradient INIT_BOOL_FIELDS },
|
| - DISPLAY_NAME("random", SkType_Random),
|
| - { "rect", SkType_Rect INIT_BOOL_FIELDS },
|
| - { "rectToRect", SkType_RectToRect INIT_BOOL_FIELDS },
|
| - { "remove", SkType_Remove INIT_BOOL_FIELDS },
|
| - { "replace", SkType_Replace INIT_BOOL_FIELDS },
|
| - { "rotate", SkType_Rotate INIT_BOOL_FIELDS },
|
| - { "roundRect", SkType_RoundRect INIT_BOOL_FIELDS },
|
| - { "save", SkType_Save INIT_BOOL_FIELDS },
|
| - { "saveLayer", SkType_SaveLayer INIT_BOOL_FIELDS },
|
| - { "scale", SkType_Scale INIT_BOOL_FIELDS },
|
| - // screenplay
|
| - { "set", SkType_Set INIT_BOOL_FIELDS },
|
| - { "shader", SkType_Shader INIT_BOOL_FIELDS },
|
| - { "skew", SkType_Skew INIT_BOOL_FIELDS },
|
| - { "skia3d:camera", SkType_3D_Camera INIT_BOOL_FIELDS },
|
| - { "skia3d:patch", SkType_3D_Patch INIT_BOOL_FIELDS },
|
| - // point
|
| - { "snapshot", SkType_Snapshot INIT_BOOL_FIELDS },
|
| - { "string", SkType_String INIT_BOOL_FIELDS },
|
| - // style
|
| - { "text", SkType_Text INIT_BOOL_FIELDS },
|
| - { "textBox", SkType_TextBox INIT_BOOL_FIELDS },
|
| - // textboxalign
|
| - // textboxmode
|
| - { "textOnPath", SkType_TextOnPath INIT_BOOL_FIELDS },
|
| - { "textToPath", SkType_TextToPath INIT_BOOL_FIELDS },
|
| - // tilemode
|
| - { "translate", SkType_Translate INIT_BOOL_FIELDS },
|
| - DRAW_NAME("transparentShader", SkType_TransparentShader),
|
| - { "typeface", SkType_Typeface INIT_BOOL_FIELDS }
|
| - // xfermode
|
| - // knumberoftypes
|
| -};
|
| -
|
| -const int kTypeNamesSize = SK_ARRAY_COUNT(gTypeNames);
|
| -
|
| -SkDisplayTypes SkDisplayType::Find(SkAnimateMaker* maker, const SkMemberInfo* match) {
|
| - for (int index = 0; index < kTypeNamesSize; index++) {
|
| - SkDisplayTypes type = gTypeNames[index].fType;
|
| - const SkMemberInfo* info = SkDisplayType::GetMembers(maker, type, NULL);
|
| - if (info == match)
|
| - return type;
|
| - }
|
| - return (SkDisplayTypes) -1;
|
| -}
|
| -
|
| -// !!! optimize this by replacing function with a byte-sized lookup table
|
| -SkDisplayTypes SkDisplayType::GetParent(SkAnimateMaker* maker, SkDisplayTypes base) {
|
| - if (base == SkType_Group || base == SkType_Save || base == SkType_SaveLayer) //!!! cheat a little until we have a lookup table
|
| - return SkType_Displayable;
|
| - if (base == SkType_Set)
|
| - return SkType_Animate; // another cheat until we have a lookup table
|
| - const SkMemberInfo* info = GetMembers(maker, base, NULL); // get info for this type
|
| - SkASSERT(info);
|
| - if (info->fType != SkType_BaseClassInfo)
|
| - return SkType_Unknown; // if no base, done
|
| - // !!! could change SK_MEMBER_INHERITED macro to take type, stuff in offset, so that
|
| - // this (and table builder) could know type without the following steps:
|
| - const SkMemberInfo* inherited = info->getInherited();
|
| - SkDisplayTypes result = (SkDisplayTypes) (SkType_Unknown + 1);
|
| - for (; result <= SkType_Xfermode; result = (SkDisplayTypes) (result + 1)) {
|
| - const SkMemberInfo* match = GetMembers(maker, result, NULL);
|
| - if (match == inherited)
|
| - break;
|
| - }
|
| - SkASSERT(result <= SkType_Xfermode);
|
| - return result;
|
| -}
|
| -
|
| -SkDisplayTypes SkDisplayType::GetType(SkAnimateMaker* maker, const char match[], size_t len ) {
|
| - int index = SkStrSearch(&gTypeNames[0].fName, kTypeNamesSize, match,
|
| - len, sizeof(gTypeNames[0]));
|
| - if (index >= 0 && index < kTypeNamesSize)
|
| - return gTypeNames[index].fType;
|
| - SkExtras** end = maker->fExtras.end();
|
| - for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
|
| - SkDisplayTypes result = (*extraPtr)->getType(match, len);
|
| - if (result != SkType_Unknown)
|
| - return result;
|
| - }
|
| - return (SkDisplayTypes) -1;
|
| -}
|
| -
|
| -bool SkDisplayType::IsEnum(SkAnimateMaker* , SkDisplayTypes type) {
|
| - switch (type) {
|
| - case SkType_AddMode:
|
| - case SkType_Align:
|
| - case SkType_ApplyMode:
|
| - case SkType_ApplyTransition:
|
| - case SkType_BitmapEncoding:
|
| - case SkType_BitmapFormat:
|
| - case SkType_Boolean:
|
| - case SkType_Cap:
|
| - case SkType_EventCode:
|
| - case SkType_EventKind:
|
| - case SkType_EventMode:
|
| - case SkType_FillType:
|
| - case SkType_FilterType:
|
| - case SkType_FontStyle:
|
| - case SkType_FromPathMode:
|
| - case SkType_Join:
|
| - case SkType_MaskFilterBlurStyle:
|
| - case SkType_PathDirection:
|
| - case SkType_Style:
|
| - case SkType_TextBoxAlign:
|
| - case SkType_TextBoxMode:
|
| - case SkType_TileMode:
|
| - case SkType_Xfermode:
|
| - return true;
|
| - default: // to avoid warnings
|
| - break;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool SkDisplayType::IsDisplayable(SkAnimateMaker* , SkDisplayTypes type) {
|
| - switch (type) {
|
| - case SkType_Add:
|
| - case SkType_AddCircle:
|
| - case SkType_AddOval:
|
| - case SkType_AddPath:
|
| - case SkType_AddRect:
|
| - case SkType_AddRoundRect:
|
| - case SkType_Animate:
|
| - case SkType_AnimateBase:
|
| - case SkType_Apply:
|
| - case SkType_BaseBitmap:
|
| - case SkType_Bitmap:
|
| - case SkType_BitmapShader:
|
| - case SkType_Blur:
|
| - case SkType_Clear:
|
| - case SkType_Clip:
|
| - case SkType_Close:
|
| - case SkType_Color:
|
| - case SkType_CubicTo:
|
| - case SkType_Dash:
|
| - case SkType_Data:
|
| - case SkType_Discrete:
|
| - case SkType_Displayable:
|
| - case SkType_Drawable:
|
| - case SkType_DrawTo:
|
| - case SkType_Emboss:
|
| - case SkType_Event:
|
| - case SkType_FromPath:
|
| - case SkType_Full:
|
| - case SkType_Group:
|
| - case SkType_Image:
|
| - case SkType_Input:
|
| - case SkType_Line:
|
| - case SkType_LineTo:
|
| - case SkType_LinearGradient:
|
| - case SkType_Matrix:
|
| - case SkType_Move:
|
| - case SkType_MoveTo:
|
| - case SkType_Movie:
|
| - case SkType_Oval:
|
| - case SkType_Paint:
|
| - case SkType_Path:
|
| - case SkType_PolyToPoly:
|
| - case SkType_Polygon:
|
| - case SkType_Polyline:
|
| - case SkType_Post:
|
| - case SkType_QuadTo:
|
| - case SkType_RCubicTo:
|
| - case SkType_RLineTo:
|
| - case SkType_RMoveTo:
|
| - case SkType_RQuadTo:
|
| - case SkType_RadialGradient:
|
| - case SkType_Random:
|
| - case SkType_Rect:
|
| - case SkType_RectToRect:
|
| - case SkType_Remove:
|
| - case SkType_Replace:
|
| - case SkType_Rotate:
|
| - case SkType_RoundRect:
|
| - case SkType_Save:
|
| - case SkType_SaveLayer:
|
| - case SkType_Scale:
|
| - case SkType_Set:
|
| - case SkType_Shader:
|
| - case SkType_Skew:
|
| - case SkType_3D_Camera:
|
| - case SkType_3D_Patch:
|
| - case SkType_Snapshot:
|
| - case SkType_Text:
|
| - case SkType_TextBox:
|
| - case SkType_TextOnPath:
|
| - case SkType_TextToPath:
|
| - case SkType_Translate:
|
| - case SkType_TransparentShader:
|
| - return true;
|
| - default: // to avoid warnings
|
| - break;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool SkDisplayType::IsStruct(SkAnimateMaker* , SkDisplayTypes type) {
|
| - switch (type) {
|
| - case SkType_Point:
|
| - case SkType_3D_Point:
|
| - return true;
|
| - default: // to avoid warnings
|
| - break;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -
|
| -SkDisplayTypes SkDisplayType::RegisterNewType() {
|
| - gNewTypes = (SkDisplayTypes) (gNewTypes + 1);
|
| - return gNewTypes;
|
| -}
|
| -
|
| -
|
| -
|
| -#ifdef SK_DEBUG
|
| -const char* SkDisplayType::GetName(SkAnimateMaker* maker, SkDisplayTypes type) {
|
| - for (int index = 0; index < kTypeNamesSize - 1; index++) {
|
| - if (gTypeNames[index].fType == type)
|
| - return gTypeNames[index].fName;
|
| - }
|
| - SkExtras** end = maker->fExtras.end();
|
| - for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
|
| - const char* result = (*extraPtr)->getName(type);
|
| - if (result != NULL)
|
| - return result;
|
| - }
|
| - return NULL;
|
| -}
|
| -#endif
|
| -
|
| -#ifdef SK_SUPPORT_UNITTEST
|
| -void SkDisplayType::UnitTest() {
|
| - SkAnimator animator;
|
| - SkAnimateMaker* maker = animator.fMaker;
|
| - int index;
|
| - for (index = 0; index < kTypeNamesSize - 1; index++) {
|
| - SkASSERT(strcmp(gTypeNames[index].fName, gTypeNames[index + 1].fName) < 0);
|
| - SkASSERT(gTypeNames[index].fType < gTypeNames[index + 1].fType);
|
| - }
|
| - for (index = 0; index < kTypeNamesSize; index++) {
|
| - SkDisplayable* test = CreateInstance(maker, gTypeNames[index].fType);
|
| - if (test == NULL)
|
| - continue;
|
| -#if defined _WIN32 && _MSC_VER >= 1300 && defined _INC_CRTDBG // only on windows, only if using "crtdbg.h"
|
| - // we know that crtdbg puts 0xfdfdfdfd at the end of the block
|
| - // look for unitialized memory, signature 0xcdcdcdcd prior to that
|
| - int* start = (int*) test;
|
| - while (*start != 0xfdfdfdfd) {
|
| - SkASSERT(*start != 0xcdcdcdcd);
|
| - start++;
|
| - }
|
| -#endif
|
| - delete test;
|
| - }
|
| - for (index = 0; index < kTypeNamesSize; index++) {
|
| - int infoCount;
|
| - const SkMemberInfo* info = GetMembers(maker, gTypeNames[index].fType, &infoCount);
|
| - if (info == NULL)
|
| - continue;
|
| -#if SK_USE_CONDENSED_INFO == 0
|
| - for (int inner = 0; inner < infoCount - 1; inner++) {
|
| - if (info[inner].fType == SkType_BaseClassInfo)
|
| - continue;
|
| - SkASSERT(strcmp(info[inner].fName, info[inner + 1].fName) < 0);
|
| - }
|
| -#endif
|
| - }
|
| -#if defined SK_DEBUG || defined SK_BUILD_CONDENSED
|
| - BuildCondensedInfo(maker);
|
| -#endif
|
| -}
|
| -#endif
|
|
|