| Index: src/utils/SkLua.cpp
|
| diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
|
| index 4fdb71404d810318a97fbe580b1eb5adcaac6476..12e2dd8ddfeb9042c4038952c341d98465f7df20 100644
|
| --- a/src/utils/SkLua.cpp
|
| +++ b/src/utils/SkLua.cpp
|
| @@ -556,6 +556,15 @@ static int lcanvas_drawText(lua_State* L) {
|
| return 0;
|
| }
|
|
|
| +static int lcanvas_drawTextBlob(lua_State* L) {
|
| + const SkTextBlob* blob = get_ref<SkTextBlob>(L, 2);
|
| + SkScalar x = lua2scalar(L, 3);
|
| + SkScalar y = lua2scalar(L, 4);
|
| + const SkPaint& paint = *get_obj<SkPaint>(L, 5);
|
| + get_ref<SkCanvas>(L, 1)->drawTextBlob(blob, x, y, paint);
|
| + return 0;
|
| +}
|
| +
|
| static int lcanvas_getSaveCount(lua_State* L) {
|
| lua_pushnumber(L, get_ref<SkCanvas>(L, 1)->getSaveCount());
|
| return 1;
|
| @@ -681,6 +690,7 @@ const struct luaL_Reg gSkCanvas_Methods[] = {
|
| { "drawPath", lcanvas_drawPath },
|
| { "drawPicture", lcanvas_drawPicture },
|
| { "drawText", lcanvas_drawText },
|
| + { "drawTextBlob", lcanvas_drawTextBlob },
|
| { "getSaveCount", lcanvas_getSaveCount },
|
| { "getTotalMatrix", lcanvas_getTotalMatrix },
|
| { "getClipStack", lcanvas_getClipStack },
|
| @@ -1697,6 +1707,24 @@ static const struct luaL_Reg gSkPicture_Methods[] = {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +static int ltextblob_bounds(lua_State* L) {
|
| + SkLua(L).pushRect(get_ref<SkTextBlob>(L, 1)->bounds());
|
| + return 1;
|
| +}
|
| +
|
| +static int ltextblob_gc(lua_State* L) {
|
| + SkSafeUnref(get_ref<SkTextBlob>(L, 1));
|
| + return 0;
|
| +}
|
| +
|
| +static const struct luaL_Reg gSkTextBlob_Methods[] = {
|
| + { "bounds", ltextblob_bounds },
|
| + { "__gc", ltextblob_gc },
|
| + { NULL, NULL }
|
| +};
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| static int ltypeface_gc(lua_State* L) {
|
| SkSafeUnref(get_ref<SkTypeface>(L, 1));
|
| return 0;
|
| @@ -1809,6 +1837,26 @@ static int lsk_newRRect(lua_State* L) {
|
| return 1;
|
| }
|
|
|
| +#include "SkTextBox.h"
|
| +// Sk.newTextBlob(text, rect, paint)
|
| +static int lsk_newTextBlob(lua_State* L) {
|
| + const char* text = lua_tolstring(L, 1, NULL);
|
| + SkRect bounds;
|
| + lua2rect(L, 2, &bounds);
|
| + const SkPaint& paint = *get_obj<SkPaint>(L, 3);
|
| +
|
| + SkTextBox box;
|
| + box.setMode(SkTextBox::kLineBreak_Mode);
|
| + box.setBox(bounds);
|
| + box.setText(text, strlen(text), paint);
|
| +
|
| + SkScalar newBottom;
|
| + SkAutoTUnref<SkTextBlob> blob(box.snapshotTextBlob(&newBottom));
|
| + push_ref<SkTextBlob>(L, blob);
|
| + SkLua(L).pushScalar(newBottom);
|
| + return 2;
|
| +}
|
| +
|
| static int lsk_newTypeface(lua_State* L) {
|
| const char* name = NULL;
|
| int style = SkTypeface::kNormal;
|
| @@ -1877,6 +1925,7 @@ static void register_Sk(lua_State* L) {
|
| setfield_function(L, "newPictureRecorder", lsk_newPictureRecorder);
|
| setfield_function(L, "newRRect", lsk_newRRect);
|
| setfield_function(L, "newRasterSurface", lsk_newRasterSurface);
|
| + setfield_function(L, "newTextBlob", lsk_newTextBlob);
|
| setfield_function(L, "newTypeface", lsk_newTypeface);
|
| lua_pop(L, 1); // pop off the Sk table
|
| }
|
| @@ -1896,6 +1945,7 @@ void SkLua::Load(lua_State* L) {
|
| REG_CLASS(L, SkDocument);
|
| REG_CLASS(L, SkImage);
|
| REG_CLASS(L, SkImageFilter);
|
| + REG_CLASS(L, SkMatrix);
|
| REG_CLASS(L, SkPaint);
|
| REG_CLASS(L, SkPath);
|
| REG_CLASS(L, SkPathEffect);
|
| @@ -1904,8 +1954,8 @@ void SkLua::Load(lua_State* L) {
|
| REG_CLASS(L, SkRRect);
|
| REG_CLASS(L, SkShader);
|
| REG_CLASS(L, SkSurface);
|
| + REG_CLASS(L, SkTextBlob);
|
| REG_CLASS(L, SkTypeface);
|
| - REG_CLASS(L, SkMatrix);
|
| }
|
|
|
| extern "C" int luaopen_skia(lua_State* L);
|
|
|