Index: src/utils/SkLua.cpp |
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp |
index 827abc64f83de1d8d2c5ac868f2fc5df127285ff..dd79a34b909a8328cb81f105151a2889805221cd 100644 |
--- a/src/utils/SkLua.cpp |
+++ b/src/utils/SkLua.cpp |
@@ -627,6 +627,11 @@ static int lcanvas_rotate(lua_State* L) { |
return 0; |
} |
+static int lcanvas_concat(lua_State* L) { |
+ get_ref<SkCanvas>(L, 1)->concat(*get_obj<SkMatrix>(L, 2)); |
+ return 0; |
+} |
+ |
static int lcanvas_newSurface(lua_State* L) { |
int width = lua2int_def(L, 2, 0); |
int height = lua2int_def(L, 2, 0); |
@@ -668,6 +673,7 @@ const struct luaL_Reg gSkCanvas_Methods[] = { |
{ "scale", lcanvas_scale }, |
{ "translate", lcanvas_translate }, |
{ "rotate", lcanvas_rotate }, |
+ { "concat", lcanvas_concat }, |
{ "newSurface", lcanvas_newSurface }, |
@@ -1182,12 +1188,44 @@ static int lmatrix_getTranslateY(lua_State* L) { |
return 1; |
} |
robertphillips
2014/10/14 16:33:14
Can we define constants in Lua and pass an int rat
|
+static int lmatrix_setRectToRect(lua_State* L) { |
+ SkMatrix* matrix = get_obj<SkMatrix>(L, 1); |
+ SkRect srcR, dstR; |
+ lua2rect(L, 2, &srcR); |
+ lua2rect(L, 3, &dstR); |
+ const char* scaleToFitStr = lua_tostring(L, 4); |
+ SkMatrix::ScaleToFit scaleToFit = SkMatrix::kFill_ScaleToFit; |
+ |
+ if (scaleToFitStr) { |
+ const struct { |
+ const char* fName; |
+ SkMatrix::ScaleToFit fScaleToFit; |
+ } rec[] = { |
+ { "fill", SkMatrix::kFill_ScaleToFit }, |
+ { "start", SkMatrix::kStart_ScaleToFit }, |
+ { "center", SkMatrix::kCenter_ScaleToFit }, |
+ { "end", SkMatrix::kEnd_ScaleToFit }, |
+ }; |
+ |
+ for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { |
+ if (strcmp(rec[i].fName, scaleToFitStr) == 0) { |
+ scaleToFit = rec[i].fScaleToFit; |
+ break; |
+ } |
+ } |
+ } |
+ |
+ matrix->setRectToRect(srcR, dstR, scaleToFit); |
+ return 0; |
+} |
+ |
static const struct luaL_Reg gSkMatrix_Methods[] = { |
{ "getType", lmatrix_getType }, |
{ "getScaleX", lmatrix_getScaleX }, |
{ "getScaleY", lmatrix_getScaleY }, |
{ "getTranslateX", lmatrix_getTranslateX }, |
{ "getTranslateY", lmatrix_getTranslateY }, |
+ { "setRectToRect", lmatrix_setRectToRect }, |
{ NULL, NULL } |
}; |
@@ -1650,6 +1688,11 @@ static int lsk_newDocumentPDF(lua_State* L) { |
} |
} |
+static int lsk_newMatrix(lua_State* L) { |
+ push_new<SkMatrix>(L)->reset(); |
+ return 1; |
+} |
+ |
static int lsk_newPaint(lua_State* L) { |
push_new<SkPaint>(L); |
return 1; |
@@ -1666,8 +1709,7 @@ static int lsk_newPictureRecorder(lua_State* L) { |
} |
static int lsk_newRRect(lua_State* L) { |
- SkRRect* rr = push_new<SkRRect>(L); |
- rr->setEmpty(); |
+ push_new<SkRRect>(L)->setEmpty(); |
return 1; |
} |
@@ -1734,6 +1776,7 @@ static void register_Sk(lua_State* L) { |
setfield_function(L, "newDocumentPDF", lsk_newDocumentPDF); |
setfield_function(L, "loadImage", lsk_loadImage); |
+ setfield_function(L, "newMatrix", lsk_newMatrix); |
setfield_function(L, "newPaint", lsk_newPaint); |
setfield_function(L, "newPath", lsk_newPath); |
setfield_function(L, "newPictureRecorder", lsk_newPictureRecorder); |