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 14468b1815d29d9bbe513f2d8eb4afc0b066715b52reed#include "SkBlurImageFilter.h" 1574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkCanvas.h" 16792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org#include "SkData.h" 17fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org#include "SkDocument.h" 189fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed#include "SkGradientShader.h" 19792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org#include "SkImage.h" 20792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org#include "SkMatrix.h" 2174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkPaint.h" 2274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkPath.h" 2396affcde22a675e3629b9da490bb45a0ab07fa2breed#include "SkPictureRecorder.h" 245fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com#include "SkPixelRef.h" 2574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkRRect.h" 2674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkString.h" 27485557f95d7a4b04536c0c5f01fad5f9744531dareed#include "SkSurface.h" 28b7425173f96e93b090787e2386ba5f022b6c2869fmalita#include "SkTextBlob.h" 29e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com#include "SkTypeface.h" 3074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 3174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comextern "C" { 323597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com #include "lua.h" 333597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com #include "lualib.h" 343597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com #include "lauxlib.h" 353597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 363597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 37fd3458750d92d9722e5760ddb99824e65455463creed@google.com// return the metatable name for a given class 383597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comtemplate <typename T> const char* get_mtname(); 39fd3458750d92d9722e5760ddb99824e65455463creed@google.com#define DEF_MTNAME(T) \ 40fd3458750d92d9722e5760ddb99824e65455463creed@google.com template <> const char* get_mtname<T>() { \ 41fd3458750d92d9722e5760ddb99824e65455463creed@google.com return #T "_LuaMetaTableName"; \ 42fd3458750d92d9722e5760ddb99824e65455463creed@google.com } 43fd3458750d92d9722e5760ddb99824e65455463creed@google.com 44fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkCanvas) 45fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgDEF_MTNAME(SkDocument) 46792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgDEF_MTNAME(SkImage) 47468b1815d29d9bbe513f2d8eb4afc0b066715b52reedDEF_MTNAME(SkImageFilter) 48fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkMatrix) 49fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkRRect) 50fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkPath) 51fd3458750d92d9722e5760ddb99824e65455463creed@google.comDEF_MTNAME(SkPaint) 521301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgDEF_MTNAME(SkPathEffect) 5396affcde22a675e3629b9da490bb45a0ab07fa2breedDEF_MTNAME(SkPicture) 5496affcde22a675e3629b9da490bb45a0ab07fa2breedDEF_MTNAME(SkPictureRecorder) 555fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comDEF_MTNAME(SkShader) 56485557f95d7a4b04536c0c5f01fad5f9744531dareedDEF_MTNAME(SkSurface) 57b7425173f96e93b090787e2386ba5f022b6c2869fmalitaDEF_MTNAME(SkTextBlob) 58e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgDEF_MTNAME(SkTypeface) 593597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 603597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comtemplate <typename T> T* push_new(lua_State* L) { 613597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com T* addr = (T*)lua_newuserdata(L, sizeof(T)); 623597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com new (addr) T; 633597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_getmetatable(L, get_mtname<T>()); 643597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_setmetatable(L, -2); 653597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return addr; 6674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 6774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 6874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comtemplate <typename T> void push_obj(lua_State* L, const T& obj) { 6974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com new (lua_newuserdata(L, sizeof(T))) T(obj); 703597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_getmetatable(L, get_mtname<T>()); 7174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setmetatable(L, -2); 7274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 7374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 749fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reedtemplate <typename T> T* push_ref(lua_State* L, T* ref) { 7577887af13f1f0a2e349155f74e6b5ded6aafe179commit-bot@chromium.org *(T**)lua_newuserdata(L, sizeof(T*)) = SkSafeRef(ref); 763597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_getmetatable(L, get_mtname<T>()); 7774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setmetatable(L, -2); 789fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed return ref; 7974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 8074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 8174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comtemplate <typename T> T* get_ref(lua_State* L, int index) { 823597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return *(T**)luaL_checkudata(L, index, get_mtname<T>()); 8374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 8474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 8574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comtemplate <typename T> T* get_obj(lua_State* L, int index) { 863597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return (T*)luaL_checkudata(L, index, get_mtname<T>()); 8774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 8874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 8988c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.comstatic bool lua2bool(lua_State* L, int index) { 9088c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com return !!lua_toboolean(L, index); 9188c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com} 9288c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com 9374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 9474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 953597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comSkLua::SkLua(const char termCode[]) : fTermCode(termCode), fWeOwnL(true) { 963597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com fL = luaL_newstate(); 973597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_openlibs(fL); 983597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com SkLua::Load(fL); 993597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 1003597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1013597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comSkLua::SkLua(lua_State* L) : fL(L), fWeOwnL(false) {} 1023597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1033597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comSkLua::~SkLua() { 1043597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (fWeOwnL) { 1053597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (fTermCode.size() > 0) { 1063597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_getglobal(fL, fTermCode.c_str()); 1073597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (lua_pcall(fL, 0, 0, 0) != LUA_OK) { 1083597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com SkDebugf("lua err: %s\n", lua_tostring(fL, -1)); 1093597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 1103597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 1113597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_close(fL); 1123597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 1133597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 1143597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1153597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.combool SkLua::runCode(const char code[]) { 1163597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com int err = luaL_loadstring(fL, code) || lua_pcall(fL, 0, 0, 0); 1173597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com if (err) { 11873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkDebugf("--- lua failed: %s\n", lua_tostring(fL, -1)); 1193597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return false; 1203597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com } 1213597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return true; 1223597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 1233597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1243597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.combool SkLua::runCode(const void* code, size_t size) { 1253597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com SkString str((const char*)code, size); 1263597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return this->runCode(str.c_str()); 1273597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 1283597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1293597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com/////////////////////////////////////////////////////////////////////////////// 1303597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1313597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com#define CHECK_SETFIELD(key) do if (key) lua_setfield(fL, -2, key); while (0) 1323597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 13329563879168ed58a8295520fbb4381d0ceff9f2freed@google.comstatic void setfield_bool_if(lua_State* L, const char key[], bool pred) { 13429563879168ed58a8295520fbb4381d0ceff9f2freed@google.com if (pred) { 13529563879168ed58a8295520fbb4381d0ceff9f2freed@google.com lua_pushboolean(L, true); 13629563879168ed58a8295520fbb4381d0ceff9f2freed@google.com lua_setfield(L, -2, key); 13729563879168ed58a8295520fbb4381d0ceff9f2freed@google.com } 13829563879168ed58a8295520fbb4381d0ceff9f2freed@google.com} 13929563879168ed58a8295520fbb4381d0ceff9f2freed@google.com 14074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic void setfield_string(lua_State* L, const char key[], const char value[]) { 14174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, value); 14274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setfield(L, -2, key); 14374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 14474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 14574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic void setfield_number(lua_State* L, const char key[], double value) { 14674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, value); 14774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setfield(L, -2, key); 14874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 14974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1502815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comstatic void setfield_boolean(lua_State* L, const char key[], bool value) { 1512815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com lua_pushboolean(L, value); 1522815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com lua_setfield(L, -2, key); 1532815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com} 1542815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 15573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic void setfield_scalar(lua_State* L, const char key[], SkScalar value) { 15673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_number(L, key, SkScalarToLua(value)); 15773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 15873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 1593597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic void setfield_function(lua_State* L, 1603597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com const char key[], lua_CFunction value) { 1613597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_pushcfunction(L, value); 1623597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_setfield(L, -2, key); 16374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 16474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1657a72c6702da9e1f6fb536efe844db23f77535a19reedstatic int lua2int_def(lua_State* L, int index, int defaultValue) { 1667a72c6702da9e1f6fb536efe844db23f77535a19reed if (lua_isnumber(L, index)) { 1677a72c6702da9e1f6fb536efe844db23f77535a19reed return (int)lua_tonumber(L, index); 1687a72c6702da9e1f6fb536efe844db23f77535a19reed } else { 1697a72c6702da9e1f6fb536efe844db23f77535a19reed return defaultValue; 1707a72c6702da9e1f6fb536efe844db23f77535a19reed } 1717a72c6702da9e1f6fb536efe844db23f77535a19reed} 1727a72c6702da9e1f6fb536efe844db23f77535a19reed 1737a72c6702da9e1f6fb536efe844db23f77535a19reedstatic SkScalar lua2scalar(lua_State* L, int index) { 1747a72c6702da9e1f6fb536efe844db23f77535a19reed SkASSERT(lua_isnumber(L, index)); 1757a72c6702da9e1f6fb536efe844db23f77535a19reed return SkLuaToScalar(lua_tonumber(L, index)); 1767a72c6702da9e1f6fb536efe844db23f77535a19reed} 1777a72c6702da9e1f6fb536efe844db23f77535a19reed 1787a72c6702da9e1f6fb536efe844db23f77535a19reedstatic SkScalar lua2scalar_def(lua_State* L, int index, SkScalar defaultValue) { 1797a72c6702da9e1f6fb536efe844db23f77535a19reed if (lua_isnumber(L, index)) { 1807a72c6702da9e1f6fb536efe844db23f77535a19reed return SkLuaToScalar(lua_tonumber(L, index)); 1817a72c6702da9e1f6fb536efe844db23f77535a19reed } else { 1827a72c6702da9e1f6fb536efe844db23f77535a19reed return defaultValue; 1837a72c6702da9e1f6fb536efe844db23f77535a19reed } 1847a72c6702da9e1f6fb536efe844db23f77535a19reed} 1857a72c6702da9e1f6fb536efe844db23f77535a19reed 1867a72c6702da9e1f6fb536efe844db23f77535a19reedstatic SkScalar getarray_scalar(lua_State* L, int stackIndex, int arrayIndex) { 1877a72c6702da9e1f6fb536efe844db23f77535a19reed SkASSERT(lua_istable(L, stackIndex)); 1887a72c6702da9e1f6fb536efe844db23f77535a19reed lua_rawgeti(L, stackIndex, arrayIndex); 1898aacf2085673f6302a43d590d4d2890789b87192mtklein 1907a72c6702da9e1f6fb536efe844db23f77535a19reed SkScalar value = lua2scalar(L, -1); 1917a72c6702da9e1f6fb536efe844db23f77535a19reed lua_pop(L, 1); 1927a72c6702da9e1f6fb536efe844db23f77535a19reed return value; 1937a72c6702da9e1f6fb536efe844db23f77535a19reed} 1947a72c6702da9e1f6fb536efe844db23f77535a19reed 1957a72c6702da9e1f6fb536efe844db23f77535a19reedstatic void getarray_scalars(lua_State* L, int stackIndex, SkScalar dst[], int count) { 1967a72c6702da9e1f6fb536efe844db23f77535a19reed for (int i = 0; i < count; ++i) { 1977a72c6702da9e1f6fb536efe844db23f77535a19reed dst[i] = getarray_scalar(L, stackIndex, i + 1); 1987a72c6702da9e1f6fb536efe844db23f77535a19reed } 1997a72c6702da9e1f6fb536efe844db23f77535a19reed} 2007a72c6702da9e1f6fb536efe844db23f77535a19reed 2017a72c6702da9e1f6fb536efe844db23f77535a19reedstatic void getarray_points(lua_State* L, int stackIndex, SkPoint pts[], int count) { 2027a72c6702da9e1f6fb536efe844db23f77535a19reed getarray_scalars(L, stackIndex, &pts[0].fX, count * 2); 2037a72c6702da9e1f6fb536efe844db23f77535a19reed} 2047a72c6702da9e1f6fb536efe844db23f77535a19reed 205e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic void setarray_number(lua_State* L, int index, double value) { 206e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_pushnumber(L, value); 207e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_rawseti(L, -2, index); 208e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 209e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 2104d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgstatic void setarray_scalar(lua_State* L, int index, SkScalar value) { 2114d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org setarray_number(L, index, SkScalarToLua(value)); 2124d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 2134d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 21474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushBool(bool value, const char key[]) { 21574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(fL, value); 21674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 21774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 21874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 21974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushString(const char str[], const char key[]) { 22074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(fL, str); 22174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 22274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 22374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 224e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comvoid SkLua::pushString(const char str[], size_t length, const char key[]) { 225e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com // TODO: how to do this w/o making a copy? 226e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkString s(str, length); 227e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_pushstring(fL, s.c_str()); 228e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com CHECK_SETFIELD(key); 229e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 230e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 23174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushString(const SkString& str, const char key[]) { 23274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(fL, str.c_str()); 23374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 23474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 23574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 23674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushColor(SkColor color, const char key[]) { 23774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_newtable(fL); 23874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "a", SkColorGetA(color) / 255.0); 23974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "r", SkColorGetR(color) / 255.0); 24074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "g", SkColorGetG(color) / 255.0); 24174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_number(fL, "b", SkColorGetB(color) / 255.0); 24274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 24374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 24474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 245e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comvoid SkLua::pushU32(uint32_t value, const char key[]) { 246e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_pushnumber(fL, (double)value); 247e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com CHECK_SETFIELD(key); 248e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 249e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 25074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushScalar(SkScalar value, const char key[]) { 25174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(fL, SkScalarToLua(value)); 25274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 25374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 25474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 255e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comvoid SkLua::pushArrayU16(const uint16_t array[], int count, const char key[]) { 256e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com lua_newtable(fL); 257e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com for (int i = 0; i < count; ++i) { 258e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com // make it base-1 to match lua convention 259e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com setarray_number(fL, i + 1, (double)array[i]); 260e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com } 261e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com CHECK_SETFIELD(key); 262e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 263e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 2641301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgvoid SkLua::pushArrayPoint(const SkPoint array[], int count, const char key[]) { 2651301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org lua_newtable(fL); 2661301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org for (int i = 0; i < count; ++i) { 2671301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org // make it base-1 to match lua convention 2681301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org lua_newtable(fL); 2691301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org this->pushScalar(array[i].fX, "x"); 2701301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org this->pushScalar(array[i].fY, "y"); 2711301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org lua_rawseti(fL, -2, i + 1); 2721301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org } 2731301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org CHECK_SETFIELD(key); 2741301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org} 2751301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 2764d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgvoid SkLua::pushArrayScalar(const SkScalar array[], int count, const char key[]) { 2774d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org lua_newtable(fL); 2784d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org for (int i = 0; i < count; ++i) { 2794d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org // make it base-1 to match lua convention 2804d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org setarray_scalar(fL, i + 1, array[i]); 2814d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org } 2824d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org CHECK_SETFIELD(key); 2834d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 2844d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 28574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushRect(const SkRect& r, const char key[]) { 28674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_newtable(fL); 28773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "left", r.fLeft); 28873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "top", r.fTop); 28973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "right", r.fRight); 29073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(fL, "bottom", r.fBottom); 29174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 29274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 29374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 29474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushRRect(const SkRRect& rr, const char key[]) { 29574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, rr); 29674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 29774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 29874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 2994d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgvoid SkLua::pushDash(const SkPathEffect::DashInfo& info, const char key[]) { 3004d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org lua_newtable(fL); 3014d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org setfield_scalar(fL, "phase", info.fPhase); 3024d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org this->pushArrayScalar(info.fIntervals, info.fCount, "intervals"); 3034d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org CHECK_SETFIELD(key); 3044d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 3054d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 3064d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 30774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushMatrix(const SkMatrix& matrix, const char key[]) { 30874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, matrix); 30974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 31074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 31174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 31274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushPaint(const SkPaint& paint, const char key[]) { 31374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, paint); 31474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 31574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 31674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 31774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushPath(const SkPath& path, const char key[]) { 31874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_obj(fL, path); 31974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 32074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 32174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 32274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::pushCanvas(SkCanvas* canvas, const char key[]) { 32374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com push_ref(fL, canvas); 32474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com CHECK_SETFIELD(key); 32574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 32674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 327b7425173f96e93b090787e2386ba5f022b6c2869fmalitavoid SkLua::pushTextBlob(const SkTextBlob* blob, const char key[]) { 328b7425173f96e93b090787e2386ba5f022b6c2869fmalita push_ref(fL, const_cast<SkTextBlob*>(blob)); 329b7425173f96e93b090787e2386ba5f022b6c2869fmalita CHECK_SETFIELD(key); 330b7425173f96e93b090787e2386ba5f022b6c2869fmalita} 331b7425173f96e93b090787e2386ba5f022b6c2869fmalita 3325cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgstatic const char* element_type(SkClipStack::Element::Type type) { 3335cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org switch (type) { 3345cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kEmpty_Type: 3355cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "empty"; 3365cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kRect_Type: 3375cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "rect"; 3385cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kRRect_Type: 3395cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "rrect"; 3405cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkClipStack::Element::kPath_Type: 3415cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "path"; 3425cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org } 3435cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "unknown"; 3445cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 3455cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 3465cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgstatic const char* region_op(SkRegion::Op op) { 3475cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org switch (op) { 3485cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kDifference_Op: 3495cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "difference"; 3505cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kIntersect_Op: 3515cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "intersect"; 3525cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kUnion_Op: 3535cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "union"; 3545cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kXOR_Op: 3555cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "xor"; 3565cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kReverseDifference_Op: 3575cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "reverse-difference"; 3585cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org case SkRegion::kReplace_Op: 3595cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "replace"; 3605cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org } 3615cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return "unknown"; 3625cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 3635cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 3645cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgvoid SkLua::pushClipStack(const SkClipStack& stack, const char* key) { 3655cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org lua_newtable(fL); 3665cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org SkClipStack::B2TIter iter(stack); 3675cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org const SkClipStack::Element* element; 3685cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org int i = 0; 36949f085dddff10473b6ebf832a974288300224e60bsalomon while ((element = iter.next())) { 3704ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushClipStackElement(*element); 3715cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org lua_rawseti(fL, -2, ++i); 3725cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org } 3735cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org CHECK_SETFIELD(key); 3745cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 3755cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 3764ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.comvoid SkLua::pushClipStackElement(const SkClipStack::Element& element, const char* key) { 3774ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com lua_newtable(fL); 3784ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkClipStack::Element::Type type = element.getType(); 3794ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushString(element_type(type), "type"); 3804ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com switch (type) { 3814ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kEmpty_Type: 3824ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3834ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kRect_Type: 3844ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushRect(element.getRect(), "rect"); 3854ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3864ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kRRect_Type: 3874ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushRRect(element.getRRect(), "rrect"); 3884ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3894ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com case SkClipStack::Element::kPath_Type: 3904ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushPath(element.getPath(), "path"); 3914ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com break; 3924ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com } 3934ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushString(region_op(element.getOp()), "op"); 3944ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com this->pushBool(element.isAA(), "aa"); 3954ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com CHECK_SETFIELD(key); 3964ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com} 3974ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 3984ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 39974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 40074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 40174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 40274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic SkScalar getfield_scalar(lua_State* L, int index, const char key[]) { 40374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkASSERT(lua_istable(L, index)); 40474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, key); 40574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_gettable(L, index); 4068aacf2085673f6302a43d590d4d2890789b87192mtklein 40774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkScalar value = lua2scalar(L, -1); 40874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pop(L, 1); 40974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return value; 41074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 41174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 41273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic SkScalar getfield_scalar_default(lua_State* L, int index, const char key[], SkScalar def) { 41373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkASSERT(lua_istable(L, index)); 41473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_pushstring(L, key); 41573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_gettable(L, index); 416370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 41773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar value; 41873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org if (lua_isnil(L, -1)) { 41973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org value = def; 42073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } else { 42173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org value = lua2scalar(L, -1); 42273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } 42373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_pop(L, 1); 42473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return value; 42573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 42673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 427468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic SkScalar byte2unit(U8CPU byte) { 428468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return byte / 255.0f; 429468b1815d29d9bbe513f2d8eb4afc0b066715b52reed} 430468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 43174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic U8CPU unit2byte(SkScalar x) { 43274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (x <= 0) { 43374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 43474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } else if (x >= 1) { 43574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 255; 43674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } else { 43774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return SkScalarRoundToInt(x * 255); 43874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 43974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 44074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 44174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic SkColor lua2color(lua_State* L, int index) { 442485557f95d7a4b04536c0c5f01fad5f9744531dareed return SkColorSetARGB(unit2byte(getfield_scalar_default(L, index, "a", 1)), 443485557f95d7a4b04536c0c5f01fad5f9744531dareed unit2byte(getfield_scalar_default(L, index, "r", 0)), 444485557f95d7a4b04536c0c5f01fad5f9744531dareed unit2byte(getfield_scalar_default(L, index, "g", 0)), 445485557f95d7a4b04536c0c5f01fad5f9744531dareed unit2byte(getfield_scalar_default(L, index, "b", 0))); 44674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 44774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 44874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic SkRect* lua2rect(lua_State* L, int index, SkRect* rect) { 44973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org rect->set(getfield_scalar_default(L, index, "left", 0), 45073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org getfield_scalar_default(L, index, "top", 0), 45174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com getfield_scalar(L, index, "right"), 45274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com getfield_scalar(L, index, "bottom")); 45374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return rect; 45474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 45574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 456f355df58517691b05be8bc3f0e99331ede6c4d44reedstatic int lcanvas_clear(lua_State* L) { 457f355df58517691b05be8bc3f0e99331ede6c4d44reed get_ref<SkCanvas>(L, 1)->clear(0); 458f355df58517691b05be8bc3f0e99331ede6c4d44reed return 0; 459f355df58517691b05be8bc3f0e99331ede6c4d44reed} 460f355df58517691b05be8bc3f0e99331ede6c4d44reed 46174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawColor(lua_State* L) { 46274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->drawColor(lua2color(L, 2)); 46374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 46474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 46574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 4669fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reedstatic int lcanvas_drawPaint(lua_State* L) { 4679fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed get_ref<SkCanvas>(L, 1)->drawPaint(*get_obj<SkPaint>(L, 2)); 4689fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed return 0; 4699fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed} 4709fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed 47174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawRect(lua_State* L) { 47274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect rect; 4737a72c6702da9e1f6fb536efe844db23f77535a19reed lua2rect(L, 2, &rect); 4747a72c6702da9e1f6fb536efe844db23f77535a19reed const SkPaint* paint = get_obj<SkPaint>(L, 3); 4757a72c6702da9e1f6fb536efe844db23f77535a19reed get_ref<SkCanvas>(L, 1)->drawRect(rect, *paint); 47674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 47774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 47874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 47974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawOval(lua_State* L) { 48074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect rect; 48174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->drawOval(*lua2rect(L, 2, &rect), 48274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com *get_obj<SkPaint>(L, 3)); 48374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 48474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 48574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 48674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_drawCircle(lua_State* L) { 48774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->drawCircle(lua2scalar(L, 2), 48874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 3), 48974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 4), 49074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com *get_obj<SkPaint>(L, 5)); 49174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 49274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 49374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 494485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic SkPaint* lua2OptionalPaint(lua_State* L, int index, SkPaint* paint) { 495485557f95d7a4b04536c0c5f01fad5f9744531dareed if (lua_isnumber(L, index)) { 496485557f95d7a4b04536c0c5f01fad5f9744531dareed paint->setAlpha(SkScalarRoundToInt(lua2scalar(L, index) * 255)); 497485557f95d7a4b04536c0c5f01fad5f9744531dareed return paint; 498f355df58517691b05be8bc3f0e99331ede6c4d44reed } else if (lua_isuserdata(L, index)) { 499485557f95d7a4b04536c0c5f01fad5f9744531dareed const SkPaint* ptr = get_obj<SkPaint>(L, index); 500485557f95d7a4b04536c0c5f01fad5f9744531dareed if (ptr) { 501485557f95d7a4b04536c0c5f01fad5f9744531dareed *paint = *ptr; 502485557f95d7a4b04536c0c5f01fad5f9744531dareed return paint; 503485557f95d7a4b04536c0c5f01fad5f9744531dareed } 504485557f95d7a4b04536c0c5f01fad5f9744531dareed } 505485557f95d7a4b04536c0c5f01fad5f9744531dareed return NULL; 506485557f95d7a4b04536c0c5f01fad5f9744531dareed} 507485557f95d7a4b04536c0c5f01fad5f9744531dareed 508792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int lcanvas_drawImage(lua_State* L) { 509792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 510792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkImage* image = get_ref<SkImage>(L, 2); 511792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (NULL == image) { 512792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 513792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 514792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkScalar x = lua2scalar(L, 3); 515792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkScalar y = lua2scalar(L, 4); 516792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 517792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkPaint paint; 518485557f95d7a4b04536c0c5f01fad5f9744531dareed canvas->drawImage(image, x, y, lua2OptionalPaint(L, 5, &paint)); 519792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 520792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 521792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 522ba5fb932a1b5666a861043735cfb055cc1b600c7reedstatic int lcanvas_drawImageRect(lua_State* L) { 523ba5fb932a1b5666a861043735cfb055cc1b600c7reed SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 524ba5fb932a1b5666a861043735cfb055cc1b600c7reed SkImage* image = get_ref<SkImage>(L, 2); 525ba5fb932a1b5666a861043735cfb055cc1b600c7reed if (NULL == image) { 526ba5fb932a1b5666a861043735cfb055cc1b600c7reed return 0; 527ba5fb932a1b5666a861043735cfb055cc1b600c7reed } 528ba5fb932a1b5666a861043735cfb055cc1b600c7reed 529ba5fb932a1b5666a861043735cfb055cc1b600c7reed SkRect srcR, dstR; 530ba5fb932a1b5666a861043735cfb055cc1b600c7reed SkRect* srcRPtr = NULL; 531ba5fb932a1b5666a861043735cfb055cc1b600c7reed if (!lua_isnil(L, 3)) { 532ba5fb932a1b5666a861043735cfb055cc1b600c7reed srcRPtr = lua2rect(L, 3, &srcR); 533ba5fb932a1b5666a861043735cfb055cc1b600c7reed } 534ba5fb932a1b5666a861043735cfb055cc1b600c7reed lua2rect(L, 4, &dstR); 5358aacf2085673f6302a43d590d4d2890789b87192mtklein 536ba5fb932a1b5666a861043735cfb055cc1b600c7reed SkPaint paint; 537485557f95d7a4b04536c0c5f01fad5f9744531dareed canvas->drawImageRect(image, srcRPtr, dstR, lua2OptionalPaint(L, 5, &paint)); 538ba5fb932a1b5666a861043735cfb055cc1b600c7reed return 0; 539ba5fb932a1b5666a861043735cfb055cc1b600c7reed} 540ba5fb932a1b5666a861043735cfb055cc1b600c7reed 5417a72c6702da9e1f6fb536efe844db23f77535a19reedstatic int lcanvas_drawPatch(lua_State* L) { 5427a72c6702da9e1f6fb536efe844db23f77535a19reed SkPoint cubics[12]; 5437a72c6702da9e1f6fb536efe844db23f77535a19reed SkColor colorStorage[4]; 5447a72c6702da9e1f6fb536efe844db23f77535a19reed SkPoint texStorage[4]; 5457a72c6702da9e1f6fb536efe844db23f77535a19reed 5467a72c6702da9e1f6fb536efe844db23f77535a19reed const SkColor* colors = NULL; 5477a72c6702da9e1f6fb536efe844db23f77535a19reed const SkPoint* texs = NULL; 5487a72c6702da9e1f6fb536efe844db23f77535a19reed 5497a72c6702da9e1f6fb536efe844db23f77535a19reed getarray_points(L, 2, cubics, 12); 5507a72c6702da9e1f6fb536efe844db23f77535a19reed 5517a72c6702da9e1f6fb536efe844db23f77535a19reed colorStorage[0] = SK_ColorRED; 5527a72c6702da9e1f6fb536efe844db23f77535a19reed colorStorage[1] = SK_ColorGREEN; 5537a72c6702da9e1f6fb536efe844db23f77535a19reed colorStorage[2] = SK_ColorBLUE; 5547a72c6702da9e1f6fb536efe844db23f77535a19reed colorStorage[3] = SK_ColorGRAY; 5557a72c6702da9e1f6fb536efe844db23f77535a19reed 5567a72c6702da9e1f6fb536efe844db23f77535a19reed if (lua_isnil(L, 4)) { 5577a72c6702da9e1f6fb536efe844db23f77535a19reed colors = colorStorage; 5587a72c6702da9e1f6fb536efe844db23f77535a19reed } else { 5597a72c6702da9e1f6fb536efe844db23f77535a19reed getarray_points(L, 4, texStorage, 4); 5607a72c6702da9e1f6fb536efe844db23f77535a19reed texs = texStorage; 5617a72c6702da9e1f6fb536efe844db23f77535a19reed } 5627a72c6702da9e1f6fb536efe844db23f77535a19reed 5637a72c6702da9e1f6fb536efe844db23f77535a19reed get_ref<SkCanvas>(L, 1)->drawPatch(cubics, colors, texs, NULL, *get_obj<SkPaint>(L, 5)); 5647a72c6702da9e1f6fb536efe844db23f77535a19reed return 0; 5657a72c6702da9e1f6fb536efe844db23f77535a19reed} 5667a72c6702da9e1f6fb536efe844db23f77535a19reed 567fd3458750d92d9722e5760ddb99824e65455463creed@google.comstatic int lcanvas_drawPath(lua_State* L) { 568fd3458750d92d9722e5760ddb99824e65455463creed@google.com get_ref<SkCanvas>(L, 1)->drawPath(*get_obj<SkPath>(L, 2), 569fd3458750d92d9722e5760ddb99824e65455463creed@google.com *get_obj<SkPaint>(L, 3)); 570fd3458750d92d9722e5760ddb99824e65455463creed@google.com return 0; 571fd3458750d92d9722e5760ddb99824e65455463creed@google.com} 572fd3458750d92d9722e5760ddb99824e65455463creed@google.com 57396affcde22a675e3629b9da490bb45a0ab07fa2breed// drawPicture(pic, x, y, paint) 57496affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lcanvas_drawPicture(lua_State* L) { 57596affcde22a675e3629b9da490bb45a0ab07fa2breed SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 57696affcde22a675e3629b9da490bb45a0ab07fa2breed SkPicture* picture = get_ref<SkPicture>(L, 2); 57796affcde22a675e3629b9da490bb45a0ab07fa2breed SkScalar x = lua2scalar_def(L, 3, 0); 57896affcde22a675e3629b9da490bb45a0ab07fa2breed SkScalar y = lua2scalar_def(L, 4, 0); 57996affcde22a675e3629b9da490bb45a0ab07fa2breed SkMatrix matrix, *matrixPtr = NULL; 58096affcde22a675e3629b9da490bb45a0ab07fa2breed if (x || y) { 58196affcde22a675e3629b9da490bb45a0ab07fa2breed matrix.setTranslate(x, y); 58296affcde22a675e3629b9da490bb45a0ab07fa2breed matrixPtr = &matrix; 58396affcde22a675e3629b9da490bb45a0ab07fa2breed } 58496affcde22a675e3629b9da490bb45a0ab07fa2breed SkPaint paint; 58596affcde22a675e3629b9da490bb45a0ab07fa2breed canvas->drawPicture(picture, matrixPtr, lua2OptionalPaint(L, 5, &paint)); 58696affcde22a675e3629b9da490bb45a0ab07fa2breed return 0; 58796affcde22a675e3629b9da490bb45a0ab07fa2breed} 58896affcde22a675e3629b9da490bb45a0ab07fa2breed 589e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lcanvas_drawText(lua_State* L) { 590e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (lua_gettop(L) < 5) { 591e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 592e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 593e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 594e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (lua_isstring(L, 2) && lua_isnumber(L, 3) && lua_isnumber(L, 4)) { 595e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org size_t len; 596e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org const char* text = lua_tolstring(L, 2, &len); 597e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org get_ref<SkCanvas>(L, 1)->drawText(text, len, 598e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org lua2scalar(L, 3), lua2scalar(L, 4), 599e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org *get_obj<SkPaint>(L, 5)); 600e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 601e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 602e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 603e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 6041b6ab4417e0edef3b91d150e6650205f49f04d17reedstatic int lcanvas_drawTextBlob(lua_State* L) { 6051b6ab4417e0edef3b91d150e6650205f49f04d17reed const SkTextBlob* blob = get_ref<SkTextBlob>(L, 2); 6061b6ab4417e0edef3b91d150e6650205f49f04d17reed SkScalar x = lua2scalar(L, 3); 6071b6ab4417e0edef3b91d150e6650205f49f04d17reed SkScalar y = lua2scalar(L, 4); 6081b6ab4417e0edef3b91d150e6650205f49f04d17reed const SkPaint& paint = *get_obj<SkPaint>(L, 5); 6091b6ab4417e0edef3b91d150e6650205f49f04d17reed get_ref<SkCanvas>(L, 1)->drawTextBlob(blob, x, y, paint); 6101b6ab4417e0edef3b91d150e6650205f49f04d17reed return 0; 6111b6ab4417e0edef3b91d150e6650205f49f04d17reed} 6121b6ab4417e0edef3b91d150e6650205f49f04d17reed 61374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_getSaveCount(lua_State* L) { 61474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, get_ref<SkCanvas>(L, 1)->getSaveCount()); 61574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 61674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 61774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 61874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_getTotalMatrix(lua_State* L) { 61974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushMatrix(get_ref<SkCanvas>(L, 1)->getTotalMatrix()); 62074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 62174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 62274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 6235cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.orgstatic int lcanvas_getClipStack(lua_State* L) { 6245cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org SkLua(L).pushClipStack(*get_ref<SkCanvas>(L, 1)->getClipStack()); 6255cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org return 1; 6265cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org} 6275cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org 6284ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.comint SkLua::lcanvas_getReducedClipStack(lua_State* L) { 6294ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#if SK_SUPPORT_GPU 6304ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com const SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 6314ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkISize layerSize = canvas->getTopLayerSize(); 6324ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkIPoint layerOrigin = canvas->getTopLayerOrigin(); 6334ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkIRect queryBounds = SkIRect::MakeXYWH(layerOrigin.fX, layerOrigin.fY, 6344ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com layerSize.fWidth, layerSize.fHeight); 6354ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 6364ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::ElementList elements; 6374ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::InitialState initialState; 6384ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com int32_t genID; 6394ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkIRect resultBounds; 6404ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 6414ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com const SkClipStack& stack = *canvas->getClipStack(); 6424ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 6434ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::ReduceClipStack(stack, 6444ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com queryBounds, 6454ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &elements, 6464ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &genID, 6474ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &initialState, 6484ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com &resultBounds, 6494ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com NULL); 6504ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 6514ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com GrReducedClip::ElementList::Iter iter(elements); 6524ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com int i = 0; 6534ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com lua_newtable(L); 65449f085dddff10473b6ebf832a974288300224e60bsalomon while(iter.get()) { 6554ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com SkLua(L).pushClipStackElement(*iter.get()); 6564ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com iter.next(); 6574ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com lua_rawseti(L, -2, ++i); 6584ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com } 6594ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com // Currently this only returns the element list to lua, not the initial state or result bounds. 6604ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com // It could return these as additional items on the lua stack. 6614ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com return 1; 6624ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#else 6634ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com return 0; 6644ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#endif 6654ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com} 6664ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com 667fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lcanvas_save(lua_State* L) { 668fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->save()); 669fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 670fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 671fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 67286217d831d70949f9dde6a60f821d3f357558bdfreedstatic int lcanvas_saveLayer(lua_State* L) { 67386217d831d70949f9dde6a60f821d3f357558bdfreed SkPaint paint; 67486217d831d70949f9dde6a60f821d3f357558bdfreed lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->saveLayer(NULL, lua2OptionalPaint(L, 2, &paint))); 67586217d831d70949f9dde6a60f821d3f357558bdfreed return 1; 67686217d831d70949f9dde6a60f821d3f357558bdfreed} 67786217d831d70949f9dde6a60f821d3f357558bdfreed 678fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lcanvas_restore(lua_State* L) { 679fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkCanvas>(L, 1)->restore(); 680fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 681fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 682fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 6831d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.orgstatic int lcanvas_scale(lua_State* L) { 6841d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar sx = lua2scalar_def(L, 2, 1); 6851d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar sy = lua2scalar_def(L, 3, sx); 6861d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org get_ref<SkCanvas>(L, 1)->scale(sx, sy); 6871d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org return 0; 6881d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org} 6891d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org 6903597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lcanvas_translate(lua_State* L) { 6911d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar tx = lua2scalar_def(L, 2, 0); 6921d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar ty = lua2scalar_def(L, 3, 0); 6931d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org get_ref<SkCanvas>(L, 1)->translate(tx, ty); 6941d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org return 0; 6951d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org} 6961d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org 6971d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.orgstatic int lcanvas_rotate(lua_State* L) { 6981d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org SkScalar degrees = lua2scalar_def(L, 2, 0); 6991d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org get_ref<SkCanvas>(L, 1)->rotate(degrees); 7003597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 0; 7013597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 7023597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 703bdc49ae0d422b8fe1957af570c4f4e63272f5285reedstatic int lcanvas_concat(lua_State* L) { 704bdc49ae0d422b8fe1957af570c4f4e63272f5285reed get_ref<SkCanvas>(L, 1)->concat(*get_obj<SkMatrix>(L, 2)); 705bdc49ae0d422b8fe1957af570c4f4e63272f5285reed return 0; 706bdc49ae0d422b8fe1957af570c4f4e63272f5285reed} 707bdc49ae0d422b8fe1957af570c4f4e63272f5285reed 708485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lcanvas_newSurface(lua_State* L) { 709485557f95d7a4b04536c0c5f01fad5f9744531dareed int width = lua2int_def(L, 2, 0); 7107a72c6702da9e1f6fb536efe844db23f77535a19reed int height = lua2int_def(L, 3, 0); 711485557f95d7a4b04536c0c5f01fad5f9744531dareed SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 712485557f95d7a4b04536c0c5f01fad5f9744531dareed SkSurface* surface = get_ref<SkCanvas>(L, 1)->newSurface(info); 713485557f95d7a4b04536c0c5f01fad5f9744531dareed if (NULL == surface) { 714485557f95d7a4b04536c0c5f01fad5f9744531dareed lua_pushnil(L); 715485557f95d7a4b04536c0c5f01fad5f9744531dareed } else { 7169fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, surface)->unref(); 717485557f95d7a4b04536c0c5f01fad5f9744531dareed } 718485557f95d7a4b04536c0c5f01fad5f9744531dareed return 1; 719485557f95d7a4b04536c0c5f01fad5f9744531dareed} 720485557f95d7a4b04536c0c5f01fad5f9744531dareed 72174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lcanvas_gc(lua_State* L) { 72274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_ref<SkCanvas>(L, 1)->unref(); 72374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 72474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 72574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 7264ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.comconst struct luaL_Reg gSkCanvas_Methods[] = { 727f355df58517691b05be8bc3f0e99331ede6c4d44reed { "clear", lcanvas_clear }, 72874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawColor", lcanvas_drawColor }, 7299fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed { "drawPaint", lcanvas_drawPaint }, 73074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawRect", lcanvas_drawRect }, 73174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawOval", lcanvas_drawOval }, 73274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "drawCircle", lcanvas_drawCircle }, 733792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "drawImage", lcanvas_drawImage }, 734ba5fb932a1b5666a861043735cfb055cc1b600c7reed { "drawImageRect", lcanvas_drawImageRect }, 7357a72c6702da9e1f6fb536efe844db23f77535a19reed { "drawPatch", lcanvas_drawPatch }, 736fd3458750d92d9722e5760ddb99824e65455463creed@google.com { "drawPath", lcanvas_drawPath }, 73796affcde22a675e3629b9da490bb45a0ab07fa2breed { "drawPicture", lcanvas_drawPicture }, 738e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "drawText", lcanvas_drawText }, 7391b6ab4417e0edef3b91d150e6650205f49f04d17reed { "drawTextBlob", lcanvas_drawTextBlob }, 74074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getSaveCount", lcanvas_getSaveCount }, 74174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getTotalMatrix", lcanvas_getTotalMatrix }, 7425cc25359c62c83c356c3a30572a05ac9647daa55commit-bot@chromium.org { "getClipStack", lcanvas_getClipStack }, 7434ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#if SK_SUPPORT_GPU 7444ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack }, 7454ebe3821888d550d8a8b89341ec251ba942f0225bsalomon@google.com#endif 746fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "save", lcanvas_save }, 74786217d831d70949f9dde6a60f821d3f357558bdfreed { "saveLayer", lcanvas_saveLayer }, 748fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "restore", lcanvas_restore }, 7491d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org { "scale", lcanvas_scale }, 7503597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com { "translate", lcanvas_translate }, 7511d32cc67f77d3fac29db574d79c7dff93e035259mike@reedtribe.org { "rotate", lcanvas_rotate }, 752bdc49ae0d422b8fe1957af570c4f4e63272f5285reed { "concat", lcanvas_concat }, 753485557f95d7a4b04536c0c5f01fad5f9744531dareed 754485557f95d7a4b04536c0c5f01fad5f9744531dareed { "newSurface", lcanvas_newSurface }, 755485557f95d7a4b04536c0c5f01fad5f9744531dareed 75674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lcanvas_gc }, 75774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 75874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 75974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 76074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 76174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 762fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_beginPage(lua_State* L) { 763fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const SkRect* contentPtr = NULL; 764fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org push_ref(L, get_ref<SkDocument>(L, 1)->beginPage(lua2scalar(L, 2), 765fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org lua2scalar(L, 3), 766fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org contentPtr)); 767fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 768fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 769fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 770fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_endPage(lua_State* L) { 771fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkDocument>(L, 1)->endPage(); 772fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 773fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 774fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 775fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_close(lua_State* L) { 776fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkDocument>(L, 1)->close(); 777fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 778fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 779fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 780fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int ldocument_gc(lua_State* L) { 781fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_ref<SkDocument>(L, 1)->unref(); 782fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 783fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 784fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 785fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic const struct luaL_Reg gSkDocument_Methods[] = { 786fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "beginPage", ldocument_beginPage }, 787fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "endPage", ldocument_endPage }, 788fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "close", ldocument_close }, 789fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "__gc", ldocument_gc }, 790fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { NULL, NULL } 791fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org}; 792fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 793fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 794fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 79574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_isAntiAlias(lua_State* L) { 79674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isAntiAlias()); 79774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 79874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 79974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 80074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_setAntiAlias(lua_State* L) { 80188c9ec968f682ebcc4ec13fe76f4d24d1e05633breed@google.com get_obj<SkPaint>(L, 1)->setAntiAlias(lua2bool(L, 2)); 80274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 80374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 80474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 8051cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isDither(lua_State* L) { 8061cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isDither()); 8071cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8081cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8091cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 810bb8a0ababab1aa2693a2a97733524ee367da1791reedstatic int lpaint_setDither(lua_State* L) { 811bb8a0ababab1aa2693a2a97733524ee367da1791reed get_obj<SkPaint>(L, 1)->setDither(lua2bool(L, 2)); 812bb8a0ababab1aa2693a2a97733524ee367da1791reed return 0; 813bb8a0ababab1aa2693a2a97733524ee367da1791reed} 814bb8a0ababab1aa2693a2a97733524ee367da1791reed 8151cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isUnderlineText(lua_State* L) { 8161cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isUnderlineText()); 8171cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8181cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8191cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8201cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isStrikeThruText(lua_State* L) { 8211cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isStrikeThruText()); 8221cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8231cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8241cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8251cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isFakeBoldText(lua_State* L) { 8261cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isFakeBoldText()); 8271cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8281cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8291cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8301cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isLinearText(lua_State* L) { 8311cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isLinearText()); 8321cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8331cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8341cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8351cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isSubpixelText(lua_State* L) { 8361cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isSubpixelText()); 8371cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8381cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8391cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 84009a1d6751c5c7c09d72ff8e195148509d2cb87cereedstatic int lpaint_setSubpixelText(lua_State* L) { 84109a1d6751c5c7c09d72ff8e195148509d2cb87cereed get_obj<SkPaint>(L, 1)->setSubpixelText(lua2bool(L, 2)); 84209a1d6751c5c7c09d72ff8e195148509d2cb87cereed return 1; 84309a1d6751c5c7c09d72ff8e195148509d2cb87cereed} 84409a1d6751c5c7c09d72ff8e195148509d2cb87cereed 8451cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isDevKernText(lua_State* L) { 8461cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isDevKernText()); 8471cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8481cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8491cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8501cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isLCDRenderText(lua_State* L) { 8511cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isLCDRenderText()); 8521cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8531cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8541cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 85536c9c11ed97d6c6f49bfdad53537a459b9e4b41dreedstatic int lpaint_setLCDRenderText(lua_State* L) { 85636c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed get_obj<SkPaint>(L, 1)->setLCDRenderText(lua2bool(L, 2)); 85736c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed return 1; 85836c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed} 85936c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed 8601cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isEmbeddedBitmapText(lua_State* L) { 8611cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isEmbeddedBitmapText()); 8621cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8631cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8641cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8651cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isAutohinted(lua_State* L) { 8661cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isAutohinted()); 8671cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8681cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8691cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 8701cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_isVerticalText(lua_State* L) { 8711cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org lua_pushboolean(L, get_obj<SkPaint>(L, 1)->isVerticalText()); 8721cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 8731cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 8741cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 875468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic int lpaint_getAlpha(lua_State* L) { 876468b1815d29d9bbe513f2d8eb4afc0b066715b52reed SkLua(L).pushScalar(byte2unit(get_obj<SkPaint>(L, 1)->getAlpha())); 877468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return 1; 878468b1815d29d9bbe513f2d8eb4afc0b066715b52reed} 879468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 880468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic int lpaint_setAlpha(lua_State* L) { 881468b1815d29d9bbe513f2d8eb4afc0b066715b52reed get_obj<SkPaint>(L, 1)->setAlpha(unit2byte(lua2scalar(L, 2))); 882468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return 0; 883468b1815d29d9bbe513f2d8eb4afc0b066715b52reed} 884468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 88574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_getColor(lua_State* L) { 88674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushColor(get_obj<SkPaint>(L, 1)->getColor()); 88774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 88874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 88974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 89074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_setColor(lua_State* L) { 89174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPaint>(L, 1)->setColor(lua2color(L, 2)); 89274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 89374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 89474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 895e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic int lpaint_getTextSize(lua_State* L) { 896e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getTextSize()); 897e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com return 1; 898e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 899e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 9001cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getTextScaleX(lua_State* L) { 9011cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getTextScaleX()); 9021cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 9031cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 9041cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 9051cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getTextSkewX(lua_State* L) { 9061cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getTextSkewX()); 9071cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 9081cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 9091cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 910e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic int lpaint_setTextSize(lua_State* L) { 911e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com get_obj<SkPaint>(L, 1)->setTextSize(lua2scalar(L, 2)); 912e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com return 0; 913e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 914e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 915e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lpaint_getTypeface(lua_State* L) { 916e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org push_ref(L, get_obj<SkPaint>(L, 1)->getTypeface()); 917e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 1; 918e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 919e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 920e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lpaint_setTypeface(lua_State* L) { 921e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org get_obj<SkPaint>(L, 1)->setTypeface(get_ref<SkTypeface>(L, 2)); 922e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 923e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 924e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 9251cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getHinting(lua_State* L) { 9261cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getHinting()); 9271cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 9281cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 9291cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 93093a1215fe0ab007ce941c721f1fd3e9dcb5d4754reedstatic int lpaint_getFilterQuality(lua_State* L) { 93193a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getFilterQuality()); 9327a72c6702da9e1f6fb536efe844db23f77535a19reed return 1; 9337a72c6702da9e1f6fb536efe844db23f77535a19reed} 9347a72c6702da9e1f6fb536efe844db23f77535a19reed 93593a1215fe0ab007ce941c721f1fd3e9dcb5d4754reedstatic int lpaint_setFilterQuality(lua_State* L) { 9367a72c6702da9e1f6fb536efe844db23f77535a19reed int level = lua2int_def(L, 2, -1); 9377a72c6702da9e1f6fb536efe844db23f77535a19reed if (level >= 0 && level <= 3) { 93893a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed get_obj<SkPaint>(L, 1)->setFilterQuality((SkFilterQuality)level); 9397a72c6702da9e1f6fb536efe844db23f77535a19reed } 9407a72c6702da9e1f6fb536efe844db23f77535a19reed return 0; 9417a72c6702da9e1f6fb536efe844db23f77535a19reed} 9427a72c6702da9e1f6fb536efe844db23f77535a19reed 943e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comstatic int lpaint_getFontID(lua_State* L) { 944e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkTypeface* face = get_obj<SkPaint>(L, 1)->getTypeface(); 945e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com SkLua(L).pushU32(SkTypeface::UniqueID(face)); 946e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com return 1; 947e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com} 948e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com 949fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic const struct { 950fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const char* fLabel; 951fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org SkPaint::Align fAlign; 952fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} gAlignRec[] = { 953fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "left", SkPaint::kLeft_Align }, 954fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "center", SkPaint::kCenter_Align }, 955fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "right", SkPaint::kRight_Align }, 956fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org}; 957fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 958fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lpaint_getTextAlign(lua_State* L) { 959fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org SkPaint::Align align = get_obj<SkPaint>(L, 1)->getTextAlign(); 960fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org for (size_t i = 0; i < SK_ARRAY_COUNT(gAlignRec); ++i) { 961fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (gAlignRec[i].fAlign == align) { 962fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org lua_pushstring(L, gAlignRec[i].fLabel); 963fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 964fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 965fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 966fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 967fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 968fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 969fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lpaint_setTextAlign(lua_State* L) { 970fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (lua_isstring(L, 2)) { 971fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org size_t len; 972fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const char* label = lua_tolstring(L, 2, &len); 973370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 974fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org for (size_t i = 0; i < SK_ARRAY_COUNT(gAlignRec); ++i) { 975fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (!strcmp(gAlignRec[i].fLabel, label)) { 976fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org get_obj<SkPaint>(L, 1)->setTextAlign(gAlignRec[i].fAlign); 977fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org break; 978fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 979fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 980fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 981fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 982fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 983fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 98473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_getStroke(lua_State* L) { 98573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_pushboolean(L, SkPaint::kStroke_Style == get_obj<SkPaint>(L, 1)->getStyle()); 98673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 1; 98773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 98873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 98973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_setStroke(lua_State* L) { 99073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkPaint::Style style; 991370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 99273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org if (lua_toboolean(L, 2)) { 99373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org style = SkPaint::kStroke_Style; 99473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } else { 99573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org style = SkPaint::kFill_Style; 99673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } 99773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org get_obj<SkPaint>(L, 1)->setStyle(style); 99873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 0; 99973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 100073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 10011cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getStrokeCap(lua_State* L) { 10021cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getStrokeCap()); 10031cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 10041cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 10051cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 10061cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getStrokeJoin(lua_State* L) { 10071cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getStrokeJoin()); 10081cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 10091cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 10101cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 10111cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getTextEncoding(lua_State* L) { 1012641bcc3c5caac1ed544cce95fa58ace904910dc4commit-bot@chromium.org SkLua(L).pushU32(get_obj<SkPaint>(L, 1)->getTextEncoding()); 10131cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 10141cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 10151cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 101673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_getStrokeWidth(lua_State* L) { 101773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getStrokeWidth()); 101873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 1; 101973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 102073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 102173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_setStrokeWidth(lua_State* L) { 102273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org get_obj<SkPaint>(L, 1)->setStrokeWidth(lua2scalar(L, 2)); 102373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 0; 102473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 102573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 10261cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.orgstatic int lpaint_getStrokeMiter(lua_State* L) { 10271cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->getStrokeMiter()); 10281cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org return 1; 10291cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org} 10301cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org 103173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_measureText(lua_State* L) { 103273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org if (lua_isstring(L, 2)) { 103373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org size_t len; 103473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org const char* text = lua_tolstring(L, 2, &len); 103573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkLua(L).pushScalar(get_obj<SkPaint>(L, 1)->measureText(text, len)); 103673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 1; 103773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org } 103873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 0; 103973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 104073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 104173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstruct FontMetrics { 104273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fTop; //!< The greatest distance above the baseline for any glyph (will be <= 0) 104373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fAscent; //!< The recommended distance above the baseline (will be <= 0) 104473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fDescent; //!< The recommended distance below the baseline (will be >= 0) 104573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fBottom; //!< The greatest distance below the baseline for any glyph (will be >= 0) 104673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fLeading; //!< The recommended distance to add between lines of text (will be >= 0) 104773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fAvgCharWidth; //!< the average charactor width (>= 0) 104873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fXMin; //!< The minimum bounding box x value for all glyphs 104973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fXMax; //!< The maximum bounding box x value for all glyphs 105073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar fXHeight; //!< the height of an 'x' in px, or 0 if no 'x' in face 105173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org}; 105273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 105373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.orgstatic int lpaint_getFontMetrics(lua_State* L) { 105473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkPaint::FontMetrics fm; 105573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkScalar height = get_obj<SkPaint>(L, 1)->getFontMetrics(&fm); 1056370c534c19f0faa0d60b3cac2e77886b53535c8fskia.committer@gmail.com 105773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org lua_newtable(L); 105873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "top", fm.fTop); 105973d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "ascent", fm.fAscent); 106073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "descent", fm.fDescent); 106173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "bottom", fm.fBottom); 106273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org setfield_scalar(L, "leading", fm.fLeading); 106373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org SkLua(L).pushScalar(height); 106473d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org return 2; 106573d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org} 106673d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org 106729563879168ed58a8295520fbb4381d0ceff9f2freed@google.comstatic int lpaint_getEffects(lua_State* L) { 106829563879168ed58a8295520fbb4381d0ceff9f2freed@google.com const SkPaint* paint = get_obj<SkPaint>(L, 1); 1069de2e4e8a6422c7d8b5847f038f5c6360b187f7a2skia.committer@gmail.com 107029563879168ed58a8295520fbb4381d0ceff9f2freed@google.com lua_newtable(L); 1071468b1815d29d9bbe513f2d8eb4afc0b066715b52reed setfield_bool_if(L, "looper", !!paint->getLooper()); 1072468b1815d29d9bbe513f2d8eb4afc0b066715b52reed setfield_bool_if(L, "pathEffect", !!paint->getPathEffect()); 1073468b1815d29d9bbe513f2d8eb4afc0b066715b52reed setfield_bool_if(L, "rasterizer", !!paint->getRasterizer()); 1074468b1815d29d9bbe513f2d8eb4afc0b066715b52reed setfield_bool_if(L, "maskFilter", !!paint->getMaskFilter()); 1075468b1815d29d9bbe513f2d8eb4afc0b066715b52reed setfield_bool_if(L, "shader", !!paint->getShader()); 107629563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "colorFilter", !!paint->getColorFilter()); 107729563879168ed58a8295520fbb4381d0ceff9f2freed@google.com setfield_bool_if(L, "imageFilter", !!paint->getImageFilter()); 1078468b1815d29d9bbe513f2d8eb4afc0b066715b52reed setfield_bool_if(L, "xfermode", !!paint->getXfermode()); 107929563879168ed58a8295520fbb4381d0ceff9f2freed@google.com return 1; 108029563879168ed58a8295520fbb4381d0ceff9f2freed@google.com} 108129563879168ed58a8295520fbb4381d0ceff9f2freed@google.com 1082468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic int lpaint_getImageFilter(lua_State* L) { 1083468b1815d29d9bbe513f2d8eb4afc0b066715b52reed const SkPaint* paint = get_obj<SkPaint>(L, 1); 1084468b1815d29d9bbe513f2d8eb4afc0b066715b52reed SkImageFilter* imf = paint->getImageFilter(); 1085468b1815d29d9bbe513f2d8eb4afc0b066715b52reed if (imf) { 1086468b1815d29d9bbe513f2d8eb4afc0b066715b52reed push_ref(L, imf); 1087468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return 1; 1088468b1815d29d9bbe513f2d8eb4afc0b066715b52reed } 1089468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return 0; 1090468b1815d29d9bbe513f2d8eb4afc0b066715b52reed} 1091468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 1092468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic int lpaint_setImageFilter(lua_State* L) { 1093468b1815d29d9bbe513f2d8eb4afc0b066715b52reed SkPaint* paint = get_obj<SkPaint>(L, 1); 1094468b1815d29d9bbe513f2d8eb4afc0b066715b52reed paint->setImageFilter(get_ref<SkImageFilter>(L, 2)); 1095468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return 0; 1096468b1815d29d9bbe513f2d8eb4afc0b066715b52reed} 1097468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 10985fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lpaint_getShader(lua_State* L) { 10995fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com const SkPaint* paint = get_obj<SkPaint>(L, 1); 11005fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = paint->getShader(); 11015fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (shader) { 11025fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com push_ref(L, shader); 11035fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 1; 11045fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 11055fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 11065fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 11075fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 11089fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reedstatic int lpaint_setShader(lua_State* L) { 11099fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkPaint* paint = get_obj<SkPaint>(L, 1); 11109fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed paint->setShader(get_ref<SkShader>(L, 2)); 11119fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed return 0; 11129fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed} 11139fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed 11141301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgstatic int lpaint_getPathEffect(lua_State* L) { 11151301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org const SkPaint* paint = get_obj<SkPaint>(L, 1); 11161301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org SkPathEffect* pe = paint->getPathEffect(); 11171301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org if (pe) { 11181301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org push_ref(L, pe); 11191301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org return 1; 11201301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org } 11211301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org return 0; 11221301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org} 11231301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 112474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpaint_gc(lua_State* L) { 112574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPaint>(L, 1)->~SkPaint(); 112674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 112774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 112874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 112974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const struct luaL_Reg gSkPaint_Methods[] = { 113074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "isAntiAlias", lpaint_isAntiAlias }, 113174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "setAntiAlias", lpaint_setAntiAlias }, 11321cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isDither", lpaint_isDither }, 1133bb8a0ababab1aa2693a2a97733524ee367da1791reed { "setDither", lpaint_setDither }, 113493a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed { "getFilterQuality", lpaint_getFilterQuality }, 113593a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed { "setFilterQuality", lpaint_setFilterQuality }, 11361cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isUnderlineText", lpaint_isUnderlineText }, 11371cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isStrikeThruText", lpaint_isStrikeThruText }, 11381cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isFakeBoldText", lpaint_isFakeBoldText }, 11391cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isLinearText", lpaint_isLinearText }, 11401cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isSubpixelText", lpaint_isSubpixelText }, 114109a1d6751c5c7c09d72ff8e195148509d2cb87cereed { "setSubpixelText", lpaint_setSubpixelText }, 11421cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isDevKernText", lpaint_isDevKernText }, 11431cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isLCDRenderText", lpaint_isLCDRenderText }, 114436c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed { "setLCDRenderText", lpaint_setLCDRenderText }, 11451cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isEmbeddedBitmapText", lpaint_isEmbeddedBitmapText }, 11461cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isAutohinted", lpaint_isAutohinted }, 11471cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "isVerticalText", lpaint_isVerticalText }, 1148468b1815d29d9bbe513f2d8eb4afc0b066715b52reed { "getAlpha", lpaint_getAlpha }, 1149468b1815d29d9bbe513f2d8eb4afc0b066715b52reed { "setAlpha", lpaint_setAlpha }, 115074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getColor", lpaint_getColor }, 115174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "setColor", lpaint_setColor }, 1152e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com { "getTextSize", lpaint_getTextSize }, 1153e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com { "setTextSize", lpaint_setTextSize }, 11541cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getTextScaleX", lpaint_getTextScaleX }, 11551cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getTextSkewX", lpaint_getTextSkewX }, 1156e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "getTypeface", lpaint_getTypeface }, 1157e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "setTypeface", lpaint_setTypeface }, 11581cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getHinting", lpaint_getHinting }, 1159e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com { "getFontID", lpaint_getFontID }, 1160fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "getTextAlign", lpaint_getTextAlign }, 1161fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org { "setTextAlign", lpaint_setTextAlign }, 116273d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "getStroke", lpaint_getStroke }, 116373d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "setStroke", lpaint_setStroke }, 11641cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getStrokeCap", lpaint_getStrokeCap }, 11651cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getStrokeJoin", lpaint_getStrokeJoin }, 11661cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getTextEncoding", lpaint_getTextEncoding }, 116773d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "getStrokeWidth", lpaint_getStrokeWidth }, 116873d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "setStrokeWidth", lpaint_setStrokeWidth }, 11691cd71fb013643b983b372fee24eab3708aae70e9commit-bot@chromium.org { "getStrokeMiter", lpaint_getStrokeMiter }, 117073d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "measureText", lpaint_measureText }, 117173d9f1c65114ba638637152605b0f03e871271damike@reedtribe.org { "getFontMetrics", lpaint_getFontMetrics }, 117229563879168ed58a8295520fbb4381d0ceff9f2freed@google.com { "getEffects", lpaint_getEffects }, 1173468b1815d29d9bbe513f2d8eb4afc0b066715b52reed { "getImageFilter", lpaint_getImageFilter }, 1174468b1815d29d9bbe513f2d8eb4afc0b066715b52reed { "setImageFilter", lpaint_setImageFilter }, 11755fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "getShader", lpaint_getShader }, 11769fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed { "setShader", lpaint_setShader }, 11771301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org { "getPathEffect", lpaint_getPathEffect }, 117874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lpaint_gc }, 117974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 118074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 118174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 118274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 118374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 11845fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic const char* mode2string(SkShader::TileMode mode) { 11855fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com static const char* gNames[] = { "clamp", "repeat", "mirror" }; 11865fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkASSERT((unsigned)mode < SK_ARRAY_COUNT(gNames)); 11875fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return gNames[mode]; 11885fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 11895fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 11905fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic const char* gradtype2string(SkShader::GradientType t) { 11915fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com static const char* gNames[] = { 11925fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com "none", "color", "linear", "radial", "radial2", "sweep", "conical" 11935fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com }; 11945fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkASSERT((unsigned)t < SK_ARRAY_COUNT(gNames)); 11955fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return gNames[t]; 11965fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 11975fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 11985fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_isOpaque(lua_State* L) { 11995fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = get_ref<SkShader>(L, 1); 12005fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return shader && shader->isOpaque(); 12015fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 12025fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 12035fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_asABitmap(lua_State* L) { 12045fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = get_ref<SkShader>(L, 1); 12055fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (shader) { 12065fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkBitmap bm; 12075fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkMatrix matrix; 12085fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader::TileMode modes[2]; 12095fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com switch (shader->asABitmap(&bm, &matrix, modes)) { 12105fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com case SkShader::kDefault_BitmapType: 12115fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com lua_newtable(L); 12125fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "genID", bm.pixelRef() ? bm.pixelRef()->getGenerationID() : 0); 12135fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "width", bm.width()); 12145fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "height", bm.height()); 12155fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "tileX", mode2string(modes[0])); 12165fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "tileY", mode2string(modes[1])); 12175fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 1; 12185fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com default: 12195fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com break; 12205fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 12215fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 12225fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 12235fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 12245fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 12255fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_asAGradient(lua_State* L) { 12265fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader* shader = get_ref<SkShader>(L, 1); 12275fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (shader) { 12285fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader::GradientInfo info; 12295fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com sk_bzero(&info, sizeof(info)); 123074f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 123174f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org SkColor colors[3]; // hacked in for extracting info on 3 color case. 1232bd74add1dcb47cfaa8c8d176c2cc70e1e31c8b50skia.committer@gmail.com SkScalar pos[3]; 123374f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 123474f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org info.fColorCount = 3; 123574f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org info.fColors = &colors[0]; 123674f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org info.fColorOffsets = &pos[0]; 1237bd74add1dcb47cfaa8c8d176c2cc70e1e31c8b50skia.committer@gmail.com 12385fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com SkShader::GradientType t = shader->asAGradient(&info); 123974f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 12405fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com if (SkShader::kNone_GradientType != t) { 12415fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com lua_newtable(L); 12425fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "type", gradtype2string(t)); 12435fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_number(L, "colorCount", info.fColorCount); 12445fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com setfield_string(L, "tile", mode2string(info.fTileMode)); 124574f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org 124674f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org if (info.fColorCount == 3){ 124774f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org setfield_number(L, "midPos", pos[1]); 124874f96b9c4caeff8e805d8a37c63a5e5a103e59abcommit-bot@chromium.org } 1249bd74add1dcb47cfaa8c8d176c2cc70e1e31c8b50skia.committer@gmail.com 12505fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 1; 12515fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 12525fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com } 12535fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 12545fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 12555fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 12565fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic int lshader_gc(lua_State* L) { 12575fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com get_ref<SkShader>(L, 1)->unref(); 12585fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com return 0; 12595fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com} 12605fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 12615fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.comstatic const struct luaL_Reg gSkShader_Methods[] = { 12625fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "isOpaque", lshader_isOpaque }, 12635fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "asABitmap", lshader_asABitmap }, 12645fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "asAGradient", lshader_asAGradient }, 12655fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { "__gc", lshader_gc }, 12665fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com { NULL, NULL } 12675fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com}; 12685fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 12695fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com/////////////////////////////////////////////////////////////////////////////// 12705fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com 12714d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.orgstatic int lpatheffect_asADash(lua_State* L) { 12724d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkPathEffect* pe = get_ref<SkPathEffect>(L, 1); 12734d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org if (pe) { 12744d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkPathEffect::DashInfo info; 12754d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkPathEffect::DashType dashType = pe->asADash(&info); 12764d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org if (SkPathEffect::kDash_DashType == dashType) { 12774d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkAutoTArray<SkScalar> intervals(info.fCount); 12784d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org info.fIntervals = intervals.get(); 12794d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org pe->asADash(&info); 12804d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org SkLua(L).pushDash(info); 12814d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org return 1; 12824d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org } 12834d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org } 12844d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org return 0; 12854d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org} 12864d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org 12871301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgstatic int lpatheffect_gc(lua_State* L) { 12881301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org get_ref<SkPathEffect>(L, 1)->unref(); 12891301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org return 0; 12901301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org} 12911301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 12921301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.orgstatic const struct luaL_Reg gSkPathEffect_Methods[] = { 12934d803a976c25ed582b02f8c42cd91c82e9d1ea84commit-bot@chromium.org { "asADash", lpatheffect_asADash }, 12941301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org { "__gc", lpatheffect_gc }, 12951301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org { NULL, NULL } 12961301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org}; 12971301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 12981301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 12991301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org 1300468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic int lpimagefilter_gc(lua_State* L) { 1301468b1815d29d9bbe513f2d8eb4afc0b066715b52reed get_ref<SkImageFilter>(L, 1)->unref(); 1302468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return 0; 1303468b1815d29d9bbe513f2d8eb4afc0b066715b52reed} 1304468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 1305468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic const struct luaL_Reg gSkImageFilter_Methods[] = { 1306468b1815d29d9bbe513f2d8eb4afc0b066715b52reed { "__gc", lpimagefilter_gc }, 1307468b1815d29d9bbe513f2d8eb4afc0b066715b52reed { NULL, NULL } 1308468b1815d29d9bbe513f2d8eb4afc0b066715b52reed}; 1309468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 1310468b1815d29d9bbe513f2d8eb4afc0b066715b52reed/////////////////////////////////////////////////////////////////////////////// 1311468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 13122815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comstatic int lmatrix_getType(lua_State* L) { 13132815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com SkMatrix::TypeMask mask = get_obj<SkMatrix>(L, 1)->getType(); 1314de2e4e8a6422c7d8b5847f038f5c6360b187f7a2skia.committer@gmail.com 13152815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com lua_newtable(L); 13162815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "translate", SkToBool(mask & SkMatrix::kTranslate_Mask)); 13172815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "scale", SkToBool(mask & SkMatrix::kScale_Mask)); 13182815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "affine", SkToBool(mask & SkMatrix::kAffine_Mask)); 13192815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com setfield_boolean(L, "perspective", SkToBool(mask & SkMatrix::kPerspective_Mask)); 13202815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com return 1; 13212815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com} 13222815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 13230f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getScaleX(lua_State* L) { 13240f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getScaleX()); 13250f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 13260f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 13270f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 13280f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getScaleY(lua_State* L) { 13290f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getScaleY()); 13300f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 13310f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 13320f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 13330f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getTranslateX(lua_State* L) { 13340f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateX()); 13350f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 13360f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 13370f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 13380f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.comstatic int lmatrix_getTranslateY(lua_State* L) { 13390f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateY()); 13400f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com return 1; 13410f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com} 13420f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com 13437a72c6702da9e1f6fb536efe844db23f77535a19reedstatic int lmatrix_invert(lua_State* L) { 13447a72c6702da9e1f6fb536efe844db23f77535a19reed lua_pushboolean(L, get_obj<SkMatrix>(L, 1)->invert(get_obj<SkMatrix>(L, 2))); 13457a72c6702da9e1f6fb536efe844db23f77535a19reed return 1; 13467a72c6702da9e1f6fb536efe844db23f77535a19reed} 13477a72c6702da9e1f6fb536efe844db23f77535a19reed 13487a72c6702da9e1f6fb536efe844db23f77535a19reedstatic int lmatrix_mapXY(lua_State* L) { 13497a72c6702da9e1f6fb536efe844db23f77535a19reed SkPoint pt = { lua2scalar(L, 2), lua2scalar(L, 3) }; 13507a72c6702da9e1f6fb536efe844db23f77535a19reed get_obj<SkMatrix>(L, 1)->mapPoints(&pt, &pt, 1); 13517a72c6702da9e1f6fb536efe844db23f77535a19reed lua_pushnumber(L, pt.x()); 13527a72c6702da9e1f6fb536efe844db23f77535a19reed lua_pushnumber(L, pt.y()); 13537a72c6702da9e1f6fb536efe844db23f77535a19reed return 2; 13547a72c6702da9e1f6fb536efe844db23f77535a19reed} 13557a72c6702da9e1f6fb536efe844db23f77535a19reed 1356bdc49ae0d422b8fe1957af570c4f4e63272f5285reedstatic int lmatrix_setRectToRect(lua_State* L) { 1357bdc49ae0d422b8fe1957af570c4f4e63272f5285reed SkMatrix* matrix = get_obj<SkMatrix>(L, 1); 1358bdc49ae0d422b8fe1957af570c4f4e63272f5285reed SkRect srcR, dstR; 1359bdc49ae0d422b8fe1957af570c4f4e63272f5285reed lua2rect(L, 2, &srcR); 1360bdc49ae0d422b8fe1957af570c4f4e63272f5285reed lua2rect(L, 3, &dstR); 1361bdc49ae0d422b8fe1957af570c4f4e63272f5285reed const char* scaleToFitStr = lua_tostring(L, 4); 1362bdc49ae0d422b8fe1957af570c4f4e63272f5285reed SkMatrix::ScaleToFit scaleToFit = SkMatrix::kFill_ScaleToFit; 1363bdc49ae0d422b8fe1957af570c4f4e63272f5285reed 1364bdc49ae0d422b8fe1957af570c4f4e63272f5285reed if (scaleToFitStr) { 1365bdc49ae0d422b8fe1957af570c4f4e63272f5285reed const struct { 1366bdc49ae0d422b8fe1957af570c4f4e63272f5285reed const char* fName; 1367bdc49ae0d422b8fe1957af570c4f4e63272f5285reed SkMatrix::ScaleToFit fScaleToFit; 1368bdc49ae0d422b8fe1957af570c4f4e63272f5285reed } rec[] = { 1369bdc49ae0d422b8fe1957af570c4f4e63272f5285reed { "fill", SkMatrix::kFill_ScaleToFit }, 1370bdc49ae0d422b8fe1957af570c4f4e63272f5285reed { "start", SkMatrix::kStart_ScaleToFit }, 1371bdc49ae0d422b8fe1957af570c4f4e63272f5285reed { "center", SkMatrix::kCenter_ScaleToFit }, 1372bdc49ae0d422b8fe1957af570c4f4e63272f5285reed { "end", SkMatrix::kEnd_ScaleToFit }, 1373bdc49ae0d422b8fe1957af570c4f4e63272f5285reed }; 1374bdc49ae0d422b8fe1957af570c4f4e63272f5285reed 1375bdc49ae0d422b8fe1957af570c4f4e63272f5285reed for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { 1376bdc49ae0d422b8fe1957af570c4f4e63272f5285reed if (strcmp(rec[i].fName, scaleToFitStr) == 0) { 1377bdc49ae0d422b8fe1957af570c4f4e63272f5285reed scaleToFit = rec[i].fScaleToFit; 1378bdc49ae0d422b8fe1957af570c4f4e63272f5285reed break; 1379bdc49ae0d422b8fe1957af570c4f4e63272f5285reed } 1380bdc49ae0d422b8fe1957af570c4f4e63272f5285reed } 1381bdc49ae0d422b8fe1957af570c4f4e63272f5285reed } 1382bdc49ae0d422b8fe1957af570c4f4e63272f5285reed 1383bdc49ae0d422b8fe1957af570c4f4e63272f5285reed matrix->setRectToRect(srcR, dstR, scaleToFit); 1384bdc49ae0d422b8fe1957af570c4f4e63272f5285reed return 0; 1385bdc49ae0d422b8fe1957af570c4f4e63272f5285reed} 1386bdc49ae0d422b8fe1957af570c4f4e63272f5285reed 13872815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comstatic const struct luaL_Reg gSkMatrix_Methods[] = { 13882815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com { "getType", lmatrix_getType }, 13890f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getScaleX", lmatrix_getScaleX }, 13900f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getScaleY", lmatrix_getScaleY }, 13910f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getTranslateX", lmatrix_getTranslateX }, 13920f48ee0a07aa50ab60bfff3c2718b9649e3639eahumper@google.com { "getTranslateY", lmatrix_getTranslateY }, 1393bdc49ae0d422b8fe1957af570c4f4e63272f5285reed { "setRectToRect", lmatrix_setRectToRect }, 13947a72c6702da9e1f6fb536efe844db23f77535a19reed { "invert", lmatrix_invert }, 13957a72c6702da9e1f6fb536efe844db23f77535a19reed { "mapXY", lmatrix_mapXY }, 13962815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com { NULL, NULL } 13972815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com}; 13982815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 13992815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com/////////////////////////////////////////////////////////////////////////////// 14002815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com 140174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_getBounds(lua_State* L) { 140274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushRect(get_obj<SkPath>(L, 1)->getBounds()); 140374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 140474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 140574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1406d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic const char* fill_type_to_str(SkPath::FillType fill) { 1407d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org switch (fill) { 1408d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kEvenOdd_FillType: 1409d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "even-odd"; 1410d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kWinding_FillType: 1411d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "winding"; 1412d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kInverseEvenOdd_FillType: 1413d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "inverse-even-odd"; 1414d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org case SkPath::kInverseWinding_FillType: 1415d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "inverse-winding"; 1416d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1417d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return "unknown"; 1418d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1419d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 1420d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic int lpath_getFillType(lua_State* L) { 1421d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkPath::FillType fill = get_obj<SkPath>(L, 1)->getFillType(); 1422d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkLua(L).pushString(fill_type_to_str(fill)); 1423d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return 1; 1424d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1425d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 1426d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic SkString segment_masks_to_str(uint32_t segmentMasks) { 1427d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkString result; 1428d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org bool first = true; 1429d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kLine_SegmentMask & segmentMasks) { 1430d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("line"); 1431d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org first = false; 1432d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kLine_SegmentMask;) 1433d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1434d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kQuad_SegmentMask & segmentMasks) { 1435d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (!first) { 1436d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append(" "); 1437d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1438d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("quad"); 1439d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org first = false; 1440d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kQuad_SegmentMask;) 1441d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1442d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kConic_SegmentMask & segmentMasks) { 1443d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (!first) { 1444d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append(" "); 1445d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1446d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("conic"); 1447d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org first = false; 1448d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kConic_SegmentMask;) 1449d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1450d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (SkPath::kCubic_SegmentMask & segmentMasks) { 1451d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org if (!first) { 1452d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append(" "); 1453d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1454d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org result.append("cubic"); 1455d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkDEBUGCODE(segmentMasks &= ~SkPath::kCubic_SegmentMask;) 1456d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org } 1457d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkASSERT(0 == segmentMasks); 1458d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return result; 1459d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1460d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 146195498ed2d8ad933d47f41fd97c0ee2feefbc1399krajcevskistatic int lpath_getSegmentTypes(lua_State* L) { 1462d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org uint32_t segMasks = get_obj<SkPath>(L, 1)->getSegmentMasks(); 1463d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkLua(L).pushString(segment_masks_to_str(segMasks)); 1464d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return 1; 1465d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1466d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 1467d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.orgstatic int lpath_isConvex(lua_State* L) { 1468d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org bool isConvex = SkPath::kConvex_Convexity == get_obj<SkPath>(L, 1)->getConvexity(); 1469d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org SkLua(L).pushBool(isConvex); 1470d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org return 1; 1471d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org} 1472d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org 147374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_isEmpty(lua_State* L) { 147474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, get_obj<SkPath>(L, 1)->isEmpty()); 147574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 147674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 147774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 147874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_isRect(lua_State* L) { 147974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect r; 148074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com bool pred = get_obj<SkPath>(L, 1)->isRect(&r); 148174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com int ret_count = 1; 148274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, pred); 148374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (pred) { 148474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushRect(r); 148574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com ret_count += 1; 148674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 148774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return ret_count; 148874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 148974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 149074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const char* dir2string(SkPath::Direction dir) { 149174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com static const char* gStr[] = { 149274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com "unknown", "cw", "ccw" 149374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com }; 149474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkASSERT((unsigned)dir < SK_ARRAY_COUNT(gStr)); 149574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return gStr[dir]; 149674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 149774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 149895bc5f349561fef2d6fbae71adb08cf5c2eec0c9caryclarkstatic int lpath_isNestedFillRects(lua_State* L) { 149974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkRect rects[2]; 150074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkPath::Direction dirs[2]; 150195bc5f349561fef2d6fbae71adb08cf5c2eec0c9caryclark bool pred = get_obj<SkPath>(L, 1)->isNestedFillRects(rects, dirs); 150274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com int ret_count = 1; 150374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushboolean(L, pred); 150474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (pred) { 150574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua lua(L); 150674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua.pushRect(rects[0]); 150774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua.pushRect(rects[1]); 150874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, dir2string(dirs[0])); 150974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, dir2string(dirs[0])); 151074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com ret_count += 4; 151174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 151274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return ret_count; 151374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 151474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1515c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.orgstatic int lpath_countPoints(lua_State* L) { 1516c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org lua_pushinteger(L, get_obj<SkPath>(L, 1)->countPoints()); 1517c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org return 1; 1518c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org} 1519c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org 152074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_reset(lua_State* L) { 152174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->reset(); 152274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 152374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 152474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 152574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_moveTo(lua_State* L) { 152674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->moveTo(lua2scalar(L, 2), lua2scalar(L, 3)); 152774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 152874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 152974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 153074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_lineTo(lua_State* L) { 153174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->lineTo(lua2scalar(L, 2), lua2scalar(L, 3)); 153274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 153374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 153474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 153574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_quadTo(lua_State* L) { 153674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->quadTo(lua2scalar(L, 2), lua2scalar(L, 3), 153774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 4), lua2scalar(L, 5)); 153874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 153974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 154074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 154174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_cubicTo(lua_State* L) { 154274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->cubicTo(lua2scalar(L, 2), lua2scalar(L, 3), 154374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 4), lua2scalar(L, 5), 154474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua2scalar(L, 6), lua2scalar(L, 7)); 154574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 154674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 154774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 154874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_close(lua_State* L) { 154974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->close(); 155074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 155174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 155274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 155374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lpath_gc(lua_State* L) { 155474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkPath>(L, 1)->~SkPath(); 155574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 155674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 155774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 155874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const struct luaL_Reg gSkPath_Methods[] = { 155974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "getBounds", lpath_getBounds }, 1560d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org { "getFillType", lpath_getFillType }, 156195498ed2d8ad933d47f41fd97c0ee2feefbc1399krajcevski { "getSegmentTypes", lpath_getSegmentTypes }, 1562d85b822616d609b7056154489176910cbd9f81a9commit-bot@chromium.org { "isConvex", lpath_isConvex }, 156374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "isEmpty", lpath_isEmpty }, 156474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "isRect", lpath_isRect }, 156595bc5f349561fef2d6fbae71adb08cf5c2eec0c9caryclark { "isNestedFillRects", lpath_isNestedFillRects }, 1566c530208ab02410df9efdabcfd50f42ec4c7fb750commit-bot@chromium.org { "countPoints", lpath_countPoints }, 156774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "reset", lpath_reset }, 156874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "moveTo", lpath_moveTo }, 156974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "lineTo", lpath_lineTo }, 157074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "quadTo", lpath_quadTo }, 157174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "cubicTo", lpath_cubicTo }, 157274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "close", lpath_close }, 157374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lpath_gc }, 157474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 157574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 157674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 157774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 157874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 157974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const char* rrect_type(const SkRRect& rr) { 158074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com switch (rr.getType()) { 158174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kEmpty_Type: return "empty"; 158274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kRect_Type: return "rect"; 158374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kOval_Type: return "oval"; 158474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kSimple_Type: return "simple"; 1585f338d7c860bf0bca82cac793069522311a3dbb1acommit-bot@chromium.org case SkRRect::kNinePatch_Type: return "nine-patch"; 158674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com case SkRRect::kComplex_Type: return "complex"; 158774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 1588330313a8a8343876ee596da39da06a5d69badd9cmtklein@google.com SkDEBUGFAIL("never get here"); 158974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return ""; 159074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 159174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 159274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_rect(lua_State* L) { 159374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkLua(L).pushRect(get_obj<SkRRect>(L, 1)->rect()); 159474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 159574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 159674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 159774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_type(lua_State* L) { 159874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushstring(L, rrect_type(*get_obj<SkRRect>(L, 1))); 159974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 1; 160074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 160174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 160274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_radii(lua_State* L) { 16037fa2a65c0cfc714364490cb715171461143024e0reed@google.com int corner = SkToInt(lua_tointeger(L, 2)); 160474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkVector v; 160574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (corner < 0 || corner > 3) { 160674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkDebugf("bad corner index %d", corner); 160774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com v.set(0, 0); 160874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } else { 160974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com v = get_obj<SkRRect>(L, 1)->radii((SkRRect::Corner)corner); 161074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 161174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, v.fX); 161274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushnumber(L, v.fY); 161374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 2; 161474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 161574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 161674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic int lrrect_gc(lua_State* L) { 161774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com get_obj<SkRRect>(L, 1)->~SkRRect(); 161874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com return 0; 161974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 162074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 162174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comstatic const struct luaL_Reg gSkRRect_Methods[] = { 162274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "rect", lrrect_rect }, 162374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "type", lrrect_type }, 162474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "radii", lrrect_radii }, 162574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { "__gc", lrrect_gc }, 162674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com { NULL, NULL } 162774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 162874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 162974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 163074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1631792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int limage_width(lua_State* L) { 1632792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org lua_pushinteger(L, get_ref<SkImage>(L, 1)->width()); 1633792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 1; 1634792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 1635792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1636792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int limage_height(lua_State* L) { 1637792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org lua_pushinteger(L, get_ref<SkImage>(L, 1)->height()); 1638792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 1; 1639792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 1640792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 16417a72c6702da9e1f6fb536efe844db23f77535a19reedstatic int limage_newShader(lua_State* L) { 16427a72c6702da9e1f6fb536efe844db23f77535a19reed SkShader::TileMode tmode = SkShader::kClamp_TileMode; 16437a72c6702da9e1f6fb536efe844db23f77535a19reed const SkMatrix* localM = NULL; 16447a72c6702da9e1f6fb536efe844db23f77535a19reed SkAutoTUnref<SkShader> shader(get_ref<SkImage>(L, 1)->newShader(tmode, tmode, localM)); 16457a72c6702da9e1f6fb536efe844db23f77535a19reed push_ref(L, shader.get()); 16467a72c6702da9e1f6fb536efe844db23f77535a19reed return 1; 16477a72c6702da9e1f6fb536efe844db23f77535a19reed} 16487a72c6702da9e1f6fb536efe844db23f77535a19reed 1649792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int limage_gc(lua_State* L) { 1650792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org get_ref<SkImage>(L, 1)->unref(); 1651792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 1652792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 1653792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1654792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic const struct luaL_Reg gSkImage_Methods[] = { 1655792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "width", limage_width }, 1656792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "height", limage_height }, 16577a72c6702da9e1f6fb536efe844db23f77535a19reed { "newShader", limage_newShader }, 1658792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { "__gc", limage_gc }, 1659792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org { NULL, NULL } 1660792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org}; 1661792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1662792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 1663792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 1664485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lsurface_width(lua_State* L) { 1665485557f95d7a4b04536c0c5f01fad5f9744531dareed lua_pushinteger(L, get_ref<SkSurface>(L, 1)->width()); 1666485557f95d7a4b04536c0c5f01fad5f9744531dareed return 1; 1667485557f95d7a4b04536c0c5f01fad5f9744531dareed} 1668485557f95d7a4b04536c0c5f01fad5f9744531dareed 1669485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lsurface_height(lua_State* L) { 1670485557f95d7a4b04536c0c5f01fad5f9744531dareed lua_pushinteger(L, get_ref<SkSurface>(L, 1)->height()); 1671485557f95d7a4b04536c0c5f01fad5f9744531dareed return 1; 1672485557f95d7a4b04536c0c5f01fad5f9744531dareed} 1673485557f95d7a4b04536c0c5f01fad5f9744531dareed 1674485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lsurface_getCanvas(lua_State* L) { 1675485557f95d7a4b04536c0c5f01fad5f9744531dareed SkCanvas* canvas = get_ref<SkSurface>(L, 1)->getCanvas(); 1676485557f95d7a4b04536c0c5f01fad5f9744531dareed if (NULL == canvas) { 1677485557f95d7a4b04536c0c5f01fad5f9744531dareed lua_pushnil(L); 1678485557f95d7a4b04536c0c5f01fad5f9744531dareed } else { 1679485557f95d7a4b04536c0c5f01fad5f9744531dareed push_ref(L, canvas); 1680485557f95d7a4b04536c0c5f01fad5f9744531dareed // note: we don't unref canvas, since getCanvas did not ref it. 1681485557f95d7a4b04536c0c5f01fad5f9744531dareed // warning: this is weird: now Lua owns a ref on this canvas, but what if they let 1682485557f95d7a4b04536c0c5f01fad5f9744531dareed // the real owner (the surface) go away, but still hold onto the canvas? 1683485557f95d7a4b04536c0c5f01fad5f9744531dareed // *really* we want to sort of ref the surface again, but have the native object 1684485557f95d7a4b04536c0c5f01fad5f9744531dareed // know that it is supposed to be treated as a canvas... 1685485557f95d7a4b04536c0c5f01fad5f9744531dareed } 1686485557f95d7a4b04536c0c5f01fad5f9744531dareed return 1; 1687485557f95d7a4b04536c0c5f01fad5f9744531dareed} 1688485557f95d7a4b04536c0c5f01fad5f9744531dareed 1689485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lsurface_newImageSnapshot(lua_State* L) { 1690485557f95d7a4b04536c0c5f01fad5f9744531dareed SkImage* image = get_ref<SkSurface>(L, 1)->newImageSnapshot(); 1691485557f95d7a4b04536c0c5f01fad5f9744531dareed if (NULL == image) { 1692485557f95d7a4b04536c0c5f01fad5f9744531dareed lua_pushnil(L); 1693485557f95d7a4b04536c0c5f01fad5f9744531dareed } else { 16949fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, image)->unref(); 1695485557f95d7a4b04536c0c5f01fad5f9744531dareed } 1696485557f95d7a4b04536c0c5f01fad5f9744531dareed return 1; 1697485557f95d7a4b04536c0c5f01fad5f9744531dareed} 1698485557f95d7a4b04536c0c5f01fad5f9744531dareed 1699485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lsurface_newSurface(lua_State* L) { 1700485557f95d7a4b04536c0c5f01fad5f9744531dareed int width = lua2int_def(L, 2, 0); 170196affcde22a675e3629b9da490bb45a0ab07fa2breed int height = lua2int_def(L, 3, 0); 1702485557f95d7a4b04536c0c5f01fad5f9744531dareed SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 1703485557f95d7a4b04536c0c5f01fad5f9744531dareed SkSurface* surface = get_ref<SkSurface>(L, 1)->newSurface(info); 1704485557f95d7a4b04536c0c5f01fad5f9744531dareed if (NULL == surface) { 1705485557f95d7a4b04536c0c5f01fad5f9744531dareed lua_pushnil(L); 1706485557f95d7a4b04536c0c5f01fad5f9744531dareed } else { 17079fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, surface)->unref(); 1708485557f95d7a4b04536c0c5f01fad5f9744531dareed } 1709485557f95d7a4b04536c0c5f01fad5f9744531dareed return 1; 1710485557f95d7a4b04536c0c5f01fad5f9744531dareed} 1711485557f95d7a4b04536c0c5f01fad5f9744531dareed 1712485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lsurface_gc(lua_State* L) { 1713485557f95d7a4b04536c0c5f01fad5f9744531dareed get_ref<SkSurface>(L, 1)->unref(); 1714485557f95d7a4b04536c0c5f01fad5f9744531dareed return 0; 1715485557f95d7a4b04536c0c5f01fad5f9744531dareed} 1716485557f95d7a4b04536c0c5f01fad5f9744531dareed 1717485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic const struct luaL_Reg gSkSurface_Methods[] = { 1718485557f95d7a4b04536c0c5f01fad5f9744531dareed { "width", lsurface_width }, 1719485557f95d7a4b04536c0c5f01fad5f9744531dareed { "height", lsurface_height }, 1720485557f95d7a4b04536c0c5f01fad5f9744531dareed { "getCanvas", lsurface_getCanvas }, 1721485557f95d7a4b04536c0c5f01fad5f9744531dareed { "newImageSnapshot", lsurface_newImageSnapshot }, 1722485557f95d7a4b04536c0c5f01fad5f9744531dareed { "newSurface", lsurface_newSurface }, 1723485557f95d7a4b04536c0c5f01fad5f9744531dareed { "__gc", lsurface_gc }, 1724485557f95d7a4b04536c0c5f01fad5f9744531dareed { NULL, NULL } 1725485557f95d7a4b04536c0c5f01fad5f9744531dareed}; 1726485557f95d7a4b04536c0c5f01fad5f9744531dareed 1727485557f95d7a4b04536c0c5f01fad5f9744531dareed/////////////////////////////////////////////////////////////////////////////// 1728485557f95d7a4b04536c0c5f01fad5f9744531dareed 172996affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lpicturerecorder_beginRecording(lua_State* L) { 173096affcde22a675e3629b9da490bb45a0ab07fa2breed const SkScalar w = lua2scalar_def(L, 2, -1); 173196affcde22a675e3629b9da490bb45a0ab07fa2breed const SkScalar h = lua2scalar_def(L, 3, -1); 173296affcde22a675e3629b9da490bb45a0ab07fa2breed if (w <= 0 || h <= 0) { 173396affcde22a675e3629b9da490bb45a0ab07fa2breed lua_pushnil(L); 173496affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 173596affcde22a675e3629b9da490bb45a0ab07fa2breed } 173696affcde22a675e3629b9da490bb45a0ab07fa2breed 173796affcde22a675e3629b9da490bb45a0ab07fa2breed SkCanvas* canvas = get_obj<SkPictureRecorder>(L, 1)->beginRecording(w, h); 173896affcde22a675e3629b9da490bb45a0ab07fa2breed if (NULL == canvas) { 173996affcde22a675e3629b9da490bb45a0ab07fa2breed lua_pushnil(L); 174096affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 174196affcde22a675e3629b9da490bb45a0ab07fa2breed } 174296affcde22a675e3629b9da490bb45a0ab07fa2breed 174396affcde22a675e3629b9da490bb45a0ab07fa2breed push_ref(L, canvas); 174496affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 174596affcde22a675e3629b9da490bb45a0ab07fa2breed} 174696affcde22a675e3629b9da490bb45a0ab07fa2breed 174796affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lpicturerecorder_getCanvas(lua_State* L) { 174896affcde22a675e3629b9da490bb45a0ab07fa2breed SkCanvas* canvas = get_obj<SkPictureRecorder>(L, 1)->getRecordingCanvas(); 174996affcde22a675e3629b9da490bb45a0ab07fa2breed if (NULL == canvas) { 175096affcde22a675e3629b9da490bb45a0ab07fa2breed lua_pushnil(L); 175196affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 175296affcde22a675e3629b9da490bb45a0ab07fa2breed } 175396affcde22a675e3629b9da490bb45a0ab07fa2breed push_ref(L, canvas); 175496affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 175596affcde22a675e3629b9da490bb45a0ab07fa2breed} 175696affcde22a675e3629b9da490bb45a0ab07fa2breed 175796affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lpicturerecorder_endRecording(lua_State* L) { 175896affcde22a675e3629b9da490bb45a0ab07fa2breed SkPicture* pic = get_obj<SkPictureRecorder>(L, 1)->endRecording(); 175996affcde22a675e3629b9da490bb45a0ab07fa2breed if (NULL == pic) { 176096affcde22a675e3629b9da490bb45a0ab07fa2breed lua_pushnil(L); 176196affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 176296affcde22a675e3629b9da490bb45a0ab07fa2breed } 17639fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, pic)->unref(); 176496affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 176596affcde22a675e3629b9da490bb45a0ab07fa2breed} 176696affcde22a675e3629b9da490bb45a0ab07fa2breed 176796affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lpicturerecorder_gc(lua_State* L) { 176896affcde22a675e3629b9da490bb45a0ab07fa2breed get_obj<SkPictureRecorder>(L, 1)->~SkPictureRecorder(); 176996affcde22a675e3629b9da490bb45a0ab07fa2breed return 0; 177096affcde22a675e3629b9da490bb45a0ab07fa2breed} 177196affcde22a675e3629b9da490bb45a0ab07fa2breed 177296affcde22a675e3629b9da490bb45a0ab07fa2breedstatic const struct luaL_Reg gSkPictureRecorder_Methods[] = { 177396affcde22a675e3629b9da490bb45a0ab07fa2breed { "beginRecording", lpicturerecorder_beginRecording }, 177496affcde22a675e3629b9da490bb45a0ab07fa2breed { "getCanvas", lpicturerecorder_getCanvas }, 177596affcde22a675e3629b9da490bb45a0ab07fa2breed { "endRecording", lpicturerecorder_endRecording }, 177696affcde22a675e3629b9da490bb45a0ab07fa2breed { "__gc", lpicturerecorder_gc }, 177796affcde22a675e3629b9da490bb45a0ab07fa2breed { NULL, NULL } 177896affcde22a675e3629b9da490bb45a0ab07fa2breed}; 177996affcde22a675e3629b9da490bb45a0ab07fa2breed 178096affcde22a675e3629b9da490bb45a0ab07fa2breed/////////////////////////////////////////////////////////////////////////////// 178196affcde22a675e3629b9da490bb45a0ab07fa2breed 178296affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lpicture_width(lua_State* L) { 178396affcde22a675e3629b9da490bb45a0ab07fa2breed lua_pushnumber(L, get_ref<SkPicture>(L, 1)->cullRect().width()); 178496affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 178596affcde22a675e3629b9da490bb45a0ab07fa2breed} 178696affcde22a675e3629b9da490bb45a0ab07fa2breed 178796affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lpicture_height(lua_State* L) { 178896affcde22a675e3629b9da490bb45a0ab07fa2breed lua_pushnumber(L, get_ref<SkPicture>(L, 1)->cullRect().height()); 178996affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 179096affcde22a675e3629b9da490bb45a0ab07fa2breed} 179196affcde22a675e3629b9da490bb45a0ab07fa2breed 179296affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lpicture_gc(lua_State* L) { 179396affcde22a675e3629b9da490bb45a0ab07fa2breed get_ref<SkPicture>(L, 1)->unref(); 179496affcde22a675e3629b9da490bb45a0ab07fa2breed return 0; 179596affcde22a675e3629b9da490bb45a0ab07fa2breed} 179696affcde22a675e3629b9da490bb45a0ab07fa2breed 179796affcde22a675e3629b9da490bb45a0ab07fa2breedstatic const struct luaL_Reg gSkPicture_Methods[] = { 179896affcde22a675e3629b9da490bb45a0ab07fa2breed { "width", lpicture_width }, 179996affcde22a675e3629b9da490bb45a0ab07fa2breed { "height", lpicture_height }, 180096affcde22a675e3629b9da490bb45a0ab07fa2breed { "__gc", lpicture_gc }, 180196affcde22a675e3629b9da490bb45a0ab07fa2breed { NULL, NULL } 180296affcde22a675e3629b9da490bb45a0ab07fa2breed}; 180396affcde22a675e3629b9da490bb45a0ab07fa2breed 180496affcde22a675e3629b9da490bb45a0ab07fa2breed/////////////////////////////////////////////////////////////////////////////// 180596affcde22a675e3629b9da490bb45a0ab07fa2breed 18061b6ab4417e0edef3b91d150e6650205f49f04d17reedstatic int ltextblob_bounds(lua_State* L) { 18071b6ab4417e0edef3b91d150e6650205f49f04d17reed SkLua(L).pushRect(get_ref<SkTextBlob>(L, 1)->bounds()); 18081b6ab4417e0edef3b91d150e6650205f49f04d17reed return 1; 18091b6ab4417e0edef3b91d150e6650205f49f04d17reed} 18101b6ab4417e0edef3b91d150e6650205f49f04d17reed 18111b6ab4417e0edef3b91d150e6650205f49f04d17reedstatic int ltextblob_gc(lua_State* L) { 18121b6ab4417e0edef3b91d150e6650205f49f04d17reed SkSafeUnref(get_ref<SkTextBlob>(L, 1)); 18131b6ab4417e0edef3b91d150e6650205f49f04d17reed return 0; 18141b6ab4417e0edef3b91d150e6650205f49f04d17reed} 18151b6ab4417e0edef3b91d150e6650205f49f04d17reed 18161b6ab4417e0edef3b91d150e6650205f49f04d17reedstatic const struct luaL_Reg gSkTextBlob_Methods[] = { 18171b6ab4417e0edef3b91d150e6650205f49f04d17reed { "bounds", ltextblob_bounds }, 18181b6ab4417e0edef3b91d150e6650205f49f04d17reed { "__gc", ltextblob_gc }, 18191b6ab4417e0edef3b91d150e6650205f49f04d17reed { NULL, NULL } 18201b6ab4417e0edef3b91d150e6650205f49f04d17reed}; 18211b6ab4417e0edef3b91d150e6650205f49f04d17reed 18221b6ab4417e0edef3b91d150e6650205f49f04d17reed/////////////////////////////////////////////////////////////////////////////// 18231b6ab4417e0edef3b91d150e6650205f49f04d17reed 182436c9c11ed97d6c6f49bfdad53537a459b9e4b41dreedstatic int ltypeface_getFamilyName(lua_State* L) { 182536c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed SkString str; 182636c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed get_ref<SkTypeface>(L, 1)->getFamilyName(&str); 182736c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed lua_pushstring(L, str.c_str()); 182836c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed return 1; 182936c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed} 183036c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed 183136c9c11ed97d6c6f49bfdad53537a459b9e4b41dreedstatic int ltypeface_getStyle(lua_State* L) { 183236c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed lua_pushnumber(L, (double)get_ref<SkTypeface>(L, 1)->style()); 183336c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed return 1; 183436c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed} 183536c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed 1836e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int ltypeface_gc(lua_State* L) { 183777887af13f1f0a2e349155f74e6b5ded6aafe179commit-bot@chromium.org SkSafeUnref(get_ref<SkTypeface>(L, 1)); 1838e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 0; 1839e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 1840e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 1841e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic const struct luaL_Reg gSkTypeface_Methods[] = { 184236c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed { "getFamilyName", ltypeface_getFamilyName }, 184336c9c11ed97d6c6f49bfdad53537a459b9e4b41dreed { "getStyle", ltypeface_getStyle }, 1844e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { "__gc", ltypeface_gc }, 1845e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org { NULL, NULL } 1846e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org}; 1847e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 1848e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 1849e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 185074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comclass AutoCallLua { 185174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.compublic: 185274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com AutoCallLua(lua_State* L, const char func[], const char verb[]) : fL(L) { 185374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_getglobal(L, func); 185474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (!lua_isfunction(L, -1)) { 185574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com int t = lua_type(L, -1); 185674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkDebugf("--- expected function %d\n", t); 185774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 18582d816ad36e806e5b1cf3c447e547829bbbe74fd1skia.committer@gmail.com 185974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_newtable(L); 186074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com setfield_string(L, "verb", verb); 186174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 18622d816ad36e806e5b1cf3c447e547829bbbe74fd1skia.committer@gmail.com 186374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com ~AutoCallLua() { 186474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com if (lua_pcall(fL, 1, 0, 0) != LUA_OK) { 186574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com SkDebugf("lua err: %s\n", lua_tostring(fL, -1)); 186674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 186774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_settop(fL, -1); 186874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } 18692d816ad36e806e5b1cf3c447e547829bbbe74fd1skia.committer@gmail.com 187074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comprivate: 187174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_State* fL; 187274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com}; 187374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 187474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#define AUTO_LUA(verb) AutoCallLua acl(fL, fFunc.c_str(), verb) 187574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 187674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com/////////////////////////////////////////////////////////////////////////////// 187774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 1878fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.orgstatic int lsk_newDocumentPDF(lua_State* L) { 1879fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org const char* file = NULL; 1880fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (lua_gettop(L) > 0 && lua_isstring(L, 1)) { 1881fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org file = lua_tolstring(L, 1, NULL); 1882fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 1883fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 1884fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org SkDocument* doc = SkDocument::CreatePDF(file); 1885fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org if (NULL == doc) { 1886fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org // do I need to push a nil on the stack and return 1? 1887fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 0; 1888fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } else { 18899fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, doc)->unref(); 1890fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org return 1; 1891fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org } 1892fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org} 1893fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org 1894468b1815d29d9bbe513f2d8eb4afc0b066715b52reedstatic int lsk_newBlurImageFilter(lua_State* L) { 1895468b1815d29d9bbe513f2d8eb4afc0b066715b52reed SkScalar sigmaX = lua2scalar_def(L, 1, 0); 1896468b1815d29d9bbe513f2d8eb4afc0b066715b52reed SkScalar sigmaY = lua2scalar_def(L, 2, 0); 1897468b1815d29d9bbe513f2d8eb4afc0b066715b52reed SkImageFilter* imf = SkBlurImageFilter::Create(sigmaX, sigmaY); 1898468b1815d29d9bbe513f2d8eb4afc0b066715b52reed if (NULL == imf) { 1899468b1815d29d9bbe513f2d8eb4afc0b066715b52reed lua_pushnil(L); 1900468b1815d29d9bbe513f2d8eb4afc0b066715b52reed } else { 19019fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, imf)->unref(); 19029fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed } 19039fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed return 1; 19049fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed} 19059fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed 19069fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reedstatic int lsk_newLinearGradient(lua_State* L) { 19079fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkScalar x0 = lua2scalar_def(L, 1, 0); 19089fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkScalar y0 = lua2scalar_def(L, 2, 0); 19099fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkColor c0 = lua2color(L, 3); 19109fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkScalar x1 = lua2scalar_def(L, 4, 0); 19119fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkScalar y1 = lua2scalar_def(L, 5, 0); 19129fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkColor c1 = lua2color(L, 6); 19139fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed 19149fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkPoint pts[] = { { x0, y0 }, { x1, y1 } }; 19159fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkColor colors[] = { c0, c1 }; 19169fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode); 19179fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed if (NULL == s) { 19189fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed lua_pushnil(L); 19199fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed } else { 19209fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, s)->unref(); 1921468b1815d29d9bbe513f2d8eb4afc0b066715b52reed } 1922468b1815d29d9bbe513f2d8eb4afc0b066715b52reed return 1; 1923468b1815d29d9bbe513f2d8eb4afc0b066715b52reed} 1924468b1815d29d9bbe513f2d8eb4afc0b066715b52reed 1925bdc49ae0d422b8fe1957af570c4f4e63272f5285reedstatic int lsk_newMatrix(lua_State* L) { 1926bdc49ae0d422b8fe1957af570c4f4e63272f5285reed push_new<SkMatrix>(L)->reset(); 1927bdc49ae0d422b8fe1957af570c4f4e63272f5285reed return 1; 1928bdc49ae0d422b8fe1957af570c4f4e63272f5285reed} 1929bdc49ae0d422b8fe1957af570c4f4e63272f5285reed 19303597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lsk_newPaint(lua_State* L) { 19313597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com push_new<SkPaint>(L); 19323597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 1; 19333597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 19343597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 19353597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lsk_newPath(lua_State* L) { 19363597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com push_new<SkPath>(L); 19373597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 1; 19383597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 19393597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 194096affcde22a675e3629b9da490bb45a0ab07fa2breedstatic int lsk_newPictureRecorder(lua_State* L) { 194196affcde22a675e3629b9da490bb45a0ab07fa2breed push_new<SkPictureRecorder>(L); 194296affcde22a675e3629b9da490bb45a0ab07fa2breed return 1; 194396affcde22a675e3629b9da490bb45a0ab07fa2breed} 194496affcde22a675e3629b9da490bb45a0ab07fa2breed 19453597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic int lsk_newRRect(lua_State* L) { 1946bdc49ae0d422b8fe1957af570c4f4e63272f5285reed push_new<SkRRect>(L)->setEmpty(); 19473597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com return 1; 19483597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 19493597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 19501b6ab4417e0edef3b91d150e6650205f49f04d17reed#include "SkTextBox.h" 19511b6ab4417e0edef3b91d150e6650205f49f04d17reed// Sk.newTextBlob(text, rect, paint) 19521b6ab4417e0edef3b91d150e6650205f49f04d17reedstatic int lsk_newTextBlob(lua_State* L) { 19531b6ab4417e0edef3b91d150e6650205f49f04d17reed const char* text = lua_tolstring(L, 1, NULL); 19541b6ab4417e0edef3b91d150e6650205f49f04d17reed SkRect bounds; 19551b6ab4417e0edef3b91d150e6650205f49f04d17reed lua2rect(L, 2, &bounds); 19561b6ab4417e0edef3b91d150e6650205f49f04d17reed const SkPaint& paint = *get_obj<SkPaint>(L, 3); 19571b6ab4417e0edef3b91d150e6650205f49f04d17reed 19581b6ab4417e0edef3b91d150e6650205f49f04d17reed SkTextBox box; 19591b6ab4417e0edef3b91d150e6650205f49f04d17reed box.setMode(SkTextBox::kLineBreak_Mode); 19601b6ab4417e0edef3b91d150e6650205f49f04d17reed box.setBox(bounds); 19611b6ab4417e0edef3b91d150e6650205f49f04d17reed box.setText(text, strlen(text), paint); 19621b6ab4417e0edef3b91d150e6650205f49f04d17reed 19631b6ab4417e0edef3b91d150e6650205f49f04d17reed SkScalar newBottom; 19641b6ab4417e0edef3b91d150e6650205f49f04d17reed SkAutoTUnref<SkTextBlob> blob(box.snapshotTextBlob(&newBottom)); 19651b6ab4417e0edef3b91d150e6650205f49f04d17reed push_ref<SkTextBlob>(L, blob); 19661b6ab4417e0edef3b91d150e6650205f49f04d17reed SkLua(L).pushScalar(newBottom); 19671b6ab4417e0edef3b91d150e6650205f49f04d17reed return 2; 19681b6ab4417e0edef3b91d150e6650205f49f04d17reed} 19691b6ab4417e0edef3b91d150e6650205f49f04d17reed 1970e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.orgstatic int lsk_newTypeface(lua_State* L) { 1971e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org const char* name = NULL; 1972e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org int style = SkTypeface::kNormal; 19736319367bdcbf5e5050632ab97973f5035d0dd8faskia.committer@gmail.com 1974e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org int count = lua_gettop(L); 1975e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (count > 0 && lua_isstring(L, 1)) { 1976e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org name = lua_tolstring(L, 1, NULL); 1977e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (count > 1 && lua_isnumber(L, 2)) { 1978e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org style = lua_tointegerx(L, 2, NULL) & SkTypeface::kBoldItalic; 1979e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 1980e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 1981e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org 1982e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org SkTypeface* face = SkTypeface::CreateFromName(name, 1983e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org (SkTypeface::Style)style); 1984e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org// SkDebugf("---- name <%s> style=%d, face=%p ref=%d\n", name, style, face, face->getRefCnt()); 1985e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org if (NULL == face) { 1986e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org face = SkTypeface::RefDefault(); 1987e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org } 19889fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, face)->unref(); 1989e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org return 1; 1990e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org} 19913597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 1992485557f95d7a4b04536c0c5f01fad5f9744531dareedstatic int lsk_newRasterSurface(lua_State* L) { 19937b8646669f5b1e2daddf53764bcde62d743ff076reed int width = lua2int_def(L, 1, 0); 1994485557f95d7a4b04536c0c5f01fad5f9744531dareed int height = lua2int_def(L, 2, 0); 1995485557f95d7a4b04536c0c5f01fad5f9744531dareed SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 1996485557f95d7a4b04536c0c5f01fad5f9744531dareed SkSurface* surface = SkSurface::NewRaster(info); 1997485557f95d7a4b04536c0c5f01fad5f9744531dareed if (NULL == surface) { 1998485557f95d7a4b04536c0c5f01fad5f9744531dareed lua_pushnil(L); 1999485557f95d7a4b04536c0c5f01fad5f9744531dareed } else { 20009fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, surface)->unref(); 2001485557f95d7a4b04536c0c5f01fad5f9744531dareed } 2002485557f95d7a4b04536c0c5f01fad5f9744531dareed return 1; 2003485557f95d7a4b04536c0c5f01fad5f9744531dareed} 2004485557f95d7a4b04536c0c5f01fad5f9744531dareed 2005792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.orgstatic int lsk_loadImage(lua_State* L) { 2006792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (lua_gettop(L) > 0 && lua_isstring(L, 1)) { 2007792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org const char* name = lua_tolstring(L, 1, NULL); 2008792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org SkAutoDataUnref data(SkData::NewFromFileName(name)); 2009792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (data.get()) { 20105965c8ae4ee960275da4bc40189bdba85aab8b5ereed SkImage* image = SkImage::NewFromData(data); 2011792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org if (image) { 20129fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed push_ref(L, image)->unref(); 2013792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 1; 2014792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 2015792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 2016792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org } 2017792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org return 0; 2018792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org} 2019792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org 20203597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.comstatic void register_Sk(lua_State* L) { 20213597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_newtable(L); 20223597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_pushvalue(L, -1); 20233597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_setglobal(L, "Sk"); 20243597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com // the Sk table is still on top 20253597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 2026fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org setfield_function(L, "newDocumentPDF", lsk_newDocumentPDF); 2027792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org setfield_function(L, "loadImage", lsk_loadImage); 2028468b1815d29d9bbe513f2d8eb4afc0b066715b52reed setfield_function(L, "newBlurImageFilter", lsk_newBlurImageFilter); 20299fbc3f31c0c7095f4f25ad3d2d17731bb63c0817reed setfield_function(L, "newLinearGradient", lsk_newLinearGradient); 2030bdc49ae0d422b8fe1957af570c4f4e63272f5285reed setfield_function(L, "newMatrix", lsk_newMatrix); 20313597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com setfield_function(L, "newPaint", lsk_newPaint); 20323597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com setfield_function(L, "newPath", lsk_newPath); 203396affcde22a675e3629b9da490bb45a0ab07fa2breed setfield_function(L, "newPictureRecorder", lsk_newPictureRecorder); 20343597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com setfield_function(L, "newRRect", lsk_newRRect); 2035485557f95d7a4b04536c0c5f01fad5f9744531dareed setfield_function(L, "newRasterSurface", lsk_newRasterSurface); 20361b6ab4417e0edef3b91d150e6650205f49f04d17reed setfield_function(L, "newTextBlob", lsk_newTextBlob); 2037e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org setfield_function(L, "newTypeface", lsk_newTypeface); 20383597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com lua_pop(L, 1); // pop off the Sk table 20393597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com} 20403597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com 204174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#define REG_CLASS(L, C) \ 204274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com do { \ 20433597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com luaL_newmetatable(L, get_mtname<C>()); \ 204474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pushvalue(L, -1); \ 204574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_setfield(L, -2, "__index"); \ 204674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com luaL_setfuncs(L, g##C##_Methods, 0); \ 204774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com lua_pop(L, 1); /* pop off the meta-table */ \ 204874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com } while (0) 204974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com 205074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comvoid SkLua::Load(lua_State* L) { 20513597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com register_Sk(L); 205274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com REG_CLASS(L, SkCanvas); 2053fb858245216dafee4de731fce4f0fa58c746d3e9mike@reedtribe.org REG_CLASS(L, SkDocument); 2054792bbd14c63f217f2de0e6b2f8df99acb1928eeamike@reedtribe.org REG_CLASS(L, SkImage); 2055468b1815d29d9bbe513f2d8eb4afc0b066715b52reed REG_CLASS(L, SkImageFilter); 20561b6ab4417e0edef3b91d150e6650205f49f04d17reed REG_CLASS(L, SkMatrix); 205774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com REG_CLASS(L, SkPaint); 20581301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org REG_CLASS(L, SkPath); 20591301bf3abfe355f9aadd53d5dbf04926013231bacommit-bot@chromium.org REG_CLASS(L, SkPathEffect); 206096affcde22a675e3629b9da490bb45a0ab07fa2breed REG_CLASS(L, SkPicture); 206196affcde22a675e3629b9da490bb45a0ab07fa2breed REG_CLASS(L, SkPictureRecorder); 206274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com REG_CLASS(L, SkRRect); 20635fdc983f58098e5c9fbdbedc7719f87e5efa4d31reed@google.com REG_CLASS(L, SkShader); 2064485557f95d7a4b04536c0c5f01fad5f9744531dareed REG_CLASS(L, SkSurface); 20651b6ab4417e0edef3b91d150e6650205f49f04d17reed REG_CLASS(L, SkTextBlob); 2066e6469f10c8f9340032797316fd06ee2f109255ffmike@reedtribe.org REG_CLASS(L, SkTypeface); 206774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com} 206828c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com 20697bce9988af2e3dfc384ebc8655d0eb3d08fad4d2reed@google.comextern "C" int luaopen_skia(lua_State* L); 207028c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.comextern "C" int luaopen_skia(lua_State* L) { 207128c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com SkLua::Load(L); 207228c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com return 0; 207328c27c8b795db712c76d79b8cd62b3626ac148eczachr@google.com} 2074