Export more cairo functions to Lua.

Also rewrite the wrappers to be shorter.
This commit is contained in:
Přemysl Eric Janouch 2011-02-11 18:07:49 +01:00
parent d96acedcdb
commit 2c5f2f5b3f
1 changed files with 63 additions and 61 deletions

View File

@ -94,6 +94,9 @@ static int ld_lua_cairo_save (lua_State *L);
static int ld_lua_cairo_restore (lua_State *L); static int ld_lua_cairo_restore (lua_State *L);
static int ld_lua_cairo_get_line_width (lua_State *L); static int ld_lua_cairo_get_line_width (lua_State *L);
static int ld_lua_cairo_set_line_width (lua_State *L); static int ld_lua_cairo_set_line_width (lua_State *L);
static int ld_lua_cairo_translate (lua_State *L);
static int ld_lua_cairo_scale (lua_State *L);
static int ld_lua_cairo_rotate (lua_State *L);
static int ld_lua_cairo_move_to (lua_State *L); static int ld_lua_cairo_move_to (lua_State *L);
static int ld_lua_cairo_line_to (lua_State *L); static int ld_lua_cairo_line_to (lua_State *L);
static int ld_lua_cairo_curve_to (lua_State *L); static int ld_lua_cairo_curve_to (lua_State *L);
@ -122,6 +125,9 @@ static luaL_Reg ld_lua_cairo_table[] =
{"restore", ld_lua_cairo_restore}, {"restore", ld_lua_cairo_restore},
{"get_line_width", ld_lua_cairo_get_line_width}, {"get_line_width", ld_lua_cairo_get_line_width},
{"set_line_width", ld_lua_cairo_set_line_width}, {"set_line_width", ld_lua_cairo_set_line_width},
{"translate", ld_lua_cairo_translate},
{"scale", ld_lua_cairo_scale},
{"rotate", ld_lua_cairo_rotate},
{"move_to", ld_lua_cairo_move_to}, {"move_to", ld_lua_cairo_move_to},
{"line_to", ld_lua_cairo_line_to}, {"line_to", ld_lua_cairo_line_to},
{"curve_to", ld_lua_cairo_curve_to}, {"curve_to", ld_lua_cairo_curve_to},
@ -649,15 +655,21 @@ get_cairo_scale (cairo_t *cr)
return dx; return dx;
} }
#define LD_LUA_CAIRO_TRIVIAL(name) \ #define LD_LUA_CAIRO_BEGIN(name) \
static int \ static int \
ld_lua_cairo_ ## name (lua_State *L) \ ld_lua_cairo_ ## name (lua_State *L) \
{ \ { \
LdLuaDrawData *data; \ LdLuaDrawData *data; \
#define LD_LUA_CAIRO_END(n_values) \
return (n_values); \
}
#define LD_LUA_CAIRO_TRIVIAL(name) \
LD_LUA_CAIRO_BEGIN (name) \
data = lua_touserdata (L, lua_upvalueindex (1)); \ data = lua_touserdata (L, lua_upvalueindex (1)); \
cairo_ ## name (data->cr); \ cairo_ ## name (data->cr); \
return 0; \ LD_LUA_CAIRO_END (0)
}
LD_LUA_CAIRO_TRIVIAL (new_path) LD_LUA_CAIRO_TRIVIAL (new_path)
LD_LUA_CAIRO_TRIVIAL (new_sub_path) LD_LUA_CAIRO_TRIVIAL (new_sub_path)
@ -670,60 +682,67 @@ LD_LUA_CAIRO_TRIVIAL (fill_preserve)
LD_LUA_CAIRO_TRIVIAL (clip) LD_LUA_CAIRO_TRIVIAL (clip)
LD_LUA_CAIRO_TRIVIAL (clip_preserve) LD_LUA_CAIRO_TRIVIAL (clip_preserve)
static int LD_LUA_CAIRO_BEGIN (save)
ld_lua_cairo_save (lua_State *L)
{
LdLuaDrawData *data;
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
if (data->save_count + 1) if (data->save_count + 1)
{ {
data->save_count++; data->save_count++;
cairo_save (data->cr); cairo_save (data->cr);
} }
return 0; LD_LUA_CAIRO_END (0)
}
static int
ld_lua_cairo_restore (lua_State *L)
{
LdLuaDrawData *data;
LD_LUA_CAIRO_BEGIN (restore)
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
if (data->save_count) if (data->save_count)
{ {
data->save_count--; data->save_count--;
cairo_restore (data->cr); cairo_restore (data->cr);
} }
return 0; LD_LUA_CAIRO_END (0)
}
static int
ld_lua_cairo_get_line_width (lua_State *L)
{
LdLuaDrawData *data;
LD_LUA_CAIRO_BEGIN (get_line_width)
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
lua_pushnumber (L, cairo_get_line_width (data->cr) lua_pushnumber (L, cairo_get_line_width (data->cr)
* get_cairo_scale (data->cr)); * get_cairo_scale (data->cr));
return 1; LD_LUA_CAIRO_END (1)
}
static int
ld_lua_cairo_set_line_width (lua_State *L)
{
LdLuaDrawData *data;
LD_LUA_CAIRO_BEGIN (set_line_width)
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
cairo_set_line_width (data->cr, luaL_checknumber (L, 1) cairo_set_line_width (data->cr, luaL_checknumber (L, 1)
/ get_cairo_scale (data->cr)); / get_cairo_scale (data->cr));
return 0; LD_LUA_CAIRO_END (0)
}
static int LD_LUA_CAIRO_BEGIN (translate)
ld_lua_cairo_move_to (lua_State *L) lua_Number x, y;
{
LdLuaDrawData *data; data = lua_touserdata (L, lua_upvalueindex (1));
x = luaL_checknumber (L, 1);
y = luaL_checknumber (L, 2);
cairo_translate (data->cr, x, y);
LD_LUA_CAIRO_END (0)
LD_LUA_CAIRO_BEGIN (scale)
lua_Number sx, sy;
data = lua_touserdata (L, lua_upvalueindex (1));
sx = luaL_checknumber (L, 1);
sy = luaL_checknumber (L, 2);
cairo_scale (data->cr, sx, sy);
LD_LUA_CAIRO_END (0)
LD_LUA_CAIRO_BEGIN (rotate)
lua_Number angle;
data = lua_touserdata (L, lua_upvalueindex (1));
angle = luaL_checknumber (L, 1);
cairo_rotate (data->cr, angle);
LD_LUA_CAIRO_END (0)
LD_LUA_CAIRO_BEGIN (move_to)
lua_Number x, y; lua_Number x, y;
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
@ -732,13 +751,9 @@ ld_lua_cairo_move_to (lua_State *L)
y = luaL_checknumber (L, 2); y = luaL_checknumber (L, 2);
cairo_move_to (data->cr, x, y); cairo_move_to (data->cr, x, y);
return 0; LD_LUA_CAIRO_END (0)
}
static int LD_LUA_CAIRO_BEGIN (line_to)
ld_lua_cairo_line_to (lua_State *L)
{
LdLuaDrawData *data;
lua_Number x, y; lua_Number x, y;
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
@ -747,13 +762,9 @@ ld_lua_cairo_line_to (lua_State *L)
y = luaL_checknumber (L, 2); y = luaL_checknumber (L, 2);
cairo_line_to (data->cr, x, y); cairo_line_to (data->cr, x, y);
return 0; LD_LUA_CAIRO_END (0)
}
static int LD_LUA_CAIRO_BEGIN (curve_to)
ld_lua_cairo_curve_to (lua_State *L)
{
LdLuaDrawData *data;
lua_Number x1, y1, x2, y2, x3, y3; lua_Number x1, y1, x2, y2, x3, y3;
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
@ -766,13 +777,9 @@ ld_lua_cairo_curve_to (lua_State *L)
y3 = luaL_checknumber (L, 6); y3 = luaL_checknumber (L, 6);
cairo_curve_to (data->cr, x1, y1, x2, y2, x3, y3); cairo_curve_to (data->cr, x1, y1, x2, y2, x3, y3);
return 0; LD_LUA_CAIRO_END (0)
}
static int LD_LUA_CAIRO_BEGIN (arc)
ld_lua_cairo_arc (lua_State *L)
{
LdLuaDrawData *data;
lua_Number xc, yc, radius, angle1, angle2; lua_Number xc, yc, radius, angle1, angle2;
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
@ -784,13 +791,9 @@ ld_lua_cairo_arc (lua_State *L)
angle2 = luaL_checknumber (L, 5); angle2 = luaL_checknumber (L, 5);
cairo_arc (data->cr, xc, yc, radius, angle1, angle2); cairo_arc (data->cr, xc, yc, radius, angle1, angle2);
return 0; LD_LUA_CAIRO_END (0)
}
static int LD_LUA_CAIRO_BEGIN (arc_negative)
ld_lua_cairo_arc_negative (lua_State *L)
{
LdLuaDrawData *data;
lua_Number xc, yc, radius, angle1, angle2; lua_Number xc, yc, radius, angle1, angle2;
data = lua_touserdata (L, lua_upvalueindex (1)); data = lua_touserdata (L, lua_upvalueindex (1));
@ -802,6 +805,5 @@ ld_lua_cairo_arc_negative (lua_State *L)
angle2 = luaL_checknumber (L, 5); angle2 = luaL_checknumber (L, 5);
cairo_arc_negative (data->cr, xc, yc, radius, angle1, angle2); cairo_arc_negative (data->cr, xc, yc, radius, angle1, angle2);
return 0; LD_LUA_CAIRO_END (0)
}