add canvas scale and rotate
authormike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 13 Jun 2013 01:28:56 +0000 (01:28 +0000)
committermike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 13 Jun 2013 01:28:56 +0000 (01:28 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@9564 2bbb7eff-a529-9590-31e7-b0007b416f81

src/utils/SkLua.cpp

index 6754746..aabb236 100644 (file)
@@ -228,6 +228,14 @@ static SkScalar lua2scalar(lua_State* L, int index) {
     return SkLuaToScalar(lua_tonumber(L, index));
 }
 
+static SkScalar lua2scalar_def(lua_State* L, int index, SkScalar defaultValue) {
+    if (lua_isnumber(L, index)) {
+        return SkLuaToScalar(lua_tonumber(L, index));
+    } else {
+        return defaultValue;
+    }
+}
+
 static SkScalar getfield_scalar(lua_State* L, int index, const char key[]) {
     SkASSERT(lua_istable(L, index));
     lua_pushstring(L, key);
@@ -365,8 +373,23 @@ static int lcanvas_restore(lua_State* L) {
     return 0;
 }
 
+static int lcanvas_scale(lua_State* L) {
+    SkScalar sx = lua2scalar_def(L, 2, 1);
+    SkScalar sy = lua2scalar_def(L, 3, sx);
+    get_ref<SkCanvas>(L, 1)->scale(sx, sy);
+    return 0;
+}
+
 static int lcanvas_translate(lua_State* L) {
-    get_ref<SkCanvas>(L, 1)->translate(lua2scalar(L, 2), lua2scalar(L, 3));
+    SkScalar tx = lua2scalar_def(L, 2, 0);
+    SkScalar ty = lua2scalar_def(L, 3, 0);
+    get_ref<SkCanvas>(L, 1)->translate(tx, ty);
+    return 0;
+}
+
+static int lcanvas_rotate(lua_State* L) {
+    SkScalar degrees = lua2scalar_def(L, 2, 0);
+    get_ref<SkCanvas>(L, 1)->rotate(degrees);
     return 0;
 }
 
@@ -387,7 +410,9 @@ static const struct luaL_Reg gSkCanvas_Methods[] = {
     { "getTotalMatrix", lcanvas_getTotalMatrix },
     { "save", lcanvas_save },
     { "restore", lcanvas_restore },
+    { "scale", lcanvas_scale },
     { "translate", lcanvas_translate },
+    { "rotate", lcanvas_rotate },
     { "__gc", lcanvas_gc },
     { NULL, NULL }
 };