ref: e73ad64ec22095a32884c2ee187a46e0c570f477
parent: b98409b60cf21bdfa3029b8dfa01173eda6b261f
author: telephil9 <telephil9@gmail.com>
date: Sun Oct 25 13:13:32 EDT 2020
Added more draw primitives New functions: replxy, repl, replclipr, bezier, fillbezier, arc, fillarc, icossin, icossin2, border, allocimagemix
--- a/draw.c
+++ b/draw.c
@@ -74,6 +74,46 @@
}
static int
+lreplxy(lua_State *L)
+{+ int m, M, x, r;
+
+ m = luaL_checkinteger(L, 1);
+ M = luaL_checkinteger(L, 2);
+ x = luaL_checkinteger(L, 3);
+ r = drawreplxy(m, M, x);
+ lua_pushinteger(L, r);
+ return 1;
+}
+
+static int
+lrepl(lua_State *L)
+{+ Rectangle r;
+ Point p, rp;
+
+ r = checkrect(L, 1);
+ p = checkpoint(L, 2);
+ rp = drawrepl(r, p);
+ pushpoint(L, rp);
+ return 1;
+}
+
+static int
+lreplclipr(lua_State *L)
+{+ Image *i;
+ int repl;
+ Rectangle clipr;
+
+ i = checkimage(L, 1);
+ repl = luaL_checkinteger(L, 2);
+ clipr = checkrect(L, 3);
+ replclipr(i, repl, clipr);
+ return 0;
+}
+
+static int
lline(lua_State *L)
{Image *dst, *src;
@@ -93,6 +133,48 @@
}
static int
+lbezier(lua_State *L)
+{+ Image *dst, *src;
+ Point p0, p1, p2, p3, sp;
+ int end0, end1, radius, ret;
+
+ dst = checkimage(L, 1);
+ p0 = checkpoint(L, 2);
+ p1 = checkpoint(L, 3);
+ p2 = checkpoint(L, 4);
+ p3 = checkpoint(L, 5);
+ end0 = luaL_checkinteger(L, 6);
+ end1 = luaL_checkinteger(L, 7);
+ radius = luaL_checkinteger(L, 8);
+ src = checkimage(L, 9);
+ sp = checkpoint(L, 10);
+ ret = bezier(dst, p0, p1, p2, p3, end0, end1, radius, src, sp);
+ lua_pushinteger(L, ret);
+ return 1;
+}
+
+static int
+lfillbezier(lua_State *L)
+{+ Image *dst, *src;
+ Point p0, p1, p2, p3, sp;
+ int w, ret;
+
+ dst = checkimage(L, 1);
+ p0 = checkpoint(L, 2);
+ p1 = checkpoint(L, 3);
+ p2 = checkpoint(L, 4);
+ p3 = checkpoint(L, 5);
+ w = luaL_checkinteger(L, 6);
+ src = checkimage(L, 7);
+ sp = checkpoint(L, 8);
+ ret = fillbezier(dst, p0, p1, p2, p3, w, src, sp);
+ lua_pushinteger(L, ret);
+ return 1;
+}
+
+static int
lellipse(lua_State *L)
{Image *dst, *src;
@@ -128,6 +210,87 @@
}
static int
+larc(lua_State *L)
+{+ Image *dst, *src;
+ Point c, sp;
+ int a, b, thick, alpha, phi;
+
+ dst = checkimage(L, 1);
+ c = checkpoint(L, 2);
+ a = luaL_checkinteger(L, 3);
+ b = luaL_checkinteger(L, 4);
+ thick = luaL_checkinteger(L, 5);
+ src = checkimage(L, 6);
+ sp = checkpoint(L, 7);
+ alpha = luaL_checkinteger(L, 8);
+ phi = luaL_checkinteger(L, 9);
+ arc(dst, c, a, b, thick, src, sp, alpha, phi);
+ return 0;
+}
+
+static int
+lfillarc(lua_State *L)
+{+ Image *dst, *src;
+ Point c, sp;
+ int a, b, thick, alpha, phi;
+
+ dst = checkimage(L, 1);
+ c = checkpoint(L, 2);
+ a = luaL_checkinteger(L, 3);
+ b = luaL_checkinteger(L, 4);
+ src = checkimage(L, 5);
+ sp = checkpoint(L, 6);
+ alpha = luaL_checkinteger(L, 7);
+ phi = luaL_checkinteger(L, 8);
+ fillarc(dst, c, a, b, src, sp, alpha, phi);
+ return 0;
+}
+
+static int
+licossin(lua_State *L)
+{+ int deg, cosp, sinp;
+
+ deg = luaL_checkinteger(L, 1);
+ icossin(deg, &cosp, &sinp);
+ lua_pushinteger(L, cosp);
+ lua_pushinteger(L, sinp);
+ return 2;
+}
+
+static int
+licossin2(lua_State *L)
+{+ int x, y, cosp, sinp;
+
+ x = luaL_checkinteger(L, 1);
+ y = luaL_checkinteger(L, 2);
+ icossin2(x, y, &cosp, &sinp);
+ lua_pushinteger(L, cosp);
+ lua_pushinteger(L, sinp);
+ return 2;
+}
+
+static int
+lborder(lua_State *L)
+{+ Image *dst, *color;
+ Rectangle r;
+ Point sp;
+ int i;
+
+ dst = checkimage(L, 1);
+ r = checkrect(L, 2);
+ i = luaL_checkinteger(L, 3);
+ color = checkimage(L, 4);
+ sp = checkpoint(L, 5);
+ border(dst, r, i, color, sp);
+ return 0;
+}
+
+static int
lstring(lua_State *L)
{Image *dst, *src;
@@ -165,14 +328,40 @@
return 1;
}
+static int
+lallocimagemix(lua_State *L)
+{+ Display *d;
+ ulong one, three;
+ Image *i;
+
+ d = checkdisplay(L, 1);
+ one = (ulong)luaL_checkinteger(L, 2);
+ three = (ulong)luaL_checkinteger(L, 3);
+ i = allocimagemix(d, one, three);
+ pushimage(L, i);
+ return 1;
+}
+
static const struct luaL_Reg libdraw [] = { { "init", linitdraw }, { "draw", ldraw },+ { "replxy", lreplxy },+ { "repl", lrepl },+ { "replclipr", lreplclipr }, { "line", lline },+ { "bezier", lbezier },+ { "fillbezier", lfillbezier }, { "ellipse", lellipse }, { "fillellipse", lfillellipse },+ { "arc", larc },+ { "fillarc", lfillarc },+ { "icossin", licossin },+ { "icossin2", licossin2 },+ { "border", lborder }, { "string", lstring }, { "allocimage", lallocimage },+ { "allocimagemix", lallocimagemix }, { NULL, NULL }};
--
⑨