1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <jsapi.h> 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkJS.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayType.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkAnimateColor.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimateMaker.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimateSet.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkAnimateTransform.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkDimensions.h" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayAdd.h" 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayApply.h" 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkDisplayBefore.h" 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayEvent.h" 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkDisplayFocus.h" 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayInclude.h" 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayPost.h" 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayRandom.h" 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDraw3D.h" 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawBitmap.h" 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawClip.h" 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawDash.h" 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawDiscrete.h" 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawEmboss.h" 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkDrawFont.h" 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawFull.h" 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawGradient.h" 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawLine.h" 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkDrawMaskFilter.h" 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawMatrix.h" 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawOval.h" 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawPaint.h" 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawPath.h" 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawPoint.h" 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// #include "SkDrawStroke.h" 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawText.h" 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawTo.h" 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkDrawTransferMode.h" 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawTransparentShader.h" 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//#include "SkDrawUse.h" 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMatrixParts.h" 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPathParts.h" 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPostParts.h" 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkScript.h" 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkSnapshot.h" 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTextOnPath.h" 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTextToPath.h" 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkJSDisplayable { 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkJSDisplayable() : fDisplayable(NULL) {} 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ~SkJSDisplayable() { delete fDisplayable; } 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static void Destructor(JSContext *cx, JSObject *obj); 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static JSBool GetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp); 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static JSBool SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp); 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static SkCanvas* gCanvas; 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static SkPaint* gPaint; 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static JSBool Draw(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayable* fDisplayable; 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkCanvas* SkJSDisplayable::gCanvas; 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkPaint* SkJSDisplayable::gPaint; 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJSBool SkJSDisplayable::Draw(JSContext *cx, JSObject *obj, uintN argc, 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com jsval *argv, jsval *rval) 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkJSDisplayable *p = (SkJSDisplayable*) JS_GetPrivate(cx, obj); 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(p->fDisplayable->isDrawable()); 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawable* drawable = (SkDrawable*) p->fDisplayable; 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimateMaker maker(NULL, gCanvas, gPaint); 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawable->draw(maker); 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return JS_TRUE; 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 86d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.comJSFunctionSpec SkJSDisplayable_methods[] = 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { "draw", SkJSDisplayable::Draw, 1, 0, 0 }, 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 0 } 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic JSPropertySpec* gDisplayableProperties[kNumberOfTypes]; 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic JSClass gDisplayableClasses[kNumberOfTypes]; 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define JS_INIT(_prefix, _class) \ 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic JSBool _class##Constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { \ 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkJSDisplayable* jsDisplayable = new SkJSDisplayable(); \ 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com jsDisplayable->fDisplayable = new _prefix##_class(); \ 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com JS_SetPrivate(cx, obj, (void*) jsDisplayable); \ 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return JS_TRUE; \ 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} \ 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com \ 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic JSObject* _class##Init(JSContext *cx, JSObject *obj, JSObject *proto) { \ 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com JSObject *newProtoObj = JS_InitClass(cx, obj, proto, &gDisplayableClasses[SkType_##_class], \ 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com _class##Constructor, 0, \ 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com NULL, SkJSDisplayable_methods , \ 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com NULL, NULL); \ 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com JS_DefineProperties(cx, newProtoObj, gDisplayableProperties[SkType_##_class]); \ 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return newProtoObj; \ 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Add) 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, AddCircle) 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, AddOval) 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, AddPath) 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, AddRectangle) 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, AddRoundRect) 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, After) 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Apply) 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// JS_INIT(Sk, Animate) 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, AnimateColor) 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, AnimateField) 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, AnimateRotate) 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, AnimateScale) 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, AnimateTranslate) 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Bitmap) 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, BaseBitmap) 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, Before) 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, BitmapShader) 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Blur) 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Clip) 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Color) 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, CubicTo) 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Dash) 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Data) 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, Dimensions) 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Discrete) 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, DrawTo) 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Emboss) 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDisplay, Event) 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// JS_INIT(SkDraw, Font) 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// JS_INIT(Sk, Focus) 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Image) 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Include) 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// JS_INIT(Sk, Input) 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Line) 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, LinearGradient) 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, LineTo) 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Matrix) 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Move) 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, MoveTo) 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Oval) 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Path) 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDraw, Paint) 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, DrawPoint) 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, PolyToPoly) 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Polygon) 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Polyline) 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Post) 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, QuadTo) 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, RadialGradient) 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(SkDisplay, Random) 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, RectToRect) 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Rectangle) 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Remove) 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Replace) 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Rotate) 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, RoundRect) 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Scale) 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Set) 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Skew) 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// JS_INIT(Sk, 3D_Camera) 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// JS_INIT(Sk, 3D_Patch) 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Snapshot) 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// JS_INIT(SkDraw, Stroke) 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Text) 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, TextOnPath) 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, TextToPath) 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJS_INIT(Sk, Translate) 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//JS_INIT(Sk, Use) 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic void GenerateTables() { 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (int index = 0; index < kTypeNamesSize; index++) { 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int infoCount; 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes type = gTypeNames[index].fType; 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, type, &infoCount); 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (info == NULL) 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com continue; 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableProperties[type] = new JSPropertySpec[infoCount + 1]; 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com JSPropertySpec* propertySpec = gDisplayableProperties[type]; 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com memset(propertySpec, 0, sizeof (JSPropertySpec) * (infoCount + 1)); 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (int inner = 0; inner < infoCount; inner++) { 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (info[inner].fType == SkType_BaseClassInfo) 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com continue; 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com propertySpec[inner].name = info[inner].fName; 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com propertySpec[inner].tinyid = inner; 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com propertySpec[inner].flags = JSPROP_ENUMERATE; 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].name = gTypeNames[index].fName; 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].flags = JSCLASS_HAS_PRIVATE; 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].addProperty = JS_PropertyStub; 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].delProperty = JS_PropertyStub; 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].getProperty = SkJSDisplayable::GetProperty; 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].setProperty = SkJSDisplayable::SetProperty; 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].enumerate = JS_EnumerateStub; 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].resolve = JS_ResolveStub; 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].convert = JS_ConvertStub; 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gDisplayableClasses[type].finalize = SkJSDisplayable::Destructor; 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkJSDisplayable::Destructor(JSContext *cx, JSObject *obj) { 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete (SkJSDisplayable*) JS_GetPrivate(cx, obj); 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJSBool SkJSDisplayable::GetProperty(JSContext *cx, JSObject *obj, jsval id, 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com jsval *vp) 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (JSVAL_IS_INT(id) == 0) 222d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return JS_TRUE; 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj); 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayable* displayable = p->fDisplayable; 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes displayableType = displayable->getType(); 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int members; 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members); 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int idIndex = JSVAL_TO_INT(id); 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(idIndex >= 0 && idIndex < members); 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = &info[idIndex]; 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes infoType = (SkDisplayTypes) info->fType; 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar scalar = 0; 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com S32 s32 = 0; 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkString* string= NULL; 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com JSString *str; 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (infoType == SkType_MemberProperty) { 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoType = info->propertyType(); 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (infoType) { 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Scalar: { 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScriptValue scriptValue; 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool success = displayable->getProperty(info->propertyIndex(), &scriptValue); 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(scriptValue.fType == SkType_Scalar); 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scalar = scriptValue.fOperand.fScalar; 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } break; 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); // !!! unimplemented 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(info->fCount == 1); 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (infoType) { 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Boolean: 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Color: 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_S32: 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com s32 = *(S32*) info->memberData(displayable); 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_String: 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info->getString(displayable, &string); 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Scalar: 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkOperand operand; 2618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info->getValue(displayable, &operand, 1); 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scalar = operand.fScalar; 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); // !!! unimplemented 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (infoType) { 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Boolean: 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *vp = BOOLEAN_TO_JSVAL(s32); 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Color: 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_S32: 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *vp = INT_TO_JSVAL(s32); 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Scalar: 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SkScalarFraction(scalar) == 0) 2788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *vp = INT_TO_JSVAL(SkScalarFloor(scalar)); 2798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else 2808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *vp = DOUBLE_TO_JSVAL(scalar); 2818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_String: 2838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com str = JS_NewStringCopyN(cx, string->c_str(), string->size()); 2848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *vp = STRING_TO_JSVAL(str); 2858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 2878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); // !!! unimplemented 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return JS_TRUE; 2908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comJSBool SkJSDisplayable::SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { 2938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (JSVAL_IS_INT(id) == 0) 294d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return JS_TRUE; 2958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj); 2968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayable* displayable = p->fDisplayable; 2978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes displayableType = displayable->getType(); 2988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int members; 2998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members); 3008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int idIndex = JSVAL_TO_INT(id); 3018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(idIndex >= 0 && idIndex < members); 3028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = &info[idIndex]; 3038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes infoType = info->getType(); 3048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar scalar = 0; 3058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com S32 s32 = 0; 3068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkString string; 3078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com JSString* str; 3088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com jsval value = *vp; 3098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (infoType) { 3108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Boolean: 3118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com s32 = JSVAL_TO_BOOLEAN(value); 3128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 3138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Color: 3148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_S32: 3158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com s32 = JSVAL_TO_INT(value); 3168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 3178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Scalar: 3188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (JSVAL_IS_INT(value)) 3198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scalar = SkIntToScalar(JSVAL_TO_INT(value)); 3208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else { 3218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(JSVAL_IS_DOUBLE(value)); 3228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scalar = (float) *(double*) JSVAL_TO_DOUBLE(value); 3238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 3248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 3258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_String: 3268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com str = JS_ValueToString(cx, value); 3278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com string.set(JS_GetStringBytes(str)); 3288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 3298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 3308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); // !!! unimplemented 3318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 3328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (info->fType == SkType_MemberProperty) { 3338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (infoType) { 3348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Scalar: { 3358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScriptValue scriptValue; 3368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scriptValue.fType = SkType_Scalar; 3378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scriptValue.fOperand.fScalar = scalar; 3388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com displayable->setProperty(-1 - (int) info->fOffset, scriptValue); 3398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } break; 3408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 3418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); // !!! unimplemented 3428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 3438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 3448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(info->fCount == 1); 3458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (infoType) { 3468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Boolean: 3478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Color: 3488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_S32: 3498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com s32 = *(S32*) ((const char*) displayable + info->fOffset); 3508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 3518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_String: 3528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info->setString(displayable, &string); 3538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 3548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SkType_Scalar: 3558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkOperand operand; 3568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com operand.fScalar = scalar; 3578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info->setValue(displayable, &operand, 1); 3588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 3598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 3608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); // !!! unimplemented 3618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 3628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 3638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return JS_TRUE; 3648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkJS::InitializeDisplayables(const SkBitmap& bitmap, JSContext *cx, JSObject *obj, JSObject *proto) { 3678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkJSDisplayable::gCanvas = new SkCanvas(bitmap); 3688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkJSDisplayable::gPaint = new SkPaint(); 3698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 3708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GenerateTables(); 3718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 3728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); // !!! compressed version hasn't been implemented 3738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AddInit(cx, obj, proto); 3758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AddCircleInit(cx, obj, proto); 3768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AddOvalInit(cx, obj, proto); 3778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AddPathInit(cx, obj, proto); 3788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AddRectangleInit(cx, obj, proto); 3798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AddRoundRectInit(cx, obj, proto); 3808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// AfterInit(cx, obj, proto); 3818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ApplyInit(cx, obj, proto); 3828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // AnimateInit(cx, obj, proto); 3838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// AnimateColorInit(cx, obj, proto); 3848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AnimateFieldInit(cx, obj, proto); 3858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// AnimateRotateInit(cx, obj, proto); 3868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// AnimateScaleInit(cx, obj, proto); 3878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// AnimateTranslateInit(cx, obj, proto); 3888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com BitmapInit(cx, obj, proto); 3898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// BaseBitmapInit(cx, obj, proto); 3908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// BeforeInit(cx, obj, proto); 3918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com BitmapShaderInit(cx, obj, proto); 3928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com BlurInit(cx, obj, proto); 3938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ClipInit(cx, obj, proto); 3948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ColorInit(cx, obj, proto); 3958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com CubicToInit(cx, obj, proto); 3968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DashInit(cx, obj, proto); 3978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DataInit(cx, obj, proto); 3988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// DimensionsInit(cx, obj, proto); 3998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DiscreteInit(cx, obj, proto); 4008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DrawToInit(cx, obj, proto); 4018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EmbossInit(cx, obj, proto); 4028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EventInit(cx, obj, proto); 4038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// FontInit(cx, obj, proto); 4048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// FocusInit(cx, obj, proto); 4058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ImageInit(cx, obj, proto); 4068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com IncludeInit(cx, obj, proto); 4078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// InputInit(cx, obj, proto); 4088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com LineInit(cx, obj, proto); 4098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com LinearGradientInit(cx, obj, proto); 4108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com LineToInit(cx, obj, proto); 4118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com MatrixInit(cx, obj, proto); 4128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com MoveInit(cx, obj, proto); 4138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com MoveToInit(cx, obj, proto); 4148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OvalInit(cx, obj, proto); 4158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PathInit(cx, obj, proto); 4168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PaintInit(cx, obj, proto); 4178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DrawPointInit(cx, obj, proto); 4188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PolyToPolyInit(cx, obj, proto); 4198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PolygonInit(cx, obj, proto); 4208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PolylineInit(cx, obj, proto); 4218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com PostInit(cx, obj, proto); 4228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com QuadToInit(cx, obj, proto); 4238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com RadialGradientInit(cx, obj, proto); 4248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com RandomInit(cx, obj, proto); 4258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com RectToRectInit(cx, obj, proto); 4268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com RectangleInit(cx, obj, proto); 4278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com RemoveInit(cx, obj, proto); 4288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ReplaceInit(cx, obj, proto); 4298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com RotateInit(cx, obj, proto); 4308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com RoundRectInit(cx, obj, proto); 4318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ScaleInit(cx, obj, proto); 4328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SetInit(cx, obj, proto); 4338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkewInit(cx, obj, proto); 4348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // 3D_CameraInit(cx, obj, proto); 4358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // 3D_PatchInit(cx, obj, proto); 4368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SnapshotInit(cx, obj, proto); 4378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// StrokeInit(cx, obj, proto); 4388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com TextInit(cx, obj, proto); 4398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com TextOnPathInit(cx, obj, proto); 4408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com TextToPathInit(cx, obj, proto); 4418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com TranslateInit(cx, obj, proto); 4428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// UseInit(cx, obj, proto); 4438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 4448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkJS::DisposeDisplayables() { 4468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete SkJSDisplayable::gPaint; 4478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete SkJSDisplayable::gCanvas; 4488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (int index = 0; index < kTypeNamesSize; index++) { 4498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes type = gTypeNames[index].fType; 4508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete[] gDisplayableProperties[type]; 4518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 453