From d8f5733cca135168f0c197d24258253a3e6b6d08 Mon Sep 17 00:00:00 2001
From: scuri <scuri>
Date: Wed, 2 Dec 2009 17:28:14 +0000
Subject: New: functions  wdCanvasSetTransform, wdCanvasGetTransform,
 wdCanvasTranslate and wdCanvasScale, to better control the WD transformation.

---
 src/lua5/cdlua5_canvas.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

(limited to 'src/lua5')

diff --git a/src/lua5/cdlua5_canvas.c b/src/lua5/cdlua5_canvas.c
index 7fb5402..f3b929d 100644
--- a/src/lua5/cdlua5_canvas.c
+++ b/src/lua5/cdlua5_canvas.c
@@ -470,6 +470,56 @@ static int cdlua5_ftransformpoint(lua_State *L)
 * World Coordinates                                                         *
 \***************************************************************************/
 
+/***************************************************************************\
+* wd.GetTransform() -> (sx, sy, tx, ty: number)                        *
+\***************************************************************************/
+static int wdlua5_gettransform(lua_State *L)
+{
+  double sx, sy, tx, ty;
+
+  wdCanvasGetTransform(cdlua_checkcanvas(L, 1), &sx, &sy, &tx, &ty);
+  lua_pushnumber(L, sx);
+  lua_pushnumber(L, sy);
+  lua_pushnumber(L, tx);
+  lua_pushnumber(L, ty);
+  return 4;
+}
+
+/***************************************************************************\
+* wd.SetTransform(sx, sy, tx, ty: number)                                 *
+\***************************************************************************/
+static int wdlua5_settransform(lua_State *L)
+{
+  double sx = luaL_checknumber(L, 2);
+  double sy = luaL_checknumber(L, 3);
+  double tx = luaL_checknumber(L, 4);
+  double ty = luaL_checknumber(L, 5);
+  wdCanvasSetTransform(cdlua_checkcanvas(L, 1), sx, sy, tx, ty);
+  return 0;
+}
+
+/***************************************************************************\
+* wd.Translate(tx, ty: number)                                 *
+\***************************************************************************/
+static int wdlua5_translate(lua_State *L)
+{
+  double tx = luaL_checknumber(L, 2);
+  double ty = luaL_checknumber(L, 3);
+  wdCanvasTranslate(cdlua_checkcanvas(L, 1), tx, ty);
+  return 0;
+}
+
+/***************************************************************************\
+* wd.Scale(sx, sy: number)                                 *
+\***************************************************************************/
+static int wdlua5_scale(lua_State *L)
+{
+  double sx = luaL_checknumber(L, 2);
+  double sy = luaL_checknumber(L, 3);
+  wdCanvasScale(cdlua_checkcanvas(L, 1), sx, sy);
+  return 0;
+}
+
 /***************************************************************************\
 * wd.Window(xmin, xmax, ymin, ymax: number)                                 *
 \***************************************************************************/
@@ -2224,6 +2274,10 @@ static const struct luaL_reg cdlib_canvas_meta[] = {
   {"wGetViewport"   , wdlua5_getviewport},  
   {"wWorld2Canvas"  , wdlua5_world2canvas},
   {"wCanvas2World"  , wdlua5_canvas2world},
+  {"wGetTransform"  , wdlua5_gettransform},
+  {"wSetTransform"  , wdlua5_settransform},
+  {"wScale"         , wdlua5_scale},
+  {"wTranslate"     , wdlua5_translate},
 
   {"wHardcopy"      , wdlua5_hardcopy},
 
-- 
cgit v1.2.3