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 <jsapi.h>
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkJS.h"
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayType.h"
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkAnimateColor.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h"
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateSet.h"
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkAnimateTransform.h"
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCanvas.h"
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkDimensions.h"
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayAdd.h"
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayApply.h"
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkDisplayBefore.h"
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayEvent.h"
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkDisplayFocus.h"
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayInclude.h"
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayPost.h"
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayRandom.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 "SkDrawFont.h"
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawFull.h"
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawGradient.h"
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawLine.h"
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkDrawMaskFilter.h"
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawMatrix.h"
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawOval.h"
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPaint.h"
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPath.h"
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPoint.h"
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// #include "SkDrawStroke.h"
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawText.h"
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawTo.h"
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkDrawTransferMode.h"
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawTransparentShader.h"
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//#include "SkDrawUse.h"
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMatrixParts.h"
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPathParts.h"
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPostParts.h"
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkScript.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
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkJSDisplayable {
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkJSDisplayable() : fDisplayable(NULL) {}
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ~SkJSDisplayable() { delete fDisplayable; }
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static void Destructor(JSContext *cx, JSObject *obj);
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static JSBool GetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static JSBool SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static SkCanvas* gCanvas;
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static SkPaint* gPaint;
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static JSBool Draw(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayable* fDisplayable;
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkCanvas* SkJSDisplayable::gCanvas;
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPaint* SkJSDisplayable::gPaint;
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJSBool SkJSDisplayable::Draw(JSContext *cx, JSObject *obj, uintN argc,
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                    jsval *argv, jsval *rval)
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkJSDisplayable *p = (SkJSDisplayable*) JS_GetPrivate(cx, obj);
780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(p->fDisplayable->isDrawable());
790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDrawable* drawable = (SkDrawable*) p->fDisplayable;
800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkAnimateMaker maker(NULL, gCanvas, gPaint);
810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    drawable->draw(maker);
820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return JS_TRUE;
830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJSFunctionSpec SkJSDisplayable_methods[] =
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { "draw", SkJSDisplayable::Draw, 1, 0, 0 },
890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    { 0 }
900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic JSPropertySpec* gDisplayableProperties[kNumberOfTypes];
930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic JSClass gDisplayableClasses[kNumberOfTypes];
940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define JS_INIT(_prefix, _class) \
960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic JSBool _class##Constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { \
970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkJSDisplayable* jsDisplayable = new SkJSDisplayable(); \
980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    jsDisplayable->fDisplayable = new _prefix##_class(); \
990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    JS_SetPrivate(cx, obj, (void*) jsDisplayable); \
1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return JS_TRUE; \
1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} \
1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    \
1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic JSObject* _class##Init(JSContext *cx, JSObject *obj, JSObject *proto) { \
1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    JSObject *newProtoObj = JS_InitClass(cx, obj, proto, &gDisplayableClasses[SkType_##_class], \
1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        _class##Constructor, 0, \
1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        NULL, SkJSDisplayable_methods , \
1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        NULL, NULL); \
1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    JS_DefineProperties(cx, newProtoObj, gDisplayableProperties[SkType_##_class]); \
1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return newProtoObj; \
1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Add)
1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, AddCircle)
1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, AddOval)
1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, AddPath)
1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, AddRectangle)
1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, AddRoundRect)
1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, After)
1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Apply)
1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// JS_INIT(Sk, Animate)
1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, AnimateColor)
1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, AnimateField)
1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, AnimateRotate)
1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, AnimateScale)
1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, AnimateTranslate)
1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Bitmap)
1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, BaseBitmap)
1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, Before)
1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, BitmapShader)
1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Blur)
1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Clip)
1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Color)
1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, CubicTo)
1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Dash)
1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Data)
1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, Dimensions)
1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Discrete)
1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, DrawTo)
1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Emboss)
1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDisplay, Event)
1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// JS_INIT(SkDraw, Font)
1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// JS_INIT(Sk, Focus)
1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Image)
1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Include)
1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// JS_INIT(Sk, Input)
1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Line)
1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, LinearGradient)
1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, LineTo)
1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Matrix)
1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Move)
1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, MoveTo)
1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Oval)
1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Path)
1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDraw, Paint)
1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, DrawPoint)
1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, PolyToPoly)
1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Polygon)
1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Polyline)
1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Post)
1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, QuadTo)
1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, RadialGradient)
1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(SkDisplay, Random)
1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, RectToRect)
1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Rectangle)
1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Remove)
1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Replace)
1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Rotate)
1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, RoundRect)
1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Scale)
1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Set)
1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Skew)
1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// JS_INIT(Sk, 3D_Camera)
1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// JS_INIT(Sk, 3D_Patch)
1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Snapshot)
1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// JS_INIT(SkDraw, Stroke)
1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Text)
1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, TextOnPath)
1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, TextToPath)
1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJS_INIT(Sk, Translate)
1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//JS_INIT(Sk, Use)
1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0
1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic void GenerateTables() {
1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (int index = 0; index < kTypeNamesSize; index++) {
1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        int infoCount;
1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayTypes type = gTypeNames[index].fType;
1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, type, &infoCount);
1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (info == NULL)
1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            continue;
1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableProperties[type] = new JSPropertySpec[infoCount + 1];
1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        JSPropertySpec* propertySpec = gDisplayableProperties[type];
1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        memset(propertySpec, 0, sizeof (JSPropertySpec) * (infoCount + 1));
1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        for (int inner = 0; inner < infoCount; inner++) {
1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (info[inner].fType == SkType_BaseClassInfo)
1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                continue;
1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            propertySpec[inner].name = info[inner].fName;
1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            propertySpec[inner].tinyid = inner;
1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            propertySpec[inner].flags = JSPROP_ENUMERATE;
1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].name = gTypeNames[index].fName;
2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].flags = JSCLASS_HAS_PRIVATE;
2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].addProperty = JS_PropertyStub;
2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].delProperty = JS_PropertyStub;
2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].getProperty = SkJSDisplayable::GetProperty;
2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].setProperty = SkJSDisplayable::SetProperty;
2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].enumerate = JS_EnumerateStub;
2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].resolve = JS_ResolveStub;
2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].convert = JS_ConvertStub;
2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        gDisplayableClasses[type].finalize = SkJSDisplayable::Destructor;
2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkJSDisplayable::Destructor(JSContext *cx, JSObject *obj) {
2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    delete (SkJSDisplayable*) JS_GetPrivate(cx, obj);
2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJSBool SkJSDisplayable::GetProperty(JSContext *cx, JSObject *obj, jsval id,
2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                                 jsval *vp)
2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (JSVAL_IS_INT(id) == 0)
2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return JS_TRUE;
2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj);
2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayable* displayable = p->fDisplayable;
2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayTypes displayableType = displayable->getType();
2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int members;
2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members);
2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int idIndex = JSVAL_TO_INT(id);
2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(idIndex >= 0 && idIndex < members);
2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    info = &info[idIndex];
2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayTypes infoType = (SkDisplayTypes) info->fType;
2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkScalar scalar = 0;
2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    S32 s32 = 0;
2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkString* string= NULL;
2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    JSString *str;
2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (infoType == SkType_MemberProperty) {
2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        infoType = info->propertyType();
2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        switch (infoType) {
2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Scalar: {
2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkScriptValue scriptValue;
2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                bool success = displayable->getProperty(info->propertyIndex(), &scriptValue);
2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkASSERT(scriptValue.fType == SkType_Scalar);
2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                scalar = scriptValue.fOperand.fScalar;
2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                } break;
2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            default:
2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkASSERT(0); // !!! unimplemented
2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    } else {
2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT(info->fCount == 1);
2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        switch (infoType) {
2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Boolean:
2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Color:
2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_S32:
2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                s32 = *(S32*) info->memberData(displayable);
2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_String:
2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                info->getString(displayable, &string);
2580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Scalar:
2600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkOperand operand;
2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                info->getValue(displayable, &operand, 1);
2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                scalar = operand.fScalar;
2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
2640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            default:
2650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkASSERT(0); // !!! unimplemented
2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
2670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
2680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (infoType) {
2690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Boolean:
2700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            *vp = BOOLEAN_TO_JSVAL(s32);
2710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
2720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Color:
2730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_S32:
2740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            *vp = INT_TO_JSVAL(s32);
2750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
2760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Scalar:
2770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (SkScalarFraction(scalar) == 0)
2780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                *vp = INT_TO_JSVAL(SkScalarFloor(scalar));
2790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            else
2800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_SCALAR_IS_FLOAT
2810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            *vp = DOUBLE_TO_JSVAL(scalar);
2820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
2830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            *vp = DOUBLE_TO_JSVAL(scalar / 65536.0f );
2840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
2850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
2860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_String:
2870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            str = JS_NewStringCopyN(cx, string->c_str(), string->size());
2880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            *vp = STRING_TO_JSVAL(str);
2890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
2900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:
2910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(0); // !!! unimplemented
2920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
2930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return JS_TRUE;
2940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectJSBool SkJSDisplayable::SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) {
2970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (JSVAL_IS_INT(id) == 0)
2980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return JS_TRUE;
2990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj);
3000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayable* displayable = p->fDisplayable;
3010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayTypes displayableType = displayable->getType();
3020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int members;
3030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members);
3040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int idIndex = JSVAL_TO_INT(id);
3050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(idIndex >= 0 && idIndex < members);
3060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    info = &info[idIndex];
3070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayTypes infoType = info->getType();
3080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkScalar scalar = 0;
3090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    S32 s32 = 0;
3100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkString string;
3110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    JSString* str;
3120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    jsval value = *vp;
3130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (infoType) {
3140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Boolean:
3150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            s32 = JSVAL_TO_BOOLEAN(value);
3160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
3170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Color:
3180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_S32:
3190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            s32 = JSVAL_TO_INT(value);
3200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
3210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_Scalar:
3220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (JSVAL_IS_INT(value))
3230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                scalar = SkIntToScalar(JSVAL_TO_INT(value));
3240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            else {
3250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkASSERT(JSVAL_IS_DOUBLE(value));
3260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_SCALAR_IS_FLOAT
3270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                scalar = (float) *(double*) JSVAL_TO_DOUBLE(value);
3280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
3290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                scalar = (SkFixed)  (*(double*)JSVAL_TO_DOUBLE(value) * 65536.0);
3300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
3310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            }
3320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
3330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SkType_String:
3340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            str = JS_ValueToString(cx, value);
3350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            string.set(JS_GetStringBytes(str));
3360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
3370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:
3380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(0); // !!! unimplemented
3390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
3400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (info->fType == SkType_MemberProperty) {
3410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        switch (infoType) {
3420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Scalar: {
3430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkScriptValue scriptValue;
3440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                scriptValue.fType = SkType_Scalar;
3450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                scriptValue.fOperand.fScalar = scalar;
3460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                displayable->setProperty(-1 - (int) info->fOffset, scriptValue);
3470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                } break;
3480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            default:
3490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkASSERT(0); // !!! unimplemented
3500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
3510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    } else {
3520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT(info->fCount == 1);
3530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        switch (infoType) {
3540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Boolean:
3550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Color:
3560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_S32:
3570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                s32 = *(S32*) ((const char*) displayable + info->fOffset);
3580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
3590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_String:
3600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                info->setString(displayable, &string);
3610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
3620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            case SkType_Scalar:
3630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkOperand operand;
3640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                operand.fScalar = scalar;
3650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                info->setValue(displayable, &operand, 1);
3660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                break;
3670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            default:
3680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                SkASSERT(0); // !!! unimplemented
3690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
3700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
3710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return JS_TRUE;
3720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
3730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
3740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkJS::InitializeDisplayables(const SkBitmap& bitmap, JSContext *cx, JSObject *obj, JSObject *proto) {
3750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkJSDisplayable::gCanvas = new SkCanvas(bitmap);
3760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkJSDisplayable::gPaint = new SkPaint();
3770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0
3780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    GenerateTables();
3790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
3800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(0); // !!! compressed version hasn't been implemented
3810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
3820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    AddInit(cx, obj, proto);
3830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    AddCircleInit(cx, obj, proto);
3840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    AddOvalInit(cx, obj, proto);
3850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    AddPathInit(cx, obj, proto);
3860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    AddRectangleInit(cx, obj, proto);
3870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    AddRoundRectInit(cx, obj, proto);
3880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  AfterInit(cx, obj, proto);
3890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ApplyInit(cx, obj, proto);
3900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // AnimateInit(cx, obj, proto);
3910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  AnimateColorInit(cx, obj, proto);
3920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    AnimateFieldInit(cx, obj, proto);
3930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  AnimateRotateInit(cx, obj, proto);
3940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  AnimateScaleInit(cx, obj, proto);
3950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  AnimateTranslateInit(cx, obj, proto);
3960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    BitmapInit(cx, obj, proto);
3970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  BaseBitmapInit(cx, obj, proto);
3980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  BeforeInit(cx, obj, proto);
3990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    BitmapShaderInit(cx, obj, proto);
4000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    BlurInit(cx, obj, proto);
4010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ClipInit(cx, obj, proto);
4020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ColorInit(cx, obj, proto);
4030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    CubicToInit(cx, obj, proto);
4040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DashInit(cx, obj, proto);
4050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DataInit(cx, obj, proto);
4060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  DimensionsInit(cx, obj, proto);
4070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DiscreteInit(cx, obj, proto);
4080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DrawToInit(cx, obj, proto);
4090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    EmbossInit(cx, obj, proto);
4100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    EventInit(cx, obj, proto);
4110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  FontInit(cx, obj, proto);
4120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  FocusInit(cx, obj, proto);
4130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ImageInit(cx, obj, proto);
4140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    IncludeInit(cx, obj, proto);
4150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  InputInit(cx, obj, proto);
4160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    LineInit(cx, obj, proto);
4170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    LinearGradientInit(cx, obj, proto);
4180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    LineToInit(cx, obj, proto);
4190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    MatrixInit(cx, obj, proto);
4200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    MoveInit(cx, obj, proto);
4210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    MoveToInit(cx, obj, proto);
4220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    OvalInit(cx, obj, proto);
4230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PathInit(cx, obj, proto);
4240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PaintInit(cx, obj, proto);
4250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    DrawPointInit(cx, obj, proto);
4260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PolyToPolyInit(cx, obj, proto);
4270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PolygonInit(cx, obj, proto);
4280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PolylineInit(cx, obj, proto);
4290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    PostInit(cx, obj, proto);
4300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    QuadToInit(cx, obj, proto);
4310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    RadialGradientInit(cx, obj, proto);
4320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    RandomInit(cx, obj, proto);
4330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    RectToRectInit(cx, obj, proto);
4340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    RectangleInit(cx, obj, proto);
4350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    RemoveInit(cx, obj, proto);
4360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ReplaceInit(cx, obj, proto);
4370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    RotateInit(cx, obj, proto);
4380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    RoundRectInit(cx, obj, proto);
4390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    ScaleInit(cx, obj, proto);
4400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SetInit(cx, obj, proto);
4410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkewInit(cx, obj, proto);
4420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // 3D_CameraInit(cx, obj, proto);
4430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // 3D_PatchInit(cx, obj, proto);
4440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SnapshotInit(cx, obj, proto);
4450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  StrokeInit(cx, obj, proto);
4460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    TextInit(cx, obj, proto);
4470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    TextOnPathInit(cx, obj, proto);
4480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    TextToPathInit(cx, obj, proto);
4490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    TranslateInit(cx, obj, proto);
4500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//  UseInit(cx, obj, proto);
4510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
4520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
4530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkJS::DisposeDisplayables() {
4540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    delete SkJSDisplayable::gPaint;
4550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    delete SkJSDisplayable::gCanvas;
4560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    for (int index = 0; index < kTypeNamesSize; index++) {
4570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDisplayTypes type = gTypeNames[index].fType;
4580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        delete[] gDisplayableProperties[type];
4590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
4600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
461