11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayType.h"
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h"
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateSet.h"
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayAdd.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayApply.h"
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayBounds.h"
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayEvent.h"
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayInclude.h"
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayList.h"
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayMath.h"
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayMovie.h"
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayNumber.h"
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayPost.h"
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayRandom.h"
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayTypes.h"
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDraw3D.h"
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawBitmap.h"
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawClip.h"
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawDash.h"
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawDiscrete.h"
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawEmboss.h"
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawFull.h"
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawGradient.h"
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawLine.h"
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawMatrix.h"
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawOval.h"
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPaint.h"
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPath.h"
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPoint.h"
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawSaveLayer.h"
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawText.h"
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawTextBox.h"
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawTo.h"
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawTransparentShader.h"
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDump.h"
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkExtras.h"
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkHitClear.h"
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkHitTest.h"
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMatrixParts.h"
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPathParts.h"
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPostParts.h"
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkSnapshot.h"
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTextOnPath.h"
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTextToPath.h"
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTSearch.h"
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define CASE_NEW(_class) \
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    case SkType_##_class: result = new Sk##_class(); break
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define CASE_DRAW_NEW(_class) \
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    case SkType_##_class: result = new SkDraw##_class(); break
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define CASE_DISPLAY_NEW(_class) \
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    case SkType_##_class: result = new SkDisplay##_class(); break
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define CASE_DEBUG_RETURN_NIL(_class) \
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_##_class: return NULL
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define CASE_DEBUG_RETURN_NIL(_class)
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayTypes SkDisplayType::gNewTypes = kNumberOfTypes;
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkDisplayType::CreateInstance(SkAnimateMaker* maker, SkDisplayTypes type) {
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayable* result = NULL;
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (type) {
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // unknown
780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Math);
790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Number);
800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Add);
810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(AddCircle);
820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // addgeom
830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(AddMode);
840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(AddOval);
850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(AddPath);
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(AddRect);
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(AddRoundRect);
880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(Align);
890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Animate);
900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // animatebase
910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Apply);
920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(ApplyMode);
930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(ApplyTransition);
940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Array);
950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // argb
960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // base64
970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // basebitmap
980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // baseclassinfo
990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Bitmap);
1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // bitmapencoding
1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // bitmapformat
1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(BitmapShader);
1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Blur);
1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Boolean);
1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // boundable
1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Bounds);
1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(Cap);
1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Clear);
1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Clip);
1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Close);
1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Color);
1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(CubicTo);
1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Dash);
1141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        CASE_NEW(DataInput);
1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Discrete);
1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // displayable
1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // drawable
1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(DrawTo);
1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Dump);
1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // dynamicstring
1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Emboss);
1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Event);
1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(EventCode);
1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(EventKind);
1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(EventMode);
1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // filltype
1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // filtertype
1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Float);
1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(FromPath);
1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(FromPathMode);
1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Full);
1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // gradient
1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Group);
1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(HitClear);
1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(HitTest);
1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Image);
1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Include);
1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Input);
1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Int);
1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(Join);
1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Line);
1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(LineTo);
1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(LinearGradient);
1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(MaskFilter);
1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(MaskFilterBlurStyle);
1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // maskfilterlight
1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Matrix);
1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // memberfunction
1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // memberproperty
1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Move);
1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(MoveTo);
1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Movie);
1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // msec
1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Oval);
1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Paint);
1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Path);
1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // pathdirection
1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(PathEffect);
1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // point
1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(DrawPoint);
1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(PolyToPoly);
1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Polygon);
1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Polyline);
1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Post);
1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(QuadTo);
1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(RCubicTo);
1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(RLineTo);
1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(RMoveTo);
1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(RQuadTo);
1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(RadialGradient);
1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(Random);
1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Rect);
1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(RectToRect);
1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Remove);
1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Replace);
1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Rotate);
1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(RoundRect);
1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Save);
1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(SaveLayer);
1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Scale);
1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // screenplay
1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Set);
1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Shader);
1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Skew);
1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(3D_Camera);
1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(3D_Patch);
1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // 3dpoint
1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Snapshot);
1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DISPLAY_NEW(String);
1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // style
1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Text);
1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(TextBox);
1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // textboxalign
1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // textboxmode
1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(TextOnPath);
1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(TextToPath);
1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(TileMode);
1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_NEW(Translate);
1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(TransparentShader);
2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DRAW_NEW(Typeface);
2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_DEBUG_RETURN_NIL(Xfermode);
2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:
2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkExtras** end = maker->fExtras.end();
2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                if ((result = (*extraPtr)->createInstance(type)) != NULL)
2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                    return result;
2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            }
2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(0);
2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return result;
2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CASE_NEW
2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CASE_DRAW_NEW
2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CASE_DISPLAY_NEW
2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0
2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define CASE_GET_INFO(_class) case SkType_##_class: \
2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    info = Sk##_class::fInfo; infoCount = Sk##_class::fInfoCount; break
2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define CASE_GET_DRAW_INFO(_class) case SkType_##_class: \
2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    info = SkDraw##_class::fInfo; infoCount = SkDraw##_class::fInfoCount; break
2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define CASE_GET_DISPLAY_INFO(_class) case SkType_##_class: \
2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    info = SkDisplay##_class::fInfo; infoCount = SkDisplay##_class::fInfoCount; \
2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    break
2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo* SkDisplayType::GetMembers(SkAnimateMaker* maker,
2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayTypes type, int* infoCountPtr) {
2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMemberInfo* info = NULL;
2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int infoCount = 0;
2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (type) {
2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // unknown
2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Math);
2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Number);
2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Add);
2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(AddCircle);
2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(AddGeom);
2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // addmode
2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(AddOval);
2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(AddPath);
2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(AddRect);
2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(AddRoundRect);
2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // align
2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Animate);
2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(AnimateBase);
2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Apply);
2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // applymode
2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // applytransition
2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Array);
2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // argb
2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // base64
2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(BaseBitmap);
2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // baseclassinfo
2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Bitmap);
2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // bitmapencoding
2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // bitmapformat
2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(BitmapShader);
2580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Blur);
2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Boolean);
2600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // boundable
2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Bounds);
2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // cap
2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // clear
2640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Clip);
2650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // close
2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Color);
2670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(CubicTo);
2680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Dash);
2691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        CASE_GET_INFO(DataInput);
2700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Discrete);
2710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // displayable
2720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // drawable
2730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(DrawTo);
2740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Dump);
2750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // dynamicstring
2760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Emboss);
2770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Event);
2780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // eventcode
2790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // eventkind
2800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // eventmode
2810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // filltype
2820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // filtertype
2830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Float);
2840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(FromPath);
2850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // frompathmode
2860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // full
2870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Gradient);
2880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Group);
2890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(HitClear);
2900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(HitTest);
2910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Image);
2920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Include);
2930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Input);
2940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Int);
2950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // join
2960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Line);
2970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(LineTo);
2980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(LinearGradient);
2990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // maskfilter
3000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // maskfilterblurstyle
3010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // maskfilterlight
3020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Matrix);
3030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // memberfunction
3040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // memberproperty
3050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Move);
3060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(MoveTo);
3070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Movie);
3080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // msec
3090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Oval);
3100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Path);
3110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Paint);
3120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // pathdirection
3130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // patheffect
3140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Point: info = Sk_Point::fInfo; infoCount = Sk_Point::fInfoCount; break; // no virtual flavor
3150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(DrawPoint); // virtual flavor
3160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(PolyToPoly);
3170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Polygon);
3180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Polyline);
3190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Post);
3200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(QuadTo);
3210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(RCubicTo);
3220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(RLineTo);
3230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(RMoveTo);
3240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(RQuadTo);
3250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(RadialGradient);
3260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(Random);
3270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Rect);
3280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(RectToRect);
3290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Remove);
3300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Replace);
3310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Rotate);
3320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(RoundRect);
3330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Save);
3340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(SaveLayer);
3350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Scale);
3360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // screenplay
3370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Set);
3380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Shader);
3390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Skew);
3400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(3D_Camera);
3410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(3D_Patch);
3420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(3D_Point);
3430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Snapshot);
3440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DISPLAY_INFO(String);
3450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // style
3460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Text);
3470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(TextBox);
3480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // textboxalign
3490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // textboxmode
3500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(TextOnPath);
3510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(TextToPath);
3520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // tilemode
3530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_INFO(Translate);
3540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // transparentshader
3550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        CASE_GET_DRAW_INFO(Typeface);
3560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // xfermode
3570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // knumberoftypes
3580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:
3590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (maker) {
3600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkExtras** end = maker->fExtras.end();
3610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
3620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                    if ((info = (*extraPtr)->getMembers(type, infoCountPtr)) != NULL)
3630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                        return info;
3640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                }
3650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            }
3660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return NULL;
3670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
3680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (infoCountPtr)
3690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        *infoCountPtr = infoCount;
3700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return info;
3710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
3720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
3730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo* SkDisplayType::GetMember(SkAnimateMaker* maker,
3740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayTypes type, const char** matchPtr ) {
3750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int infoCount;
3760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMemberInfo* info = GetMembers(maker, type, &infoCount);
3770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    info = SkMemberInfo::Find(info, infoCount, matchPtr);
3780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  SkASSERT(info);
3790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return info;
3800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
3810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
3820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CASE_GET_INFO
3830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CASE_GET_DRAW_INFO
3840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#undef CASE_GET_DISPLAY_INFO
3850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
3860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif // SK_USE_CONDENSED_INFO == 0
3870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
3880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if defined SK_DEBUG || defined SK_BUILD_CONDENSED
3890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define DRAW_NAME(_name, _type) {_name, _type, true, false }
3900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define DISPLAY_NAME(_name, _type) {_name, _type, false, true }
3910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define INIT_BOOL_FIELDS    , false, false
3920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
3930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define DRAW_NAME(_name, _type) {_name, _type }
3940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define DISPLAY_NAME(_name, _type) {_name, _type }
3950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    #define INIT_BOOL_FIELDS
3960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
3970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
3980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst TypeNames gTypeNames[] = {
3990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // unknown
4000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "Math", SkType_Math                       INIT_BOOL_FIELDS },
4010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "Number", SkType_Number                   INIT_BOOL_FIELDS },
4020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "add", SkType_Add                         INIT_BOOL_FIELDS },
4030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "addCircle", SkType_AddCircle             INIT_BOOL_FIELDS },
4040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // addgeom
4050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // addmode
4060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "addOval", SkType_AddOval                 INIT_BOOL_FIELDS },
4070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "addPath", SkType_AddPath                 INIT_BOOL_FIELDS },
4080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "addRect", SkType_AddRect                 INIT_BOOL_FIELDS },
4090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "addRoundRect", SkType_AddRoundRect       INIT_BOOL_FIELDS },
4100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // align
4110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "animate", SkType_Animate                 INIT_BOOL_FIELDS },
4120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // animateBase
4130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "apply", SkType_Apply                     INIT_BOOL_FIELDS },
4140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // applymode
4150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // applytransition
4160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "array", SkType_Array                     INIT_BOOL_FIELDS },
4170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // argb
4180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // base64
4190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // basebitmap
4200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // baseclassinfo
4210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("bitmap", SkType_Bitmap),
4220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // bitmapencoding
4230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // bitmapformat
4240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("bitmapShader", SkType_BitmapShader),
4250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("blur", SkType_Blur),
4260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "boolean", SkType_Boolean                 INIT_BOOL_FIELDS },
4270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // boundable
4280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DISPLAY_NAME("bounds", SkType_Bounds),
4290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // cap
4300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "clear", SkType_Clear                     INIT_BOOL_FIELDS },
4310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("clip", SkType_Clip),
4320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "close", SkType_Close                     INIT_BOOL_FIELDS },
4330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("color", SkType_Color),
4340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "cubicTo", SkType_CubicTo                 INIT_BOOL_FIELDS },
4350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "dash", SkType_Dash                       INIT_BOOL_FIELDS },
4361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    { "data", SkType_DataInput                  INIT_BOOL_FIELDS },
4370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "discrete", SkType_Discrete               INIT_BOOL_FIELDS },
4380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // displayable
4390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // drawable
4400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "drawTo", SkType_DrawTo                   INIT_BOOL_FIELDS },
4410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "dump", SkType_Dump                       INIT_BOOL_FIELDS },
4420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // dynamicstring
4430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("emboss", SkType_Emboss),
4440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DISPLAY_NAME("event", SkType_Event),
4450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // eventcode
4460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // eventkind
4470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // eventmode
4480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // filltype
4490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // filtertype
4500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "float", SkType_Float                     INIT_BOOL_FIELDS },
4510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "fromPath", SkType_FromPath               INIT_BOOL_FIELDS },
4520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // frompathmode
4530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "full", SkType_Full                       INIT_BOOL_FIELDS },
4540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // gradient
4550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "group", SkType_Group                     INIT_BOOL_FIELDS },
4560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "hitClear", SkType_HitClear               INIT_BOOL_FIELDS },
4570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "hitTest", SkType_HitTest                 INIT_BOOL_FIELDS },
4580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "image", SkType_Image                     INIT_BOOL_FIELDS },
4590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "include", SkType_Include                 INIT_BOOL_FIELDS },
4600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "input", SkType_Input                     INIT_BOOL_FIELDS },
4610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "int", SkType_Int                         INIT_BOOL_FIELDS },
4620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // join
4630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "line", SkType_Line                       INIT_BOOL_FIELDS },
4640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "lineTo", SkType_LineTo                   INIT_BOOL_FIELDS },
4650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "linearGradient", SkType_LinearGradient   INIT_BOOL_FIELDS },
4660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "maskFilter", SkType_MaskFilter           INIT_BOOL_FIELDS },
4670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // maskfilterblurstyle
4680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // maskfilterlight
4690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("matrix", SkType_Matrix),
4700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // memberfunction
4710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // memberproperty
4720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "move", SkType_Move                       INIT_BOOL_FIELDS },
4730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "moveTo", SkType_MoveTo                   INIT_BOOL_FIELDS },
4740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "movie", SkType_Movie                     INIT_BOOL_FIELDS },
4750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // msec
4760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "oval", SkType_Oval                       INIT_BOOL_FIELDS },
4770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("paint", SkType_Paint),
4780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("path", SkType_Path),
4790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // pathdirection
4800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "pathEffect", SkType_PathEffect           INIT_BOOL_FIELDS },
4810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // point
4820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("point", SkType_DrawPoint),
4830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "polyToPoly", SkType_PolyToPoly           INIT_BOOL_FIELDS },
4840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "polygon", SkType_Polygon                 INIT_BOOL_FIELDS },
4850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "polyline", SkType_Polyline               INIT_BOOL_FIELDS },
4860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "post", SkType_Post                       INIT_BOOL_FIELDS },
4870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "quadTo", SkType_QuadTo                   INIT_BOOL_FIELDS },
4880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "rCubicTo", SkType_RCubicTo               INIT_BOOL_FIELDS },
4890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "rLineTo", SkType_RLineTo                 INIT_BOOL_FIELDS },
4900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "rMoveTo", SkType_RMoveTo                 INIT_BOOL_FIELDS },
4910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "rQuadTo", SkType_RQuadTo                 INIT_BOOL_FIELDS },
4920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "radialGradient", SkType_RadialGradient   INIT_BOOL_FIELDS },
4930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DISPLAY_NAME("random", SkType_Random),
4940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "rect", SkType_Rect                       INIT_BOOL_FIELDS },
4950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "rectToRect", SkType_RectToRect           INIT_BOOL_FIELDS },
4960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "remove", SkType_Remove                   INIT_BOOL_FIELDS },
4970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "replace", SkType_Replace                 INIT_BOOL_FIELDS },
4980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "rotate", SkType_Rotate                   INIT_BOOL_FIELDS },
4990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "roundRect", SkType_RoundRect             INIT_BOOL_FIELDS },
5000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "save", SkType_Save                       INIT_BOOL_FIELDS },
5010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "saveLayer", SkType_SaveLayer             INIT_BOOL_FIELDS },
5020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "scale", SkType_Scale                     INIT_BOOL_FIELDS },
5030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // screenplay
5040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "set", SkType_Set                         INIT_BOOL_FIELDS },
5050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "shader", SkType_Shader                   INIT_BOOL_FIELDS },
5060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "skew", SkType_Skew                       INIT_BOOL_FIELDS },
5070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "skia3d:camera", SkType_3D_Camera         INIT_BOOL_FIELDS },
5080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "skia3d:patch", SkType_3D_Patch           INIT_BOOL_FIELDS },
5090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // point
5100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "snapshot", SkType_Snapshot               INIT_BOOL_FIELDS },
5110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "string", SkType_String                   INIT_BOOL_FIELDS },
5120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // style
5130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "text", SkType_Text                       INIT_BOOL_FIELDS },
5140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "textBox", SkType_TextBox                 INIT_BOOL_FIELDS },
5150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // textboxalign
5160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // textboxmode
5170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "textOnPath", SkType_TextOnPath           INIT_BOOL_FIELDS },
5180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "textToPath", SkType_TextToPath           INIT_BOOL_FIELDS },
5190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // tilemode
5200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "translate", SkType_Translate             INIT_BOOL_FIELDS },
5210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DRAW_NAME("transparentShader", SkType_TransparentShader),
5220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "typeface", SkType_Typeface               INIT_BOOL_FIELDS }
5230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // xfermode
5240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // knumberoftypes
5250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
5260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
5270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst int kTypeNamesSize = SK_ARRAY_COUNT(gTypeNames);
5280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
5290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayTypes SkDisplayType::Find(SkAnimateMaker* maker, const SkMemberInfo* match) {
5300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (int index = 0; index < kTypeNamesSize; index++) {
5310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayTypes type = gTypeNames[index].fType;
5320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const SkMemberInfo* info = SkDisplayType::GetMembers(maker, type, NULL);
5330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (info == match)
5340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return type;
5350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
5360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return (SkDisplayTypes) -1;
5370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
5380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
5390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// !!! optimize this by replacing function with a byte-sized lookup table
5400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayTypes SkDisplayType::GetParent(SkAnimateMaker* maker, SkDisplayTypes base) {
5410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (base == SkType_Group || base == SkType_Save || base == SkType_SaveLayer)        //!!! cheat a little until we have a lookup table
5420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return SkType_Displayable;
5430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (base == SkType_Set)
5440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return SkType_Animate;  // another cheat until we have a lookup table
5450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMemberInfo* info = GetMembers(maker, base, NULL); // get info for this type
5460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(info);
5470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (info->fType != SkType_BaseClassInfo)
5480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return SkType_Unknown; // if no base, done
5490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // !!! could change SK_MEMBER_INHERITED macro to take type, stuff in offset, so that
5500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // this (and table builder) could know type without the following steps:
5510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMemberInfo* inherited = info->getInherited();
5520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayTypes result = (SkDisplayTypes) (SkType_Unknown + 1);
5530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (; result <= SkType_Xfermode; result = (SkDisplayTypes) (result + 1)) {
5540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const SkMemberInfo* match = GetMembers(maker, result, NULL);
5550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (match == inherited)
5560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
5570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
5580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(result <= SkType_Xfermode);
5590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return result;
5600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
5610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
5620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayTypes SkDisplayType::GetType(SkAnimateMaker* maker, const char match[], size_t len ) {
5630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int index = SkStrSearch(&gTypeNames[0].fName, kTypeNamesSize, match,
5640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        len, sizeof(gTypeNames[0]));
5650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (index >= 0 && index < kTypeNamesSize)
5660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return gTypeNames[index].fType;
5670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkExtras** end = maker->fExtras.end();
5680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
5690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayTypes result = (*extraPtr)->getType(match, len);
5700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (result != SkType_Unknown)
5710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return result;
5720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
5730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return (SkDisplayTypes) -1;
5740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
5750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
5760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayType::IsEnum(SkAnimateMaker* , SkDisplayTypes type) {
5770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (type) {
5780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_AddMode:
5790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Align:
5800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_ApplyMode:
5810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_ApplyTransition:
5820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_BitmapEncoding:
5830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_BitmapFormat:
5840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Boolean:
5850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Cap:
5860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_EventCode:
5870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_EventKind:
5880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_EventMode:
5890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_FillType:
5900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_FilterType:
5910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_FontStyle:
5920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_FromPathMode:
5930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Join:
5940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_MaskFilterBlurStyle:
5950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_PathDirection:
5960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Style:
5970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_TextBoxAlign:
5980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_TextBoxMode:
5990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_TileMode:
6000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Xfermode:
6010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return true;
6020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:    // to avoid warnings
6030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
6040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
6050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return false;
6060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
6070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
6080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayType::IsDisplayable(SkAnimateMaker* , SkDisplayTypes type) {
6090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (type) {
6100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Add:
6110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_AddCircle:
6120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_AddOval:
6130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_AddPath:
6140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_AddRect:
6150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_AddRoundRect:
6160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Animate:
6170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_AnimateBase:
6180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Apply:
6190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_BaseBitmap:
6200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Bitmap:
6210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_BitmapShader:
6220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Blur:
6230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Clear:
6240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Clip:
6250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Close:
6260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Color:
6270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_CubicTo:
6280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Dash:
6291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        case SkType_DataInput:
6300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Discrete:
6310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Displayable:
6320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Drawable:
6330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_DrawTo:
6340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Emboss:
6350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Event:
6360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_FromPath:
6370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Full:
6380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Group:
6390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Image:
6400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Input:
6410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Line:
6420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_LineTo:
6430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_LinearGradient:
6440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Matrix:
6450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Move:
6460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_MoveTo:
6470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Movie:
6480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Oval:
6490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Paint:
6500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Path:
6510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_PolyToPoly:
6520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Polygon:
6530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Polyline:
6540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Post:
6550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_QuadTo:
6560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_RCubicTo:
6570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_RLineTo:
6580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_RMoveTo:
6590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_RQuadTo:
6600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_RadialGradient:
6610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Random:
6620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Rect:
6630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_RectToRect:
6640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Remove:
6650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Replace:
6660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Rotate:
6670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_RoundRect:
6680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Save:
6690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_SaveLayer:
6700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Scale:
6710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Set:
6720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Shader:
6730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Skew:
6740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_3D_Camera:
6750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_3D_Patch:
6760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Snapshot:
6770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Text:
6780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_TextBox:
6790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_TextOnPath:
6800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_TextToPath:
6810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Translate:
6820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_TransparentShader:
6830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return true;
6840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:    // to avoid warnings
6850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
6860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
6870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return false;
6880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
6890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
6900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayType::IsStruct(SkAnimateMaker* , SkDisplayTypes type) {
6910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (type) {
6920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Point:
6930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_3D_Point:
6940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return true;
6950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:    // to avoid warnings
6960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
6970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
6980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return false;
6990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
7000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
7010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
7020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayTypes SkDisplayType::RegisterNewType() {
7030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    gNewTypes = (SkDisplayTypes) (gNewTypes + 1);
7040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return gNewTypes;
7050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
7060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
7070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
7080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
7090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG
7100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char* SkDisplayType::GetName(SkAnimateMaker* maker, SkDisplayTypes type) {
7110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (int index = 0; index < kTypeNamesSize - 1; index++) {
7120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (gTypeNames[index].fType == type)
7130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return gTypeNames[index].fName;
7140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
7150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkExtras** end = maker->fExtras.end();
7160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (SkExtras** extraPtr = maker->fExtras.begin(); extraPtr < end; extraPtr++) {
7170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const char* result = (*extraPtr)->getName(type);
7180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (result != NULL)
7190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return result;
7200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
7210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return NULL;
7220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
7230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
7240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
7250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_SUPPORT_UNITTEST
7260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDisplayType::UnitTest() {
7270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkAnimator animator;
7280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkAnimateMaker* maker = animator.fMaker;
7290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int index;
7300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (index = 0; index < kTypeNamesSize - 1; index++) {
7310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT(strcmp(gTypeNames[index].fName, gTypeNames[index + 1].fName) < 0);
7320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT(gTypeNames[index].fType < gTypeNames[index + 1].fType);
7330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
7340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (index = 0; index < kTypeNamesSize; index++) {
7350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayable* test = CreateInstance(maker, gTypeNames[index].fType);
7360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (test == NULL)
7370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            continue;
7380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if defined _WIN32 && _MSC_VER >= 1300  && defined _INC_CRTDBG // only on windows, only if using "crtdbg.h"
7390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // we know that crtdbg puts 0xfdfdfdfd at the end of the block
7400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // look for unitialized memory, signature 0xcdcdcdcd prior to that
7410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        int* start = (int*) test;
7420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        while (*start != 0xfdfdfdfd) {
7430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(*start != 0xcdcdcdcd);
7440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            start++;
7450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
7460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
7470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        delete test;
7480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
7490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (index = 0; index < kTypeNamesSize; index++) {
7500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        int infoCount;
7510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const SkMemberInfo* info = GetMembers(maker, gTypeNames[index].fType, &infoCount);
7520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (info == NULL)
7530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            continue;
7540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0
7550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        for (int inner = 0; inner < infoCount - 1; inner++) {
7560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (info[inner].fType == SkType_BaseClassInfo)
7570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                continue;
7580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(strcmp(info[inner].fName, info[inner + 1].fName) < 0);
7590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
7600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
7610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
7620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if defined SK_DEBUG || defined SK_BUILD_CONDENSED
7630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    BuildCondensedInfo(maker);
7640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
7650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
7660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
767