diff --git a/example.lua b/example.lua index 2c7afdc..e45e6bb 100644 --- a/example.lua +++ b/example.lua @@ -11,10 +11,15 @@ function tick(t) (math.sin(t) * 0.5 + 0.5) * 1920, (math.cos(t) * 0.5 + 0.5) * 1080) - -- Color ARGB, thickness, x1, y1, x2, y2, xn, yn, ... - Draw.line(0xFFFF00FF, 8, 100, 100, 200, 400, 300, 600) --> { Vec2, ... } -- Color ARGB, x1, y1, x2, y2, xn, yn, ... - Draw.poly(0xFFFF00FF, 100, 100, 200, 400, 150, 500) --> Rect + Draw.poly(0xFF00FFFF, 100, 100, 200, 100, 300, 600) --> Rect + -- Color ARGB, thickness, x1, y1, x2, y2, xn, yn, ... + Draw.line(0xFFFF00FF, 8, 100, 100, 200, 100, 300, 600, 100, 100) --> { Vec2, ... } + + -- Color ARGB, thickness, x, y, w, h + Draw.rect(0xFFFF000F, 1, 100, 700, 320, 240) --> Rect + -- Color ARGB, x, y, w, h + Draw.rect_fill(0xFF00FFFF, 100, 700, 320, 240) --> Rect --[[ -- Color ARGB, radius, x, y, start, end @@ -22,11 +27,6 @@ function tick(t) -- Color ARGB, outer, inner, x, y, start, end Draw.ring(0xFF00FF00, 30, 20, 300, 300) --> Rect - -- Color ARGB, x, y, w, h - Draw.rect_fill(0xFF00FFFF, 100, 700, 320, 240) --> Rect - -- Color ARGB, thickness, x, y, w, h - Draw.rect(0xFFFF00FF, 8, 100, 700, 320, 240) --> Rect - -- font, text, size, x, y, Color ARGB Draw.text(font, "Hello, world!", 32, 400, 400, 0xFFFF00FF) --> Rect diff --git a/src/api_draw.c b/src/api_draw.c index 4f147ab..e39f064 100644 --- a/src/api_draw.c +++ b/src/api_draw.c @@ -8,6 +8,8 @@ int api_draw_clear(lua_State *L); int api_draw_pixel(lua_State *L); int api_draw_line(lua_State *L); int api_draw_poly(lua_State *L); +int api_draw_rect(lua_State *L); +int api_draw_rect_fill(lua_State *L); bool loadapi_draw(lua_State *lua) { const struct luaL_Reg api_draw[] = { @@ -15,6 +17,8 @@ bool loadapi_draw(lua_State *lua) { { "pixel", api_draw_pixel }, { "line", api_draw_line }, { "poly", api_draw_poly }, + { "rect", api_draw_rect }, + { "rect_fill", api_draw_rect_fill }, }; lua_newtable(lua); luaL_setfuncs(lua, api_draw, 0); @@ -67,12 +71,12 @@ int api_draw_line(lua_State *L) { double a, r, g, b; argb_to_cairo(color, &a, &r, &g, &b); - lua_Number width = luaL_checknumber(L, 2); + lua_Number stroke_width = luaL_checknumber(L, 2); lua_Number x = luaL_checknumber(L, 3); lua_Number y = luaL_checknumber(L, 4); cairo_set_source_rgba(cr, r, g, b, a); - cairo_set_line_width(cr, width); + cairo_set_line_width(cr, stroke_width); cairo_move_to(cr, x, y); for (int i = 5; i <= lua_gettop(L); i += 2) { x = luaL_checknumber(L, i); @@ -107,3 +111,42 @@ int api_draw_poly(lua_State *L) { cairo_fill(cr); return 0; } + +int api_draw_rect(lua_State *L) { + cairo_t *cr = global_context.cairo_context.cairo; + int color = luaL_checkinteger(L, 1); + double a, r, g, b; + argb_to_cairo(color, &a, &r, &g, &b); + + lua_Number stroke_width = luaL_checknumber(L, 2); + lua_Number x = luaL_checknumber(L, 3); + lua_Number y = luaL_checknumber(L, 4); + lua_Number w = luaL_checknumber(L, 5); + lua_Number h = luaL_checknumber(L, 6); + + cairo_set_line_width(cr, stroke_width); + cairo_set_source_rgba(cr, r, g, b, a); + cairo_rectangle(cr, x, y, w, h); + cairo_stroke(cr); + + return 0; +} + +int api_draw_rect_fill(lua_State *L) { + cairo_t *cr = global_context.cairo_context.cairo; + int color = luaL_checkinteger(L, 1); + double a, r, g, b; + argb_to_cairo(color, &a, &r, &g, &b); + + lua_Number x = luaL_checknumber(L, 2); + lua_Number y = luaL_checknumber(L, 3); + lua_Number w = luaL_checknumber(L, 4); + lua_Number h = luaL_checknumber(L, 5); + + cairo_set_source_rgba(cr, r, g, b, a); + cairo_rectangle(cr, x, y, w, h); + cairo_fill(cr); + + return 0; +} + diff --git a/src/main.c b/src/main.c index d6ab851..2eef51e 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,6 @@ -#include #include #include +#include #include #include #include