summaryrefslogtreecommitdiff
path: root/iup/srclua5/image.lua
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2009-11-04 11:56:41 -0800
committerPixel <pixel@nobis-crew.org>2009-11-04 11:59:33 -0800
commitd577d991b97ae2b5ee1af23641bcffc3f83af5b2 (patch)
tree590639d50205d1bcfaff2a7d2dc6ebf3f373c7ed /iup/srclua5/image.lua
Initial import. Contains the im, cd and iup librairies, and a "working" Makefile for them under linux.
Diffstat (limited to 'iup/srclua5/image.lua')
-rwxr-xr-xiup/srclua5/image.lua96
1 files changed, 96 insertions, 0 deletions
diff --git a/iup/srclua5/image.lua b/iup/srclua5/image.lua
new file mode 100755
index 0000000..38ef556
--- /dev/null
+++ b/iup/srclua5/image.lua
@@ -0,0 +1,96 @@
+------------------------------------------------------------------------------
+-- Image class
+------------------------------------------------------------------------------
+local ctrl = {
+ nick = "image",
+ parent = WIDGET,
+ creation = "nns", -- fake definition
+ callback = {},
+ createfunc = [[
+static int Image (lua_State * L)
+{
+ int w, h, c, num_colors;
+ unsigned char *pixels;
+ Ihandle* ih;
+ char str[20];
+
+ if (lua_istable(L, 1))
+ {
+ int i, j;
+
+ /* get the number of lines */
+ h = luaL_getn(L, 1);
+
+ /* get the number of columns of the first line */
+ lua_pushnumber(L, 1);
+ lua_gettable(L, 1);
+ w = luaL_getn(L, -1);
+ lua_pop(L, 1);
+
+ pixels = (unsigned char *) malloc (h*w);
+
+ for (i=1; i<=h; i++)
+ {
+ lua_pushnumber(L, i);
+ lua_gettable(L, 1);
+ for (j=1; j<=w; j++)
+ {
+ int idx = (i-1)*w+(j-1);
+ lua_pushnumber(L, j);
+ lua_gettable(L, -2);
+ pixels[idx] = (unsigned char)lua_tonumber(L, -1);
+ lua_pop(L, 1);
+ }
+ lua_pop(L, 1);
+ }
+
+ ih = IupImage(w,h,pixels);
+ free(pixels);
+
+ num_colors = luaL_getn(L, 2);
+ num_colors = num_colors>255? 255: num_colors;
+ for(c=1; c<=num_colors; c++)
+ {
+ lua_rawgeti(L, 2, c);
+ sprintf(str, "%d", c);
+ IupStoreAttribute(ih, str, lua_tostring(L,-1));
+ lua_pop(L, 1);
+ }
+ }
+ else
+ {
+ w = luaL_checkint(L, 1);
+ h = luaL_checkint(L, 2);
+ pixels = iuplua_checkuchar_array(L, 3, w*h);
+ ih = IupImage(w, h, pixels);
+ free(pixels);
+
+ num_colors = luaL_getn(L, 4);
+ num_colors = num_colors>256? 256: num_colors;
+ for(c=1; c<=num_colors; c++)
+ {
+ lua_rawgeti(L, 4, c);
+ sprintf(str, "%d", c-1);
+ IupStoreAttribute(ih, str, lua_tostring(L,-1));
+ lua_pop(L, 1);
+ }
+ }
+
+ iuplua_plugstate(L, ih);
+ iuplua_pushihandle_raw(L, ih);
+ return 1;
+}
+
+]]
+}
+
+function ctrl.createElement(class, arg)
+ if (arg.width and arg.height and arg.pixels) then
+ return Image(arg.width, arg.height, arg.pixels, arg.colors)
+ else
+ return Image(arg, arg.colors)
+ end
+end
+
+iupRegisterWidget(ctrl)
+iupSetClass(ctrl, "iup widget")