174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/* 274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com * Copyright 2013 Google Inc. 374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com * 474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com * Use of this source code is governed by a BSD-style license that can be 574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com * found in the LICENSE file. 674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com */ 774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkLua.h" 94ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 104ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#if SK_SUPPORT_GPU 114ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#include "GrReducedClip.h" 124ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#endif 134ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 1474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkCanvas.h" 15792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org#include "SkData.h" 16fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org#include "SkDocument.h" 17792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org#include "SkImage.h" 18792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org#include "SkMatrix.h" 1974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkPaint.h" 2074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkPath.h" 215fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com#include "SkPixelRef.h" 2274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkRRect.h" 2374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkString.h" 24e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com#include "SkTypeface.h" 2574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 2674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comextern "C" { 273597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com #include "lua.h" 283597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com #include "lualib.h" 293597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com #include "lauxlib.h" 303597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 313597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 32fd3458750d92d9722e5760ddb99824e65455463creed@google.com// return the metatable name for a given class 333597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comtemplate <typename T> const char* get_mtname(); 34fd3458750d92d9722e5760ddb99824e65455463creed@google.com#define DEF_MTNAME(T) \ 35fd3458750d92d9722e5760ddb99824e65455463creed@google.com template <> const char* get_mtname<T>() { \ 36fd3458750d92d9722e5760ddb99824e65455463creed@google.com return #T "_LuaMetaTableName"; \ 37fd3458750d92d9722e5760ddb99824e65455463creed@google.com } 38fd3458750d92d9722e5760ddb99824e65455463creed@google.com 39fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkCanvas) 40fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgDEF_MTNAME(SkDocument) 41792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgDEF_MTNAME(SkImage) 42fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkMatrix) 43fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkRRect) 44fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkPath) 45fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkPaint) 461301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgDEF_MTNAME(SkPathEffect) 475fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comDEF_MTNAME(SkShader) 48e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgDEF_MTNAME(SkTypeface) 493597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 503597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comtemplate <typename T> T* push_new(lua_State* L) { 513597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com T* addr = (T*)lua_newuserdata(L, sizeof(T)); 523597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com new (addr) T; 533597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_getmetatable(L, get_mtname<T>()); 543597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_setmetatable(L, -2); 553597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return addr; 5674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 5774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 5874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comtemplate <typename T> void push_obj(lua_State* L, const T& obj) { 5974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com new (lua_newuserdata(L, sizeof(T))) T(obj); 603597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_getmetatable(L, get_mtname<T>()); 6174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setmetatable(L, -2); 6274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 6374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 6474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comtemplate <typename T> void push_ref(lua_State* L, T* ref) { 6577887af13f1f0a2e349155f74e6b5ded6aafe179commit-bot@chromium.org *(T**)lua_newuserdata(L, sizeof(T*)) = SkSafeRef(ref); 663597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_getmetatable(L, get_mtname<T>()); 6774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setmetatable(L, -2); 6874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 6974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 7074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comtemplate <typename T> T* get_ref(lua_State* L, int index) { 713597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return *(T**)luaL_checkudata(L, index, get_mtname<T>()); 7274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 7374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 7474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comtemplate <typename T> T* get_obj(lua_State* L, int index) { 753597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return (T*)luaL_checkudata(L, index, get_mtname<T>()); 7674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 7774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 7888c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.comstatic bool lua2bool(lua_State* L, int index) { 7988c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com return !!lua_toboolean(L, index); 8088c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com} 8188c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com 8274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 8374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 843597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comSkLua::SkLua(const char termCode[]) : fTermCode(termCode), fWeOwnL(true) { 853597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com fL = luaL_newstate(); 863597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_openlibs(fL); 873597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com SkLua::Load(fL); 883597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 893597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 903597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comSkLua::SkLua(lua_State* L) : fL(L), fWeOwnL(false) {} 913597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 923597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comSkLua::~SkLua() { 933597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (fWeOwnL) { 943597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (fTermCode.size() > 0) { 953597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_getglobal(fL, fTermCode.c_str()); 963597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (lua_pcall(fL, 0, 0, 0) != LUA_OK) { 973597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com SkDebugf("lua err: %s\n", lua_tostring(fL, -1)); 983597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 993597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 1003597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_close(fL); 1013597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 1023597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 1033597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1043597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.combool SkLua::runCode(const char code[]) { 1053597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com int err = luaL_loadstring(fL, code) || lua_pcall(fL, 0, 0, 0); 1063597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (err) { 10773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkDebugf("--- lua failed: %s\n", lua_tostring(fL, -1)); 1083597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return false; 1093597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 1103597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return true; 1113597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 1123597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1133597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.combool SkLua::runCode(const void* code, size_t size) { 1143597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com SkString str((const char*)code, size); 1153597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return this->runCode(str.c_str()); 1163597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 1173597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1183597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com/////////////////////////////////////////////////////////////////////////////// 1193597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1203597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com#define CHECK_SETFIELD(key) do if (key) lua_setfield(fL, -2, key); while (0) 1213597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 12229563879168ed58a8295520fbb4381d0ceff9f2freed@google.comstatic void setfield_bool_if(lua_State* L, const char key[], bool pred) { 12329563879168ed58a8295520fbb4381d0ceff9f2freed@google.com if (pred) { 12429563879168ed58a8295520fbb4381d0ceff9f2freed@google.com lua_pushboolean(L, true); 12529563879168ed58a8295520fbb4381d0ceff9f2freed@google.com lua_setfield(L, -2, key); 12629563879168ed58a8295520fbb4381d0ceff9f2freed@google.com } 12729563879168ed58a8295520fbb4381d0ceff9f2freed@google.com} 12829563879168ed58a8295520fbb4381d0ceff9f2freed@google.com 12974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic void setfield_string(lua_State* L, const char key[], const char value[]) { 13074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, value); 13174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setfield(L, -2, key); 13274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 13374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 13474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic void setfield_number(lua_State* L, const char key[], double value) { 13574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, value); 13674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setfield(L, -2, key); 13774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 13874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1392815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comstatic void setfield_boolean(lua_State* L, const char key[], bool value) { 1402815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com lua_pushboolean(L, value); 1412815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com lua_setfield(L, -2, key); 1422815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com} 1432815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 14473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic void setfield_scalar(lua_State* L, const char key[], SkScalar value) { 14573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_number(L, key, SkScalarToLua(value)); 14673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 14773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 1483597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic void setfield_function(lua_State* L, 1493597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com const char key[], lua_CFunction value) { 1503597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_pushcfunction(L, value); 1513597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_setfield(L, -2, key); 15274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 15374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 154e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic void setarray_number(lua_State* L, int index, double value) { 155e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_pushnumber(L, value); 156e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_rawseti(L, -2, index); 157e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 158e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 1594d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgstatic void setarray_scalar(lua_State* L, int index, SkScalar value) { 1604d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org setarray_number(L, index, SkScalarToLua(value)); 1614d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 1624d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 16374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushBool(bool value, const char key[]) { 16474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(fL, value); 16574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 16674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 16774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 16874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushString(const char str[], const char key[]) { 16974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(fL, str); 17074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 17174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 17274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 173e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comvoid SkLua::pushString(const char str[], size_t length, const char key[]) { 174e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com // TODO: how to do this w/o making a copy? 175e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkString s(str, length); 176e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_pushstring(fL, s.c_str()); 177e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com CHECK_SETFIELD(key); 178e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 179e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 18074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushString(const SkString& str, const char key[]) { 18174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(fL, str.c_str()); 18274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 18374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 18474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 18574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushColor(SkColor color, const char key[]) { 18674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_newtable(fL); 18774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "a", SkColorGetA(color) / 255.0); 18874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "r", SkColorGetR(color) / 255.0); 18974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "g", SkColorGetG(color) / 255.0); 19074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "b", SkColorGetB(color) / 255.0); 19174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 19274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 19374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 194e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comvoid SkLua::pushU32(uint32_t value, const char key[]) { 195e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_pushnumber(fL, (double)value); 196e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com CHECK_SETFIELD(key); 197e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 198e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 19974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushScalar(SkScalar value, const char key[]) { 20074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(fL, SkScalarToLua(value)); 20174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 20274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 20374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 204e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comvoid SkLua::pushArrayU16(const uint16_t array[], int count, const char key[]) { 205e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_newtable(fL); 206e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com for (int i = 0; i < count; ++i) { 207e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com // make it base-1 to match lua convention 208e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com setarray_number(fL, i + 1, (double)array[i]); 209e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com } 210e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com CHECK_SETFIELD(key); 211e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 212e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 2131301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgvoid SkLua::pushArrayPoint(const SkPoint array[], int count, const char key[]) { 2141301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org lua_newtable(fL); 2151301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org for (int i = 0; i < count; ++i) { 2161301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org // make it base-1 to match lua convention 2171301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org lua_newtable(fL); 2181301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org this->pushScalar(array[i].fX, "x"); 2191301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org this->pushScalar(array[i].fY, "y"); 2201301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org lua_rawseti(fL, -2, i + 1); 2211301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org } 2221301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org CHECK_SETFIELD(key); 2231301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org} 2241301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 2254d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgvoid SkLua::pushArrayScalar(const SkScalar array[], int count, const char key[]) { 2264d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org lua_newtable(fL); 2274d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org for (int i = 0; i < count; ++i) { 2284d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org // make it base-1 to match lua convention 2294d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org setarray_scalar(fL, i + 1, array[i]); 2304d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org } 2314d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org CHECK_SETFIELD(key); 2324d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 2334d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 23474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushRect(const SkRect& r, const char key[]) { 23574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_newtable(fL); 23673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "left", r.fLeft); 23773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "top", r.fTop); 23873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "right", r.fRight); 23973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "bottom", r.fBottom); 24074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 24174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 24274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 24374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushRRect(const SkRRect& rr, const char key[]) { 24474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, rr); 24574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 24674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 24774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 2484d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgvoid SkLua::pushDash(const SkPathEffect::DashInfo& info, const char key[]) { 2494d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org lua_newtable(fL); 2504d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org setfield_scalar(fL, "phase", info.fPhase); 2514d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org this->pushArrayScalar(info.fIntervals, info.fCount, "intervals"); 2524d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org CHECK_SETFIELD(key); 2534d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 2544d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 2554d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 25674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushMatrix(const SkMatrix& matrix, const char key[]) { 25774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, matrix); 25874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 25974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 26074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 26174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushPaint(const SkPaint& paint, const char key[]) { 26274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, paint); 26374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 26474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 26574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 26674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushPath(const SkPath& path, const char key[]) { 26774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, path); 26874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 26974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 27074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 27174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushCanvas(SkCanvas* canvas, const char key[]) { 27274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_ref(fL, canvas); 27374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 27474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 27574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 2765cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgstatic const char* element_type(SkClipStack::Element::Type type) { 2775cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org switch (type) { 2785cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kEmpty_Type: 2795cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "empty"; 2805cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kRect_Type: 2815cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "rect"; 2825cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kRRect_Type: 2835cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "rrect"; 2845cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kPath_Type: 2855cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "path"; 2865cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org } 2875cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "unknown"; 2885cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 2895cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 2905cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgstatic const char* region_op(SkRegion::Op op) { 2915cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org switch (op) { 2925cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kDifference_Op: 2935cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "difference"; 2945cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kIntersect_Op: 2955cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "intersect"; 2965cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kUnion_Op: 2975cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "union"; 2985cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kXOR_Op: 2995cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "xor"; 3005cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kReverseDifference_Op: 3015cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "reverse-difference"; 3025cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kReplace_Op: 3035cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "replace"; 3045cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org } 3055cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "unknown"; 3065cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 3075cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 3085cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgvoid SkLua::pushClipStack(const SkClipStack& stack, const char* key) { 3095cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org lua_newtable(fL); 3105cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org SkClipStack::B2TIter iter(stack); 3115cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org const SkClipStack::Element* element; 3125cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org int i = 0; 3135cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org while (NULL != (element = iter.next())) { 3144ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushClipStackElement(*element); 3155cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org lua_rawseti(fL, -2, ++i); 3165cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org } 3175cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org CHECK_SETFIELD(key); 3185cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 3195cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 3204ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.comvoid SkLua::pushClipStackElement(const SkClipStack::Element& element, const char* key) { 3214ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com lua_newtable(fL); 3224ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkClipStack::Element::Type type = element.getType(); 3234ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushString(element_type(type), "type"); 3244ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com switch (type) { 3254ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kEmpty_Type: 3264ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3274ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kRect_Type: 3284ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushRect(element.getRect(), "rect"); 3294ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3304ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kRRect_Type: 3314ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushRRect(element.getRRect(), "rrect"); 3324ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3334ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kPath_Type: 3344ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushPath(element.getPath(), "path"); 3354ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3364ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com } 3374ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushString(region_op(element.getOp()), "op"); 3384ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushBool(element.isAA(), "aa"); 3394ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com CHECK_SETFIELD(key); 3404ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com} 3414ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 3424ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 34374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 34474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 34574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 34674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic SkScalar lua2scalar(lua_State* L, int index) { 34774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkASSERT(lua_isnumber(L, index)); 34874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return SkLuaToScalar(lua_tonumber(L, index)); 34974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 35074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 3511d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.orgstatic SkScalar lua2scalar_def(lua_State* L, int index, SkScalar defaultValue) { 3521d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org if (lua_isnumber(L, index)) { 3531d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org return SkLuaToScalar(lua_tonumber(L, index)); 3541d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org } else { 3551d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org return defaultValue; 3561d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org } 3571d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org} 3581d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org 35974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic SkScalar getfield_scalar(lua_State* L, int index, const char key[]) { 36074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkASSERT(lua_istable(L, index)); 36174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, key); 36274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_gettable(L, index); 363370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 36474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkScalar value = lua2scalar(L, -1); 36574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pop(L, 1); 36674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return value; 36774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 36874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 36973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic SkScalar getfield_scalar_default(lua_State* L, int index, const char key[], SkScalar def) { 37073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkASSERT(lua_istable(L, index)); 37173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_pushstring(L, key); 37273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_gettable(L, index); 373370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 37473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar value; 37573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org if (lua_isnil(L, -1)) { 37673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org value = def; 37773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } else { 37873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org value = lua2scalar(L, -1); 37973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } 38073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_pop(L, 1); 38173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return value; 38273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 38373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 38474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic U8CPU unit2byte(SkScalar x) { 38574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (x <= 0) { 38674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 38774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } else if (x >= 1) { 38874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 255; 38974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } else { 39074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return SkScalarRoundToInt(x * 255); 39174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 39274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 39374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 39474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic SkColor lua2color(lua_State* L, int index) { 39574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return SkColorSetARGB(unit2byte(getfield_scalar(L, index, "a")), 39674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com unit2byte(getfield_scalar(L, index, "r")), 39774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com unit2byte(getfield_scalar(L, index, "g")), 39874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com unit2byte(getfield_scalar(L, index, "b"))); 39974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 40074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 40174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic SkRect* lua2rect(lua_State* L, int index, SkRect* rect) { 40273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org rect->set(getfield_scalar_default(L, index, "left", 0), 40373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org getfield_scalar_default(L, index, "top", 0), 40474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com getfield_scalar(L, index, "right"), 40574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com getfield_scalar(L, index, "bottom")); 40674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return rect; 40774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 40874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 40974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawColor(lua_State* L) { 41074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->drawColor(lua2color(L, 2)); 41174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 41274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 41374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 41474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawRect(lua_State* L) { 41574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect rect; 41674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->drawRect(*lua2rect(L, 2, &rect), 41774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com *get_obj<SkPaint>(L, 3)); 41874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 41974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 42074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 42174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawOval(lua_State* L) { 42274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect rect; 42374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->drawOval(*lua2rect(L, 2, &rect), 42474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com *get_obj<SkPaint>(L, 3)); 42574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 42674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 42774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 42874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawCircle(lua_State* L) { 42974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->drawCircle(lua2scalar(L, 2), 43074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 3), 43174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 4), 43274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com *get_obj<SkPaint>(L, 5)); 43374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 43474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 43574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 436792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int lcanvas_drawImage(lua_State* L) { 437792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 438792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkImage* image = get_ref<SkImage>(L, 2); 439792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (NULL == image) { 440792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 441792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 442792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkScalar x = lua2scalar(L, 3); 443792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkScalar y = lua2scalar(L, 4); 444792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 445792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkPaint paint; 446792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org const SkPaint* paintPtr = NULL; 447792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (lua_isnumber(L, 5)) { 448792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org paint.setAlpha(SkScalarRoundToInt(lua2scalar(L, 5) * 255)); 449792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org paintPtr = &paint; 450792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 451792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org image->draw(canvas, x, y, paintPtr); 452792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 453792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 454792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 455fd3458750d92d9722e5760ddb99824e65455463creed@google.comstatic int lcanvas_drawPath(lua_State* L) { 456fd3458750d92d9722e5760ddb99824e65455463creed@google.com get_ref<SkCanvas>(L, 1)->drawPath(*get_obj<SkPath>(L, 2), 457fd3458750d92d9722e5760ddb99824e65455463creed@google.com *get_obj<SkPaint>(L, 3)); 458fd3458750d92d9722e5760ddb99824e65455463creed@google.com return 0; 459fd3458750d92d9722e5760ddb99824e65455463creed@google.com} 460fd3458750d92d9722e5760ddb99824e65455463creed@google.com 461e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lcanvas_drawText(lua_State* L) { 462e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (lua_gettop(L) < 5) { 463e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 464e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 465e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 466e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (lua_isstring(L, 2) && lua_isnumber(L, 3) && lua_isnumber(L, 4)) { 467e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org size_t len; 468e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org const char* text = lua_tolstring(L, 2, &len); 469e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org get_ref<SkCanvas>(L, 1)->drawText(text, len, 470e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org lua2scalar(L, 3), lua2scalar(L, 4), 471e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org *get_obj<SkPaint>(L, 5)); 472e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 473e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 474e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 475e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 47674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_getSaveCount(lua_State* L) { 47774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, get_ref<SkCanvas>(L, 1)->getSaveCount()); 47874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 47974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 48074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 48174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_getTotalMatrix(lua_State* L) { 48274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushMatrix(get_ref<SkCanvas>(L, 1)->getTotalMatrix()); 48374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 48474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 48574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 4865cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgstatic int lcanvas_getClipStack(lua_State* L) { 4875cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org SkLua(L).pushClipStack(*get_ref<SkCanvas>(L, 1)->getClipStack()); 4885cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return 1; 4895cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 4905cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 4914ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.comint SkLua::lcanvas_getReducedClipStack(lua_State* L) { 4924ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#if SK_SUPPORT_GPU 4934ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com const SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 4944ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkISize layerSize = canvas->getTopLayerSize(); 4954ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkIPoint layerOrigin = canvas->getTopLayerOrigin(); 4964ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkIRect queryBounds = SkIRect::MakeXYWH(layerOrigin.fX, layerOrigin.fY, 4974ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com layerSize.fWidth, layerSize.fHeight); 4984ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 4994ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::ElementList elements; 5004ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::InitialState initialState; 5014ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com int32_t genID; 5024ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkIRect resultBounds; 5034ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 5044ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com const SkClipStack& stack = *canvas->getClipStack(); 5054ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 5064ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::ReduceClipStack(stack, 5074ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com queryBounds, 5084ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &elements, 5094ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &genID, 5104ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &initialState, 5114ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &resultBounds, 5124ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com NULL); 5134ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 5144ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::ElementList::Iter iter(elements); 5154ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com int i = 0; 5164ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com lua_newtable(L); 5174ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com while(NULL != iter.get()) { 5184ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkLua(L).pushClipStackElement(*iter.get()); 5194ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com iter.next(); 5204ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com lua_rawseti(L, -2, ++i); 5214ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com } 5224ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com // Currently this only returns the element list to lua, not the initial state or result bounds. 5234ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com // It could return these as additional items on the lua stack. 5244ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com return 1; 5254ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#else 5264ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com return 0; 5274ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#endif 5284ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com} 5294ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 530fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lcanvas_save(lua_State* L) { 531fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->save()); 532fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 533fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 534fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 535fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lcanvas_restore(lua_State* L) { 536fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkCanvas>(L, 1)->restore(); 537fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 538fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 539fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 5401d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.orgstatic int lcanvas_scale(lua_State* L) { 5411d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar sx = lua2scalar_def(L, 2, 1); 5421d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar sy = lua2scalar_def(L, 3, sx); 5431d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org get_ref<SkCanvas>(L, 1)->scale(sx, sy); 5441d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org return 0; 5451d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org} 5461d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org 5473597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lcanvas_translate(lua_State* L) { 5481d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar tx = lua2scalar_def(L, 2, 0); 5491d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar ty = lua2scalar_def(L, 3, 0); 5501d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org get_ref<SkCanvas>(L, 1)->translate(tx, ty); 5511d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org return 0; 5521d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org} 5531d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org 5541d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.orgstatic int lcanvas_rotate(lua_State* L) { 5551d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar degrees = lua2scalar_def(L, 2, 0); 5561d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org get_ref<SkCanvas>(L, 1)->rotate(degrees); 5573597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 0; 5583597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 5593597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 56074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_gc(lua_State* L) { 56174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->unref(); 56274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 56374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 56474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 5654ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.comconst struct luaL_Reg gSkCanvas_Methods[] = { 56674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawColor", lcanvas_drawColor }, 56774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawRect", lcanvas_drawRect }, 56874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawOval", lcanvas_drawOval }, 56974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawCircle", lcanvas_drawCircle }, 570792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "drawImage", lcanvas_drawImage }, 571fd3458750d92d9722e5760ddb99824e65455463creed@google.com { "drawPath", lcanvas_drawPath }, 572e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "drawText", lcanvas_drawText }, 57374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getSaveCount", lcanvas_getSaveCount }, 57474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getTotalMatrix", lcanvas_getTotalMatrix }, 5755cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org { "getClipStack", lcanvas_getClipStack }, 5764ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#if SK_SUPPORT_GPU 5774ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack }, 5784ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#endif 579fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "save", lcanvas_save }, 580fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "restore", lcanvas_restore }, 5811d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org { "scale", lcanvas_scale }, 5823597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com { "translate", lcanvas_translate }, 5831d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org { "rotate", lcanvas_rotate }, 58474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lcanvas_gc }, 58574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 58674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 58774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 58874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 58974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 590fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_beginPage(lua_State* L) { 591fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const SkRect* contentPtr = NULL; 592fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org push_ref(L, get_ref<SkDocument>(L, 1)->beginPage(lua2scalar(L, 2), 593fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org lua2scalar(L, 3), 594fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org contentPtr)); 595fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 596fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 597fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 598fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_endPage(lua_State* L) { 599fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkDocument>(L, 1)->endPage(); 600fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 601fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 602fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 603fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_close(lua_State* L) { 604fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkDocument>(L, 1)->close(); 605fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 606fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 607fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 608fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_gc(lua_State* L) { 609fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkDocument>(L, 1)->unref(); 610fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 611fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 612fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 613fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic const struct luaL_Reg gSkDocument_Methods[] = { 614fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "beginPage", ldocument_beginPage }, 615fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "endPage", ldocument_endPage }, 616fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "close", ldocument_close }, 617fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "__gc", ldocument_gc }, 618fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { NULL, NULL } 619fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org}; 620fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 621fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 622fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 62374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_isAntiAlias(lua_State* L) { 62474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isAntiAlias()); 62574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 62674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 62774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 62874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_setAntiAlias(lua_State* L) { 62988c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com get_obj<SkPaint>(L, 1)->setAntiAlias(lua2bool(L, 2)); 63074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 63174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 63274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 6331cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isDither(lua_State* L) { 6341cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isDither()); 6351cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6361cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6371cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6381cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isUnderlineText(lua_State* L) { 6391cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isUnderlineText()); 6401cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6411cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6421cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6431cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isStrikeThruText(lua_State* L) { 6441cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isStrikeThruText()); 6451cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6461cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6471cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6481cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isFakeBoldText(lua_State* L) { 6491cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isFakeBoldText()); 6501cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6511cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6521cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6531cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isLinearText(lua_State* L) { 6541cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isLinearText()); 6551cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6561cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6571cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6581cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isSubpixelText(lua_State* L) { 6591cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isSubpixelText()); 6601cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6611cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6621cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6631cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isDevKernText(lua_State* L) { 6641cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isDevKernText()); 6651cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6661cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6671cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6681cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isLCDRenderText(lua_State* L) { 6691cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isLCDRenderText()); 6701cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6711cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6721cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6731cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isEmbeddedBitmapText(lua_State* L) { 6741cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isEmbeddedBitmapText()); 6751cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6761cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6771cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6781cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isAutohinted(lua_State* L) { 6791cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isAutohinted()); 6801cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6811cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6821cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 6831cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isVerticalText(lua_State* L) { 6841cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isVerticalText()); 6851cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 6861cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 6871cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 68874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_getColor(lua_State* L) { 68974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushColor(get_obj<SkPaint>(L, 1)->getColor()); 69074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 69174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 69274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 69374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_setColor(lua_State* L) { 69474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPaint>(L, 1)->setColor(lua2color(L, 2)); 69574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 69674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 69774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 698e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic int lpaint_getTextSize(lua_State* L) { 699e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getTextSize()); 700e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com return 1; 701e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 702e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 7031cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getTextScaleX(lua_State* L) { 7041cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getTextScaleX()); 7051cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 7061cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 7071cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 7081cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getTextSkewX(lua_State* L) { 7091cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getTextSkewX()); 7101cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 7111cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 7121cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 713e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic int lpaint_setTextSize(lua_State* L) { 714e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com get_obj<SkPaint>(L, 1)->setTextSize(lua2scalar(L, 2)); 715e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com return 0; 716e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 717e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 718e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lpaint_getTypeface(lua_State* L) { 719e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org push_ref(L, get_obj<SkPaint>(L, 1)->getTypeface()); 720e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 1; 721e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 722e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 723e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lpaint_setTypeface(lua_State* L) { 724e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org get_obj<SkPaint>(L, 1)->setTypeface(get_ref<SkTypeface>(L, 2)); 725e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 726e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 727e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 7281cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getHinting(lua_State* L) { 7291cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getHinting()); 7301cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 7311cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 7321cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 733e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic int lpaint_getFontID(lua_State* L) { 734e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkTypeface* face = get_obj<SkPaint>(L, 1)->getTypeface(); 735e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkLua(L).pushU32(SkTypeface::UniqueID(face)); 736e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com return 1; 737e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 738e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 739fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic const struct { 740fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const char* fLabel; 741fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org SkPaint::Align fAlign; 742fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} gAlignRec[] = { 743fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "left", SkPaint::kLeft_Align }, 744fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "center", SkPaint::kCenter_Align }, 745fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "right", SkPaint::kRight_Align }, 746fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org}; 747fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 748fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lpaint_getTextAlign(lua_State* L) { 749fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org SkPaint::Align align = get_obj<SkPaint>(L, 1)->getTextAlign(); 750fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org for (size_t i = 0; i < SK_ARRAY_COUNT(gAlignRec); ++i) { 751fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (gAlignRec[i].fAlign == align) { 752fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org lua_pushstring(L, gAlignRec[i].fLabel); 753fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 754fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 755fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 756fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 757fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 758fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 759fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lpaint_setTextAlign(lua_State* L) { 760fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (lua_isstring(L, 2)) { 761fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org size_t len; 762fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const char* label = lua_tolstring(L, 2, &len); 763370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 764fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org for (size_t i = 0; i < SK_ARRAY_COUNT(gAlignRec); ++i) { 765fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (!strcmp(gAlignRec[i].fLabel, label)) { 766fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_obj<SkPaint>(L, 1)->setTextAlign(gAlignRec[i].fAlign); 767fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org break; 768fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 769fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 770fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 771fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 772fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 773fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 77473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_getStroke(lua_State* L) { 77573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_pushboolean(L, SkPaint::kStroke_Style == get_obj<SkPaint>(L, 1)->getStyle()); 77673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 1; 77773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 77873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 77973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_setStroke(lua_State* L) { 78073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkPaint::Style style; 781370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 78273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org if (lua_toboolean(L, 2)) { 78373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org style = SkPaint::kStroke_Style; 78473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } else { 78573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org style = SkPaint::kFill_Style; 78673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } 78773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org get_obj<SkPaint>(L, 1)->setStyle(style); 78873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 0; 78973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 79073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 7911cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getStrokeCap(lua_State* L) { 7921cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getStrokeCap()); 7931cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 7941cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 7951cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 7961cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getStrokeJoin(lua_State* L) { 7971cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getStrokeJoin()); 7981cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 7991cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8001cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8011cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getTextEncoding(lua_State* L) { 802641bcc3c5caac1ed544cce95fa58ace904910dc4commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getTextEncoding()); 8031cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8041cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8051cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 80673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_getStrokeWidth(lua_State* L) { 80773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getStrokeWidth()); 80873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 1; 80973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 81073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 81173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_setStrokeWidth(lua_State* L) { 81273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org get_obj<SkPaint>(L, 1)->setStrokeWidth(lua2scalar(L, 2)); 81373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 0; 81473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 81573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 8161cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getStrokeMiter(lua_State* L) { 8171cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getStrokeMiter()); 8181cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8191cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8201cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 82173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_measureText(lua_State* L) { 82273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org if (lua_isstring(L, 2)) { 82373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org size_t len; 82473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org const char* text = lua_tolstring(L, 2, &len); 82573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->measureText(text, len)); 82673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 1; 82773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } 82873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 0; 82973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 83073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 83173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstruct FontMetrics { 83273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fTop; //!< The greatest distance above the baseline for any glyph (will be <= 0) 83373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fAscent; //!< The recommended distance above the baseline (will be <= 0) 83473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fDescent; //!< The recommended distance below the baseline (will be >= 0) 83573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fBottom; //!< The greatest distance below the baseline for any glyph (will be >= 0) 83673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fLeading; //!< The recommended distance to add between lines of text (will be >= 0) 83773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fAvgCharWidth; //!< the average charactor width (>= 0) 83873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fXMin; //!< The minimum bounding box x value for all glyphs 83973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fXMax; //!< The maximum bounding box x value for all glyphs 84073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fXHeight; //!< the height of an 'x' in px, or 0 if no 'x' in face 84173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org}; 84273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 84373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_getFontMetrics(lua_State* L) { 84473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkPaint::FontMetrics fm; 84573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar height = get_obj<SkPaint>(L, 1)->getFontMetrics(&fm); 846370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 84773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_newtable(L); 84873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "top", fm.fTop); 84973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "ascent", fm.fAscent); 85073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "descent", fm.fDescent); 85173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "bottom", fm.fBottom); 85273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "leading", fm.fLeading); 85373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkLua(L).pushScalar(height); 85473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 2; 85573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 85673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 85729563879168ed58a8295520fbb4381d0ceff9f2freed@google.comstatic int lpaint_getEffects(lua_State* L) { 85829563879168ed58a8295520fbb4381d0ceff9f2freed@google.com const SkPaint* paint = get_obj<SkPaint>(L, 1); 859de2e4e8a6422c7d8b5847f038f5c6360b187f7a2skia.committer@gmail.com 86029563879168ed58a8295520fbb4381d0ceff9f2freed@google.com lua_newtable(L); 86129563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "looper", !!paint->getLooper()); 86229563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "pathEffect", !!paint->getPathEffect()); 86329563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "rasterizer", !!paint->getRasterizer()); 86429563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "maskFilter", !!paint->getMaskFilter()); 86529563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "shader", !!paint->getShader()); 86629563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "colorFilter", !!paint->getColorFilter()); 86729563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "imageFilter", !!paint->getImageFilter()); 86829563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "xfermode", !!paint->getXfermode()); 86929563879168ed58a8295520fbb4381d0ceff9f2freed@google.com return 1; 87029563879168ed58a8295520fbb4381d0ceff9f2freed@google.com} 87129563879168ed58a8295520fbb4381d0ceff9f2freed@google.com 8725fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lpaint_getShader(lua_State* L) { 8735fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com const SkPaint* paint = get_obj<SkPaint>(L, 1); 8745fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = paint->getShader(); 8755fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (shader) { 8765fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com push_ref(L, shader); 8775fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 1; 8785fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 8795fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 8805fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 8815fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 8821301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgstatic int lpaint_getPathEffect(lua_State* L) { 8831301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org const SkPaint* paint = get_obj<SkPaint>(L, 1); 8841301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org SkPathEffect* pe = paint->getPathEffect(); 8851301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org if (pe) { 8861301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org push_ref(L, pe); 8871301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org return 1; 8881301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org } 8891301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org return 0; 8901301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org} 8911301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 89274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_gc(lua_State* L) { 89374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPaint>(L, 1)->~SkPaint(); 89474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 89574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 89674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 89774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const struct luaL_Reg gSkPaint_Methods[] = { 89874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "isAntiAlias", lpaint_isAntiAlias }, 89974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "setAntiAlias", lpaint_setAntiAlias }, 9001cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isDither", lpaint_isDither }, 9011cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isUnderlineText", lpaint_isUnderlineText }, 9021cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isStrikeThruText", lpaint_isStrikeThruText }, 9031cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isFakeBoldText", lpaint_isFakeBoldText }, 9041cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isLinearText", lpaint_isLinearText }, 9051cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isSubpixelText", lpaint_isSubpixelText }, 9061cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isDevKernText", lpaint_isDevKernText }, 9071cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isLCDRenderText", lpaint_isLCDRenderText }, 9081cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isEmbeddedBitmapText", lpaint_isEmbeddedBitmapText }, 9091cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isAutohinted", lpaint_isAutohinted }, 9101cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isVerticalText", lpaint_isVerticalText }, 91174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getColor", lpaint_getColor }, 91274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "setColor", lpaint_setColor }, 913e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com { "getTextSize", lpaint_getTextSize }, 914e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com { "setTextSize", lpaint_setTextSize }, 9151cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getTextScaleX", lpaint_getTextScaleX }, 9161cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getTextSkewX", lpaint_getTextSkewX }, 917e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "getTypeface", lpaint_getTypeface }, 918e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "setTypeface", lpaint_setTypeface }, 9191cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getHinting", lpaint_getHinting }, 920e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com { "getFontID", lpaint_getFontID }, 921fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "getTextAlign", lpaint_getTextAlign }, 922fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "setTextAlign", lpaint_setTextAlign }, 92373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "getStroke", lpaint_getStroke }, 92473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "setStroke", lpaint_setStroke }, 9251cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getStrokeCap", lpaint_getStrokeCap }, 9261cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getStrokeJoin", lpaint_getStrokeJoin }, 9271cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getTextEncoding", lpaint_getTextEncoding }, 92873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "getStrokeWidth", lpaint_getStrokeWidth }, 92973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "setStrokeWidth", lpaint_setStrokeWidth }, 9301cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getStrokeMiter", lpaint_getStrokeMiter }, 93173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "measureText", lpaint_measureText }, 93273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "getFontMetrics", lpaint_getFontMetrics }, 93329563879168ed58a8295520fbb4381d0ceff9f2freed@google.com { "getEffects", lpaint_getEffects }, 9345fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "getShader", lpaint_getShader }, 9351301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org { "getPathEffect", lpaint_getPathEffect }, 93674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lpaint_gc }, 93774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 93874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 93974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 94074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 94174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 9425fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic const char* mode2string(SkShader::TileMode mode) { 9435fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com static const char* gNames[] = { "clamp", "repeat", "mirror" }; 9445fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkASSERT((unsigned)mode < SK_ARRAY_COUNT(gNames)); 9455fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return gNames[mode]; 9465fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 9475fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 9485fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic const char* gradtype2string(SkShader::GradientType t) { 9495fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com static const char* gNames[] = { 9505fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com "none", "color", "linear", "radial", "radial2", "sweep", "conical" 9515fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com }; 9525fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkASSERT((unsigned)t < SK_ARRAY_COUNT(gNames)); 9535fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return gNames[t]; 9545fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 9555fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 9565fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_isOpaque(lua_State* L) { 9575fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = get_ref<SkShader>(L, 1); 9585fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return shader && shader->isOpaque(); 9595fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 9605fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 9615fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_asABitmap(lua_State* L) { 9625fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = get_ref<SkShader>(L, 1); 9635fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (shader) { 9645fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkBitmap bm; 9655fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkMatrix matrix; 9665fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader::TileMode modes[2]; 9675fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com switch (shader->asABitmap(&bm, &matrix, modes)) { 9685fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com case SkShader::kDefault_BitmapType: 9695fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com lua_newtable(L); 9705fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "genID", bm.pixelRef() ? bm.pixelRef()->getGenerationID() : 0); 9715fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "width", bm.width()); 9725fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "height", bm.height()); 9735fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "tileX", mode2string(modes[0])); 9745fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "tileY", mode2string(modes[1])); 9755fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 1; 9765fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com default: 9775fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com break; 9785fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 9795fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 9805fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 9815fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 9825fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 9835fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_asAGradient(lua_State* L) { 9845fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = get_ref<SkShader>(L, 1); 9855fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (shader) { 9865fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader::GradientInfo info; 9875fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com sk_bzero(&info, sizeof(info)); 98874f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 98974f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org SkColor colors[3]; // hacked in for extracting info on 3 color case. 990bd74add1dcb47cfaa8c8d176c2cc70e1e31c8b50skia.committer@gmail.com SkScalar pos[3]; 99174f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 99274f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org info.fColorCount = 3; 99374f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org info.fColors = &colors[0]; 99474f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org info.fColorOffsets = &pos[0]; 995bd74add1dcb47cfaa8c8d176c2cc70e1e31c8b50skia.committer@gmail.com 9965fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader::GradientType t = shader->asAGradient(&info); 99774f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 9985fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (SkShader::kNone_GradientType != t) { 9995fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com lua_newtable(L); 10005fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "type", gradtype2string(t)); 10015fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "colorCount", info.fColorCount); 10025fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "tile", mode2string(info.fTileMode)); 100374f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 100474f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org if (info.fColorCount == 3){ 100574f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org setfield_number(L, "midPos", pos[1]); 100674f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org } 1007bd74add1dcb47cfaa8c8d176c2cc70e1e31c8b50skia.committer@gmail.com 10085fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 1; 10095fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 10105fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 10115fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 10125fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 10135fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 10145fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_gc(lua_State* L) { 10155fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com get_ref<SkShader>(L, 1)->unref(); 10165fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 10175fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 10185fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 10195fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic const struct luaL_Reg gSkShader_Methods[] = { 10205fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "isOpaque", lshader_isOpaque }, 10215fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "asABitmap", lshader_asABitmap }, 10225fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "asAGradient", lshader_asAGradient }, 10235fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "__gc", lshader_gc }, 10245fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { NULL, NULL } 10255fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com}; 10265fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 10275fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com/////////////////////////////////////////////////////////////////////////////// 10285fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 10294d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgstatic int lpatheffect_asADash(lua_State* L) { 10304d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkPathEffect* pe = get_ref<SkPathEffect>(L, 1); 10314d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org if (pe) { 10324d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkPathEffect::DashInfo info; 10334d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkPathEffect::DashType dashType = pe->asADash(&info); 10344d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org if (SkPathEffect::kDash_DashType == dashType) { 10354d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkAutoTArray<SkScalar> intervals(info.fCount); 10364d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org info.fIntervals = intervals.get(); 10374d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org pe->asADash(&info); 10384d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkLua(L).pushDash(info); 10394d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org return 1; 10404d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org } 10414d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org } 10424d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org return 0; 10434d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 10444d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 10451301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgstatic int lpatheffect_gc(lua_State* L) { 10461301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org get_ref<SkPathEffect>(L, 1)->unref(); 10471301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org return 0; 10481301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org} 10491301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 10501301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgstatic const struct luaL_Reg gSkPathEffect_Methods[] = { 10514d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org { "asADash", lpatheffect_asADash }, 10521301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org { "__gc", lpatheffect_gc }, 10531301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org { NULL, NULL } 10541301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org}; 10551301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 10561301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 10571301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 10582815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comstatic int lmatrix_getType(lua_State* L) { 10592815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com SkMatrix::TypeMask mask = get_obj<SkMatrix>(L, 1)->getType(); 1060de2e4e8a6422c7d8b5847f038f5c6360b187f7a2skia.committer@gmail.com 10612815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com lua_newtable(L); 10622815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "translate", SkToBool(mask & SkMatrix::kTranslate_Mask)); 10632815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "scale", SkToBool(mask & SkMatrix::kScale_Mask)); 10642815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "affine", SkToBool(mask & SkMatrix::kAffine_Mask)); 10652815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "perspective", SkToBool(mask & SkMatrix::kPerspective_Mask)); 10662815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com return 1; 10672815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com} 10682815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 10690f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getScaleX(lua_State* L) { 10700f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getScaleX()); 10710f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 10720f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 10730f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 10740f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getScaleY(lua_State* L) { 10750f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getScaleY()); 10760f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 10770f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 10780f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 10790f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getTranslateX(lua_State* L) { 10800f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateX()); 10810f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 10820f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 10830f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 10840f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getTranslateY(lua_State* L) { 10850f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateY()); 10860f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 10870f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 10880f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 10892815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comstatic const struct luaL_Reg gSkMatrix_Methods[] = { 10902815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com { "getType", lmatrix_getType }, 10910f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getScaleX", lmatrix_getScaleX }, 10920f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getScaleY", lmatrix_getScaleY }, 10930f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getTranslateX", lmatrix_getTranslateX }, 10940f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getTranslateY", lmatrix_getTranslateY }, 10952815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com { NULL, NULL } 10962815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com}; 10972815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 10982815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com/////////////////////////////////////////////////////////////////////////////// 10992815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 110074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_getBounds(lua_State* L) { 110174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushRect(get_obj<SkPath>(L, 1)->getBounds()); 110274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 110374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 110474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1105d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic const char* fill_type_to_str(SkPath::FillType fill) { 1106d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org switch (fill) { 1107d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kEvenOdd_FillType: 1108d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "even-odd"; 1109d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kWinding_FillType: 1110d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "winding"; 1111d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kInverseEvenOdd_FillType: 1112d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "inverse-even-odd"; 1113d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kInverseWinding_FillType: 1114d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "inverse-winding"; 1115d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1116d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "unknown"; 1117d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1118d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 1119d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic int lpath_getFillType(lua_State* L) { 1120d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkPath::FillType fill = get_obj<SkPath>(L, 1)->getFillType(); 1121d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkLua(L).pushString(fill_type_to_str(fill)); 1122d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return 1; 1123d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1124d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 1125d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic SkString segment_masks_to_str(uint32_t segmentMasks) { 1126d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkString result; 1127d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org bool first = true; 1128d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kLine_SegmentMask & segmentMasks) { 1129d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("line"); 1130d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org first = false; 1131d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kLine_SegmentMask;) 1132d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1133d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kQuad_SegmentMask & segmentMasks) { 1134d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (!first) { 1135d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append(" "); 1136d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1137d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("quad"); 1138d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org first = false; 1139d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kQuad_SegmentMask;) 1140d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1141d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kConic_SegmentMask & segmentMasks) { 1142d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (!first) { 1143d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append(" "); 1144d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1145d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("conic"); 1146d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org first = false; 1147d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kConic_SegmentMask;) 1148d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1149d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kCubic_SegmentMask & segmentMasks) { 1150d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (!first) { 1151d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append(" "); 1152d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1153d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("cubic"); 1154d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kCubic_SegmentMask;) 1155d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1156d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkASSERT(0 == segmentMasks); 1157d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return result; 1158d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1159d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 1160d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic int lpath_getSegementTypes(lua_State* L) { 1161d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org uint32_t segMasks = get_obj<SkPath>(L, 1)->getSegmentMasks(); 1162d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkLua(L).pushString(segment_masks_to_str(segMasks)); 1163d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return 1; 1164d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1165d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 1166d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic int lpath_isConvex(lua_State* L) { 1167d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org bool isConvex = SkPath::kConvex_Convexity == get_obj<SkPath>(L, 1)->getConvexity(); 1168d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkLua(L).pushBool(isConvex); 1169d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return 1; 1170d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1171d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 117274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_isEmpty(lua_State* L) { 117374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, get_obj<SkPath>(L, 1)->isEmpty()); 117474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 117574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 117674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 117774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_isRect(lua_State* L) { 117874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect r; 117974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com bool pred = get_obj<SkPath>(L, 1)->isRect(&r); 118074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com int ret_count = 1; 118174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, pred); 118274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (pred) { 118374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushRect(r); 118474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com ret_count += 1; 118574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 118674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return ret_count; 118774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 118874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 118974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const char* dir2string(SkPath::Direction dir) { 119074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com static const char* gStr[] = { 119174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com "unknown", "cw", "ccw" 119274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com }; 119374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkASSERT((unsigned)dir < SK_ARRAY_COUNT(gStr)); 119474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return gStr[dir]; 119574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 119674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 119774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_isNestedRects(lua_State* L) { 119874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect rects[2]; 119974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkPath::Direction dirs[2]; 120074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com bool pred = get_obj<SkPath>(L, 1)->isNestedRects(rects, dirs); 120174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com int ret_count = 1; 120274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, pred); 120374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (pred) { 120474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua lua(L); 120574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua.pushRect(rects[0]); 120674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua.pushRect(rects[1]); 120774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, dir2string(dirs[0])); 120874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, dir2string(dirs[0])); 120974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com ret_count += 4; 121074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 121174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return ret_count; 121274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 121374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1214c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.orgstatic int lpath_countPoints(lua_State* L) { 1215c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org lua_pushinteger(L, get_obj<SkPath>(L, 1)->countPoints()); 1216c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org return 1; 1217c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org} 1218c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org 121974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_reset(lua_State* L) { 122074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->reset(); 122174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 122274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 122374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 122474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_moveTo(lua_State* L) { 122574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->moveTo(lua2scalar(L, 2), lua2scalar(L, 3)); 122674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 122774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 122874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 122974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_lineTo(lua_State* L) { 123074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->lineTo(lua2scalar(L, 2), lua2scalar(L, 3)); 123174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 123274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 123374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 123474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_quadTo(lua_State* L) { 123574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->quadTo(lua2scalar(L, 2), lua2scalar(L, 3), 123674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 4), lua2scalar(L, 5)); 123774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 123874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 123974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 124074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_cubicTo(lua_State* L) { 124174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->cubicTo(lua2scalar(L, 2), lua2scalar(L, 3), 124274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 4), lua2scalar(L, 5), 124374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 6), lua2scalar(L, 7)); 124474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 124574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 124674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 124774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_close(lua_State* L) { 124874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->close(); 124974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 125074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 125174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 125274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_gc(lua_State* L) { 125374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->~SkPath(); 125474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 125574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 125674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 125774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const struct luaL_Reg gSkPath_Methods[] = { 125874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getBounds", lpath_getBounds }, 1259d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org { "getFillType", lpath_getFillType }, 1260d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org { "getSegmentTypes", lpath_getSegementTypes }, 1261d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org { "isConvex", lpath_isConvex }, 126274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "isEmpty", lpath_isEmpty }, 126374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "isRect", lpath_isRect }, 126474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "isNestedRects", lpath_isNestedRects }, 1265c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org { "countPoints", lpath_countPoints }, 126674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "reset", lpath_reset }, 126774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "moveTo", lpath_moveTo }, 126874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "lineTo", lpath_lineTo }, 126974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "quadTo", lpath_quadTo }, 127074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "cubicTo", lpath_cubicTo }, 127174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "close", lpath_close }, 127274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lpath_gc }, 127374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 127474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 127574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 127674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 127774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 127874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const char* rrect_type(const SkRRect& rr) { 127974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com switch (rr.getType()) { 128074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kUnknown_Type: return "unknown"; 128174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kEmpty_Type: return "empty"; 128274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kRect_Type: return "rect"; 128374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kOval_Type: return "oval"; 128474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kSimple_Type: return "simple"; 1285f338d7c860bf0bca82cac793069522311a3dbb1acommit-bot@chromium.org case SkRRect::kNinePatch_Type: return "nine-patch"; 128674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kComplex_Type: return "complex"; 128774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 1288330313a8a8343876ee596da39da06a5d69badd9cmtklein@google.com SkDEBUGFAIL("never get here"); 128974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return ""; 129074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 129174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 129274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_rect(lua_State* L) { 129374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushRect(get_obj<SkRRect>(L, 1)->rect()); 129474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 129574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 129674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 129774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_type(lua_State* L) { 129874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, rrect_type(*get_obj<SkRRect>(L, 1))); 129974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 130074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 130174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 130274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_radii(lua_State* L) { 13037fa2a65c0cfc714364490cb715171461143024e0reed@google.com int corner = SkToInt(lua_tointeger(L, 2)); 130474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkVector v; 130574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (corner < 0 || corner > 3) { 130674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkDebugf("bad corner index %d", corner); 130774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com v.set(0, 0); 130874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } else { 130974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com v = get_obj<SkRRect>(L, 1)->radii((SkRRect::Corner)corner); 131074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 131174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, v.fX); 131274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, v.fY); 131374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 2; 131474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 131574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 131674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_gc(lua_State* L) { 131774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkRRect>(L, 1)->~SkRRect(); 131874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 131974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 132074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 132174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const struct luaL_Reg gSkRRect_Methods[] = { 132274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "rect", lrrect_rect }, 132374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "type", lrrect_type }, 132474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "radii", lrrect_radii }, 132574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lrrect_gc }, 132674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 132774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 132874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 132974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 133074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1331792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int limage_width(lua_State* L) { 1332792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org lua_pushinteger(L, get_ref<SkImage>(L, 1)->width()); 1333792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 1; 1334792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 1335792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1336792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int limage_height(lua_State* L) { 1337792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org lua_pushinteger(L, get_ref<SkImage>(L, 1)->height()); 1338792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 1; 1339792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 1340792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1341792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int limage_gc(lua_State* L) { 1342792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org get_ref<SkImage>(L, 1)->unref(); 1343792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 1344792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 1345792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1346792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic const struct luaL_Reg gSkImage_Methods[] = { 1347792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "width", limage_width }, 1348792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "height", limage_height }, 1349792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "__gc", limage_gc }, 1350792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { NULL, NULL } 1351792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org}; 1352792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1353792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 1354792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1355e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int ltypeface_gc(lua_State* L) { 135677887af13f1f0a2e349155f74e6b5ded6aafe179commit-bot@chromium.org SkSafeUnref(get_ref<SkTypeface>(L, 1)); 1357e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 1358e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 1359e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 1360e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic const struct luaL_Reg gSkTypeface_Methods[] = { 1361e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "__gc", ltypeface_gc }, 1362e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { NULL, NULL } 1363e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org}; 1364e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 1365e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 1366e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 136774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comclass AutoCallLua { 136874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.compublic: 136974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com AutoCallLua(lua_State* L, const char func[], const char verb[]) : fL(L) { 137074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_getglobal(L, func); 137174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (!lua_isfunction(L, -1)) { 137274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com int t = lua_type(L, -1); 137374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkDebugf("--- expected function %d\n", t); 137474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 13752d816ad36e806e5b1cf3c447e547829bbbe74fd1skia.committer@gmail.com 137674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_newtable(L); 137774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_string(L, "verb", verb); 137874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 13792d816ad36e806e5b1cf3c447e547829bbbe74fd1skia.committer@gmail.com 138074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com ~AutoCallLua() { 138174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (lua_pcall(fL, 1, 0, 0) != LUA_OK) { 138274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkDebugf("lua err: %s\n", lua_tostring(fL, -1)); 138374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 138474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_settop(fL, -1); 138574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 13862d816ad36e806e5b1cf3c447e547829bbbe74fd1skia.committer@gmail.com 138774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comprivate: 138874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_State* fL; 138974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 139074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 139174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#define AUTO_LUA(verb) AutoCallLua acl(fL, fFunc.c_str(), verb) 139274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 139374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 139474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1395fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lsk_newDocumentPDF(lua_State* L) { 1396fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const char* file = NULL; 1397fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (lua_gettop(L) > 0 && lua_isstring(L, 1)) { 1398fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org file = lua_tolstring(L, 1, NULL); 1399fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 1400fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 1401fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org SkDocument* doc = SkDocument::CreatePDF(file); 1402fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (NULL == doc) { 1403fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org // do I need to push a nil on the stack and return 1? 1404fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 1405fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } else { 1406fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org push_ref(L, doc); 1407fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org doc->unref(); 1408fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 1409fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 1410fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 1411fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 14123597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lsk_newPaint(lua_State* L) { 14133597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com push_new<SkPaint>(L); 14143597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 1; 14153597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 14163597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 14173597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lsk_newPath(lua_State* L) { 14183597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com push_new<SkPath>(L); 14193597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 1; 14203597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 14213597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 14223597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lsk_newRRect(lua_State* L) { 14233597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com SkRRect* rr = push_new<SkRRect>(L); 14243597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com rr->setEmpty(); 14253597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 1; 14263597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 14273597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1428e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lsk_newTypeface(lua_State* L) { 1429e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org const char* name = NULL; 1430e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org int style = SkTypeface::kNormal; 14316319367bdcbf5e5050632ab97973f5035d0dd8faskia.committer@gmail.com 1432e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org int count = lua_gettop(L); 1433e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (count > 0 && lua_isstring(L, 1)) { 1434e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org name = lua_tolstring(L, 1, NULL); 1435e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (count > 1 && lua_isnumber(L, 2)) { 1436e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org style = lua_tointegerx(L, 2, NULL) & SkTypeface::kBoldItalic; 1437e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 1438e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 1439e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 1440e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org SkTypeface* face = SkTypeface::CreateFromName(name, 1441e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org (SkTypeface::Style)style); 1442e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org// SkDebugf("---- name <%s> style=%d, face=%p ref=%d\n", name, style, face, face->getRefCnt()); 1443e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (NULL == face) { 1444e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org face = SkTypeface::RefDefault(); 1445e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 1446e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org push_ref(L, face); 1447e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org face->unref(); 1448e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 1; 1449e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 14503597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1451792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int lsk_loadImage(lua_State* L) { 1452792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (lua_gettop(L) > 0 && lua_isstring(L, 1)) { 1453792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org const char* name = lua_tolstring(L, 1, NULL); 1454792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkAutoDataUnref data(SkData::NewFromFileName(name)); 1455792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (data.get()) { 1456792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkImage* image = SkImage::NewEncodedData(data.get()); 1457792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (image) { 1458792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org push_ref(L, image); 1459792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org image->unref(); 1460792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 1; 1461792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 1462792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 1463792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 1464792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 1465792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 1466792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 14673597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic void register_Sk(lua_State* L) { 14683597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_newtable(L); 14693597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_pushvalue(L, -1); 14703597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_setglobal(L, "Sk"); 14713597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com // the Sk table is still on top 14723597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1473fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org setfield_function(L, "newDocumentPDF", lsk_newDocumentPDF); 1474792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org setfield_function(L, "loadImage", lsk_loadImage); 14753597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com setfield_function(L, "newPaint", lsk_newPaint); 14763597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com setfield_function(L, "newPath", lsk_newPath); 14773597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com setfield_function(L, "newRRect", lsk_newRRect); 1478e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org setfield_function(L, "newTypeface", lsk_newTypeface); 14793597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_pop(L, 1); // pop off the Sk table 14803597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 14813597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 148274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#define REG_CLASS(L, C) \ 148374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com do { \ 14843597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_newmetatable(L, get_mtname<C>()); \ 148574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushvalue(L, -1); \ 148674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setfield(L, -2, "__index"); \ 148774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com luaL_setfuncs(L, g##C##_Methods, 0); \ 148874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pop(L, 1); /* pop off the meta-table */ \ 148974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } while (0) 149074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 149174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::Load(lua_State* L) { 14923597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com register_Sk(L); 149374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com REG_CLASS(L, SkCanvas); 1494fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org REG_CLASS(L, SkDocument); 1495792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org REG_CLASS(L, SkImage); 149674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com REG_CLASS(L, SkPaint); 14971301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org REG_CLASS(L, SkPath); 14981301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org REG_CLASS(L, SkPathEffect); 149974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com REG_CLASS(L, SkRRect); 15005fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com REG_CLASS(L, SkShader); 1501e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org REG_CLASS(L, SkTypeface); 15022815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com REG_CLASS(L, SkMatrix); 150374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 150428c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com 15057bce9988af2e3dfc384ebc8655d0eb3d08fad4d2reed@google.comextern "C" int luaopen_skia(lua_State* L); 150628c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.comextern "C" int luaopen_skia(lua_State* L) { 150728c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com SkLua::Load(L); 150828c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com return 0; 150928c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com} 1510