1685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com 2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/* 3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2006 The Android Open Source Project 4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * 5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file. 7685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com */ 8685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com 9bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 10bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include <jsapi.h> 11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkJS.h" 12bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDisplayType.h" 13bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkAnimateColor.h" 14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkAnimateMaker.h" 15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkAnimateSet.h" 16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkAnimateTransform.h" 17bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkCanvas.h" 18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkDimensions.h" 19bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDisplayAdd.h" 20bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDisplayApply.h" 21bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkDisplayBefore.h" 22bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDisplayEvent.h" 23bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkDisplayFocus.h" 24bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDisplayInclude.h" 25bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDisplayPost.h" 26bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDisplayRandom.h" 27bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDraw3D.h" 28bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawBitmap.h" 29bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawClip.h" 30bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawDash.h" 31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawDiscrete.h" 32bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawEmboss.h" 33bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkDrawFont.h" 34bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawFull.h" 35bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawGradient.h" 36bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawLine.h" 37bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkDrawMaskFilter.h" 38bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawMatrix.h" 39bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawOval.h" 40bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawPaint.h" 41bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawPath.h" 42bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawPoint.h" 43bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// #include "SkDrawStroke.h" 44bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawText.h" 45bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawTo.h" 46bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkDrawTransferMode.h" 47bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawTransparentShader.h" 48bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//#include "SkDrawUse.h" 49bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkMatrixParts.h" 50bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkPathParts.h" 51bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkPostParts.h" 52bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkScript.h" 53bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkSnapshot.h" 54bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkTextOnPath.h" 55bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkTextToPath.h" 56bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 57bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 58bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comclass SkJSDisplayable { 59bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 60bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkJSDisplayable() : fDisplayable(NULL) {} 61bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ~SkJSDisplayable() { delete fDisplayable; } 62bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static void Destructor(JSContext *cx, JSObject *obj); 63bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static JSBool GetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp); 64bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static JSBool SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp); 65bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static SkCanvas* gCanvas; 66bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static SkPaint* gPaint; 67bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com static JSBool Draw(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); 68bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayable* fDisplayable; 69bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}; 70bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 71bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkCanvas* SkJSDisplayable::gCanvas; 72bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkPaint* SkJSDisplayable::gPaint; 73bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 74bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJSBool SkJSDisplayable::Draw(JSContext *cx, JSObject *obj, uintN argc, 75bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com jsval *argv, jsval *rval) 76bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com{ 77bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkJSDisplayable *p = (SkJSDisplayable*) JS_GetPrivate(cx, obj); 78bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(p->fDisplayable->isDrawable()); 79bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDrawable* drawable = (SkDrawable*) p->fDisplayable; 80bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkAnimateMaker maker(NULL, gCanvas, gPaint); 81bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com drawable->draw(maker); 82bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com return JS_TRUE; 83bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 84bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 85bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 86dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.comJSFunctionSpec SkJSDisplayable_methods[] = 87bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com{ 88bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com { "draw", SkJSDisplayable::Draw, 1, 0, 0 }, 89bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com { 0 } 90bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}; 91bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 92bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comstatic JSPropertySpec* gDisplayableProperties[kNumberOfTypes]; 93bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comstatic JSClass gDisplayableClasses[kNumberOfTypes]; 94bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 95bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#define JS_INIT(_prefix, _class) \ 96bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comstatic JSBool _class##Constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { \ 97bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkJSDisplayable* jsDisplayable = new SkJSDisplayable(); \ 98bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com jsDisplayable->fDisplayable = new _prefix##_class(); \ 99bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com JS_SetPrivate(cx, obj, (void*) jsDisplayable); \ 100bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com return JS_TRUE; \ 101bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} \ 102bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com \ 103bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comstatic JSObject* _class##Init(JSContext *cx, JSObject *obj, JSObject *proto) { \ 104bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com JSObject *newProtoObj = JS_InitClass(cx, obj, proto, &gDisplayableClasses[SkType_##_class], \ 105bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com _class##Constructor, 0, \ 106bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com NULL, SkJSDisplayable_methods , \ 107bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com NULL, NULL); \ 108bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com JS_DefineProperties(cx, newProtoObj, gDisplayableProperties[SkType_##_class]); \ 109bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com return newProtoObj; \ 110bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 111bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 112bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Add) 113bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, AddCircle) 114bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, AddOval) 115bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, AddPath) 116bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, AddRectangle) 117bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, AddRoundRect) 118bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, After) 119bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Apply) 120bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// JS_INIT(Sk, Animate) 121bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, AnimateColor) 122bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, AnimateField) 123bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, AnimateRotate) 124bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, AnimateScale) 125bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, AnimateTranslate) 126bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Bitmap) 127bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, BaseBitmap) 128bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, Before) 129bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, BitmapShader) 130bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Blur) 131bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Clip) 132bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Color) 133bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, CubicTo) 134bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Dash) 135bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Data) 136bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, Dimensions) 137bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Discrete) 138bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, DrawTo) 139bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Emboss) 140bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDisplay, Event) 141bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// JS_INIT(SkDraw, Font) 142bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// JS_INIT(Sk, Focus) 143bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Image) 144bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Include) 145bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// JS_INIT(Sk, Input) 146bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Line) 147bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, LinearGradient) 148bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, LineTo) 149bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Matrix) 150bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Move) 151bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, MoveTo) 152bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Oval) 153bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Path) 154bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDraw, Paint) 155bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, DrawPoint) 156bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, PolyToPoly) 157bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Polygon) 158bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Polyline) 159bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Post) 160bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, QuadTo) 161bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, RadialGradient) 162bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(SkDisplay, Random) 163bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, RectToRect) 164bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Rectangle) 165bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Remove) 166bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Replace) 167bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Rotate) 168bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, RoundRect) 169bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Scale) 170bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Set) 171bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Skew) 172bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// JS_INIT(Sk, 3D_Camera) 173bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// JS_INIT(Sk, 3D_Patch) 174bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Snapshot) 175bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// JS_INIT(SkDraw, Stroke) 176bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Text) 177bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, TextOnPath) 178bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, TextToPath) 179bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJS_INIT(Sk, Translate) 180bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//JS_INIT(Sk, Use) 181bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 182bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#if SK_USE_CONDENSED_INFO == 0 183bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comstatic void GenerateTables() { 184bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com for (int index = 0; index < kTypeNamesSize; index++) { 185bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int infoCount; 186bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayTypes type = gTypeNames[index].fType; 187bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, type, &infoCount); 188bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (info == NULL) 189bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com continue; 190bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableProperties[type] = new JSPropertySpec[infoCount + 1]; 191bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com JSPropertySpec* propertySpec = gDisplayableProperties[type]; 192bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com memset(propertySpec, 0, sizeof (JSPropertySpec) * (infoCount + 1)); 193bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com for (int inner = 0; inner < infoCount; inner++) { 194bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (info[inner].fType == SkType_BaseClassInfo) 195bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com continue; 196bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com propertySpec[inner].name = info[inner].fName; 197bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com propertySpec[inner].tinyid = inner; 198bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com propertySpec[inner].flags = JSPROP_ENUMERATE; 199bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 200bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].name = gTypeNames[index].fName; 201bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].flags = JSCLASS_HAS_PRIVATE; 202bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].addProperty = JS_PropertyStub; 203bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].delProperty = JS_PropertyStub; 204bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].getProperty = SkJSDisplayable::GetProperty; 205bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].setProperty = SkJSDisplayable::SetProperty; 206bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].enumerate = JS_EnumerateStub; 207bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].resolve = JS_ResolveStub; 208bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].convert = JS_ConvertStub; 209bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com gDisplayableClasses[type].finalize = SkJSDisplayable::Destructor; 210bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 211bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 212bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 213bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 214bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkJSDisplayable::Destructor(JSContext *cx, JSObject *obj) { 215bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com delete (SkJSDisplayable*) JS_GetPrivate(cx, obj); 216bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 217bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 218bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJSBool SkJSDisplayable::GetProperty(JSContext *cx, JSObject *obj, jsval id, 219bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com jsval *vp) 220bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com{ 221bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (JSVAL_IS_INT(id) == 0) 222dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com return JS_TRUE; 223bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj); 224bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayable* displayable = p->fDisplayable; 225bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayTypes displayableType = displayable->getType(); 226bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int members; 227bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members); 228bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int idIndex = JSVAL_TO_INT(id); 229bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(idIndex >= 0 && idIndex < members); 230bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com info = &info[idIndex]; 231bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayTypes infoType = (SkDisplayTypes) info->fType; 232bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkScalar scalar = 0; 233bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com S32 s32 = 0; 234bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkString* string= NULL; 235bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com JSString *str; 236bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (infoType == SkType_MemberProperty) { 237bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com infoType = info->propertyType(); 238bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com switch (infoType) { 239bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Scalar: { 240bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkScriptValue scriptValue; 241bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com bool success = displayable->getProperty(info->propertyIndex(), &scriptValue); 242bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(scriptValue.fType == SkType_Scalar); 243bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scalar = scriptValue.fOperand.fScalar; 244bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } break; 245bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com default: 246bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(0); // !!! unimplemented 247bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 248bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } else { 249bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(info->fCount == 1); 250bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com switch (infoType) { 251bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Boolean: 252bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Color: 253bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_S32: 254bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com s32 = *(S32*) info->memberData(displayable); 255bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 256bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_String: 257bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com info->getString(displayable, &string); 258bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 259bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Scalar: 260bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkOperand operand; 261bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com info->getValue(displayable, &operand, 1); 262bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scalar = operand.fScalar; 263bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 264bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com default: 265bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(0); // !!! unimplemented 266bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 267bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 268bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com switch (infoType) { 269bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Boolean: 270bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com *vp = BOOLEAN_TO_JSVAL(s32); 271bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 272bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Color: 273bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_S32: 274bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com *vp = INT_TO_JSVAL(s32); 275bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 276bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Scalar: 277bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (SkScalarFraction(scalar) == 0) 278bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com *vp = INT_TO_JSVAL(SkScalarFloor(scalar)); 279bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com else 280bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_SCALAR_IS_FLOAT 281bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com *vp = DOUBLE_TO_JSVAL(scalar); 282bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#else 283bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com *vp = DOUBLE_TO_JSVAL(scalar / 65536.0f ); 284bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 285bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 286bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_String: 287bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com str = JS_NewStringCopyN(cx, string->c_str(), string->size()); 288bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com *vp = STRING_TO_JSVAL(str); 289bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 290bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com default: 291bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(0); // !!! unimplemented 292bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 293bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com return JS_TRUE; 294bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 295bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 296bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comJSBool SkJSDisplayable::SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { 297bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (JSVAL_IS_INT(id) == 0) 298dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com return JS_TRUE; 299bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj); 300bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayable* displayable = p->fDisplayable; 301bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayTypes displayableType = displayable->getType(); 302bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int members; 303bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members); 304bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int idIndex = JSVAL_TO_INT(id); 305bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(idIndex >= 0 && idIndex < members); 306bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com info = &info[idIndex]; 307bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayTypes infoType = info->getType(); 308bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkScalar scalar = 0; 309bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com S32 s32 = 0; 310bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkString string; 311bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com JSString* str; 312bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com jsval value = *vp; 313bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com switch (infoType) { 314bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Boolean: 315bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com s32 = JSVAL_TO_BOOLEAN(value); 316bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 317bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Color: 318bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_S32: 319bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com s32 = JSVAL_TO_INT(value); 320bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 321bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Scalar: 322bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (JSVAL_IS_INT(value)) 323bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scalar = SkIntToScalar(JSVAL_TO_INT(value)); 324bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com else { 325bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(JSVAL_IS_DOUBLE(value)); 326bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_SCALAR_IS_FLOAT 327bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scalar = (float) *(double*) JSVAL_TO_DOUBLE(value); 328bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#else 329bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scalar = (SkFixed) (*(double*)JSVAL_TO_DOUBLE(value) * 65536.0); 330bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 331bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 332bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 333bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_String: 334bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com str = JS_ValueToString(cx, value); 335bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com string.set(JS_GetStringBytes(str)); 336bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 337bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com default: 338bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(0); // !!! unimplemented 339bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 340bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com if (info->fType == SkType_MemberProperty) { 341bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com switch (infoType) { 342bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Scalar: { 343bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkScriptValue scriptValue; 344bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scriptValue.fType = SkType_Scalar; 345bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com scriptValue.fOperand.fScalar = scalar; 346bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com displayable->setProperty(-1 - (int) info->fOffset, scriptValue); 347bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } break; 348bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com default: 349bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(0); // !!! unimplemented 350bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 351bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } else { 352bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(info->fCount == 1); 353bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com switch (infoType) { 354bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Boolean: 355bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Color: 356bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_S32: 357bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com s32 = *(S32*) ((const char*) displayable + info->fOffset); 358bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 359bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_String: 360bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com info->setString(displayable, &string); 361bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 362bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com case SkType_Scalar: 363bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkOperand operand; 364bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com operand.fScalar = scalar; 365bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com info->setValue(displayable, &operand, 1); 366bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com break; 367bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com default: 368bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(0); // !!! unimplemented 369bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 370bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 371bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com return JS_TRUE; 372bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 373bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 374bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkJS::InitializeDisplayables(const SkBitmap& bitmap, JSContext *cx, JSObject *obj, JSObject *proto) { 375bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkJSDisplayable::gCanvas = new SkCanvas(bitmap); 376bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkJSDisplayable::gPaint = new SkPaint(); 377bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#if SK_USE_CONDENSED_INFO == 0 378bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com GenerateTables(); 379bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#else 380bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkASSERT(0); // !!! compressed version hasn't been implemented 381bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 382bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com AddInit(cx, obj, proto); 383bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com AddCircleInit(cx, obj, proto); 384bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com AddOvalInit(cx, obj, proto); 385bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com AddPathInit(cx, obj, proto); 386bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com AddRectangleInit(cx, obj, proto); 387bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com AddRoundRectInit(cx, obj, proto); 388bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// AfterInit(cx, obj, proto); 389bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ApplyInit(cx, obj, proto); 390bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com // AnimateInit(cx, obj, proto); 391bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// AnimateColorInit(cx, obj, proto); 392bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com AnimateFieldInit(cx, obj, proto); 393bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// AnimateRotateInit(cx, obj, proto); 394bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// AnimateScaleInit(cx, obj, proto); 395bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// AnimateTranslateInit(cx, obj, proto); 396bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com BitmapInit(cx, obj, proto); 397bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// BaseBitmapInit(cx, obj, proto); 398bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// BeforeInit(cx, obj, proto); 399bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com BitmapShaderInit(cx, obj, proto); 400bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com BlurInit(cx, obj, proto); 401bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ClipInit(cx, obj, proto); 402bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ColorInit(cx, obj, proto); 403bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com CubicToInit(cx, obj, proto); 404bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com DashInit(cx, obj, proto); 405bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com DataInit(cx, obj, proto); 406bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// DimensionsInit(cx, obj, proto); 407bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com DiscreteInit(cx, obj, proto); 408bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com DrawToInit(cx, obj, proto); 409bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com EmbossInit(cx, obj, proto); 410bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com EventInit(cx, obj, proto); 411bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// FontInit(cx, obj, proto); 412bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// FocusInit(cx, obj, proto); 413bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ImageInit(cx, obj, proto); 414bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com IncludeInit(cx, obj, proto); 415bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// InputInit(cx, obj, proto); 416bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com LineInit(cx, obj, proto); 417bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com LinearGradientInit(cx, obj, proto); 418bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com LineToInit(cx, obj, proto); 419bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com MatrixInit(cx, obj, proto); 420bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com MoveInit(cx, obj, proto); 421bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com MoveToInit(cx, obj, proto); 422bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com OvalInit(cx, obj, proto); 423bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com PathInit(cx, obj, proto); 424bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com PaintInit(cx, obj, proto); 425bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com DrawPointInit(cx, obj, proto); 426bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com PolyToPolyInit(cx, obj, proto); 427bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com PolygonInit(cx, obj, proto); 428bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com PolylineInit(cx, obj, proto); 429bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com PostInit(cx, obj, proto); 430bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com QuadToInit(cx, obj, proto); 431bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com RadialGradientInit(cx, obj, proto); 432bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com RandomInit(cx, obj, proto); 433bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com RectToRectInit(cx, obj, proto); 434bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com RectangleInit(cx, obj, proto); 435bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com RemoveInit(cx, obj, proto); 436bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ReplaceInit(cx, obj, proto); 437bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com RotateInit(cx, obj, proto); 438bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com RoundRectInit(cx, obj, proto); 439bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com ScaleInit(cx, obj, proto); 440bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SetInit(cx, obj, proto); 441bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkewInit(cx, obj, proto); 442bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com // 3D_CameraInit(cx, obj, proto); 443bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com // 3D_PatchInit(cx, obj, proto); 444bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SnapshotInit(cx, obj, proto); 445bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// StrokeInit(cx, obj, proto); 446bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com TextInit(cx, obj, proto); 447bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com TextOnPathInit(cx, obj, proto); 448bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com TextToPathInit(cx, obj, proto); 449bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com TranslateInit(cx, obj, proto); 450bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com// UseInit(cx, obj, proto); 451bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 452bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 453bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkJS::DisposeDisplayables() { 454bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com delete SkJSDisplayable::gPaint; 455bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com delete SkJSDisplayable::gCanvas; 456bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com for (int index = 0; index < kTypeNamesSize; index++) { 457bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDisplayTypes type = gTypeNames[index].fType; 458bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com delete[] gDisplayableProperties[type]; 459bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 460bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com} 461