Index: src/utils/SkLua.cpp |
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp |
index 3dbcf8e629c91791628094d57a7c383dea2a002d..827abc64f83de1d8d2c5ac868f2fc5df127285ff 100644 |
--- a/src/utils/SkLua.cpp |
+++ b/src/utils/SkLua.cpp |
@@ -19,6 +19,7 @@ |
#include "SkMatrix.h" |
#include "SkPaint.h" |
#include "SkPath.h" |
+#include "SkPictureRecorder.h" |
#include "SkPixelRef.h" |
#include "SkRRect.h" |
#include "SkString.h" |
@@ -47,6 +48,8 @@ DEF_MTNAME(SkRRect) |
DEF_MTNAME(SkPath) |
DEF_MTNAME(SkPaint) |
DEF_MTNAME(SkPathEffect) |
+DEF_MTNAME(SkPicture) |
+DEF_MTNAME(SkPictureRecorder) |
DEF_MTNAME(SkShader) |
DEF_MTNAME(SkSurface) |
DEF_MTNAME(SkTextBlob) |
@@ -509,6 +512,22 @@ static int lcanvas_drawPath(lua_State* L) { |
return 0; |
} |
+// drawPicture(pic, x, y, paint) |
+static int lcanvas_drawPicture(lua_State* L) { |
+ SkCanvas* canvas = get_ref<SkCanvas>(L, 1); |
+ SkPicture* picture = get_ref<SkPicture>(L, 2); |
+ SkScalar x = lua2scalar_def(L, 3, 0); |
+ SkScalar y = lua2scalar_def(L, 4, 0); |
+ SkMatrix matrix, *matrixPtr = NULL; |
+ if (x || y) { |
+ matrix.setTranslate(x, y); |
+ matrixPtr = &matrix; |
+ } |
+ SkPaint paint; |
+ canvas->drawPicture(picture, matrixPtr, lua2OptionalPaint(L, 5, &paint)); |
+ return 0; |
+} |
+ |
static int lcanvas_drawText(lua_State* L) { |
if (lua_gettop(L) < 5) { |
return 0; |
@@ -636,6 +655,7 @@ const struct luaL_Reg gSkCanvas_Methods[] = { |
{ "drawImage", lcanvas_drawImage }, |
{ "drawImageRect", lcanvas_drawImageRect }, |
{ "drawPath", lcanvas_drawPath }, |
+ { "drawPicture", lcanvas_drawPicture }, |
{ "drawText", lcanvas_drawText }, |
{ "getSaveCount", lcanvas_getSaveCount }, |
{ "getTotalMatrix", lcanvas_getTotalMatrix }, |
@@ -1466,7 +1486,7 @@ static int lsurface_newImageSnapshot(lua_State* L) { |
static int lsurface_newSurface(lua_State* L) { |
int width = lua2int_def(L, 2, 0); |
- int height = lua2int_def(L, 2, 0); |
+ int height = lua2int_def(L, 3, 0); |
SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); |
SkSurface* surface = get_ref<SkSurface>(L, 1)->newSurface(info); |
if (NULL == surface) { |
@@ -1495,6 +1515,84 @@ static const struct luaL_Reg gSkSurface_Methods[] = { |
/////////////////////////////////////////////////////////////////////////////// |
+static int lpicturerecorder_beginRecording(lua_State* L) { |
+ const SkScalar w = lua2scalar_def(L, 2, -1); |
+ const SkScalar h = lua2scalar_def(L, 3, -1); |
+ if (w <= 0 || h <= 0) { |
+ lua_pushnil(L); |
+ return 1; |
+ } |
+ |
+ SkCanvas* canvas = get_obj<SkPictureRecorder>(L, 1)->beginRecording(w, h); |
+ if (NULL == canvas) { |
+ lua_pushnil(L); |
+ return 1; |
+ } |
+ |
+ push_ref(L, canvas); |
+ return 1; |
+} |
+ |
+static int lpicturerecorder_getCanvas(lua_State* L) { |
+ SkCanvas* canvas = get_obj<SkPictureRecorder>(L, 1)->getRecordingCanvas(); |
+ if (NULL == canvas) { |
+ lua_pushnil(L); |
+ return 1; |
+ } |
+ push_ref(L, canvas); |
+ return 1; |
+} |
+ |
+static int lpicturerecorder_endRecording(lua_State* L) { |
+ SkPicture* pic = get_obj<SkPictureRecorder>(L, 1)->endRecording(); |
+ if (NULL == pic) { |
+ lua_pushnil(L); |
+ return 1; |
+ } |
+ push_ref(L, pic); |
+ pic->unref(); // lua is the only owner, so we unref ours |
+ return 1; |
+} |
+ |
+static int lpicturerecorder_gc(lua_State* L) { |
+ get_obj<SkPictureRecorder>(L, 1)->~SkPictureRecorder(); |
+ return 0; |
+} |
+ |
+static const struct luaL_Reg gSkPictureRecorder_Methods[] = { |
+ { "beginRecording", lpicturerecorder_beginRecording }, |
+ { "getCanvas", lpicturerecorder_getCanvas }, |
+ { "endRecording", lpicturerecorder_endRecording }, |
+ { "__gc", lpicturerecorder_gc }, |
+ { NULL, NULL } |
+}; |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
robertphillips
2014/10/13 18:31:59
float ?
reed1
2014/10/13 18:34:37
the lua function returns the number of arguments i
|
+static int lpicture_width(lua_State* L) { |
+ lua_pushnumber(L, get_ref<SkPicture>(L, 1)->cullRect().width()); |
+ return 1; |
+} |
+ |
robertphillips
2014/10/13 18:31:59
float ?
|
+static int lpicture_height(lua_State* L) { |
+ lua_pushnumber(L, get_ref<SkPicture>(L, 1)->cullRect().height()); |
+ return 1; |
+} |
+ |
+static int lpicture_gc(lua_State* L) { |
+ get_ref<SkPicture>(L, 1)->unref(); |
+ return 0; |
+} |
+ |
+static const struct luaL_Reg gSkPicture_Methods[] = { |
+ { "width", lpicture_width }, |
+ { "height", lpicture_height }, |
+ { "__gc", lpicture_gc }, |
+ { NULL, NULL } |
+}; |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
static int ltypeface_gc(lua_State* L) { |
SkSafeUnref(get_ref<SkTypeface>(L, 1)); |
return 0; |
@@ -1562,6 +1660,11 @@ static int lsk_newPath(lua_State* L) { |
return 1; |
} |
+static int lsk_newPictureRecorder(lua_State* L) { |
+ push_new<SkPictureRecorder>(L); |
+ return 1; |
+} |
+ |
static int lsk_newRRect(lua_State* L) { |
SkRRect* rr = push_new<SkRRect>(L); |
rr->setEmpty(); |
@@ -1633,6 +1736,7 @@ static void register_Sk(lua_State* L) { |
setfield_function(L, "loadImage", lsk_loadImage); |
setfield_function(L, "newPaint", lsk_newPaint); |
setfield_function(L, "newPath", lsk_newPath); |
+ setfield_function(L, "newPictureRecorder", lsk_newPictureRecorder); |
setfield_function(L, "newRRect", lsk_newRRect); |
setfield_function(L, "newRasterSurface", lsk_newRasterSurface); |
setfield_function(L, "newTypeface", lsk_newTypeface); |
@@ -1656,6 +1760,8 @@ void SkLua::Load(lua_State* L) { |
REG_CLASS(L, SkPaint); |
REG_CLASS(L, SkPath); |
REG_CLASS(L, SkPathEffect); |
+ REG_CLASS(L, SkPicture); |
+ REG_CLASS(L, SkPictureRecorder); |
REG_CLASS(L, SkRRect); |
REG_CLASS(L, SkShader); |
REG_CLASS(L, SkSurface); |