summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsanine <sanine.not@pm.me>2023-02-19 19:03:51 -0600
committersanine <sanine.not@pm.me>2023-02-19 19:03:51 -0600
commitfb0eb6abac31ab1945a5b32e68824c9f9420d71f (patch)
treeb414bb9f93af85755df553d003ed88afc24cef50 /src
parentbc4af3b47260ee0f79343303b135d1ea32cde4d4 (diff)
refactor: bind (nearly) all nvg functions
Diffstat (limited to 'src')
-rw-r--r--src/nvg/CMakeLists.txt16
-rw-r--r--src/nvg/context.c3
-rw-r--r--src/nvg/image.c16
-rw-r--r--src/nvg/nvg.h10
-rw-r--r--src/nvg/paint.c77
-rw-r--r--src/nvg/path.c131
-rw-r--r--src/nvg/render.c4
-rw-r--r--src/nvg/scissor.c35
-rw-r--r--src/nvg/setup.c5
-rw-r--r--src/nvg/text.c182
-rw-r--r--src/nvg/transform.c18
11 files changed, 434 insertions, 63 deletions
diff --git a/src/nvg/CMakeLists.txt b/src/nvg/CMakeLists.txt
index 8003158..9a96328 100644
--- a/src/nvg/CMakeLists.txt
+++ b/src/nvg/CMakeLists.txt
@@ -1,3 +1,17 @@
project(honey_engine)
-target_sources(honey PUBLIC ${CMAKE_CURRENT_LIST_DIR}/nvg.c)
+target_sources(honey PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/color.c
+ ${CMAKE_CURRENT_LIST_DIR}/composite.c
+ ${CMAKE_CURRENT_LIST_DIR}/context.c
+ ${CMAKE_CURRENT_LIST_DIR}/frame.c
+ ${CMAKE_CURRENT_LIST_DIR}/image.c
+ ${CMAKE_CURRENT_LIST_DIR}/path.c
+ ${CMAKE_CURRENT_LIST_DIR}/render.c
+ ${CMAKE_CURRENT_LIST_DIR}/setup.c
+ ${CMAKE_CURRENT_LIST_DIR}/state.c
+ ${CMAKE_CURRENT_LIST_DIR}/transform.c
+ ${CMAKE_CURRENT_LIST_DIR}/text.c
+ ${CMAKE_CURRENT_LIST_DIR}/paint.c
+ ${CMAKE_CURRENT_LIST_DIR}/scissor.c
+)
diff --git a/src/nvg/context.c b/src/nvg/context.c
index 48a7282..ee386aa 100644
--- a/src/nvg/context.c
+++ b/src/nvg/context.c
@@ -1,5 +1,8 @@
#include <lua.h>
#include <lauxlib.h>
+#include "gl/glad/glad.h"
+#include <GLFW/glfw3.h>
+#define NANOVG_GL3_IMPLEMENTATION
#include <nanovg.h>
#include <nanovg_gl.h>
#include "nvg.h"
diff --git a/src/nvg/image.c b/src/nvg/image.c
index e7f39c2..9a1d22c 100644
--- a/src/nvg/image.c
+++ b/src/nvg/image.c
@@ -5,15 +5,13 @@
#include "nvg.h"
-int CreateImage_bind(lua_State *L)
+int nvgCreateImage_bind(lua_State *L)
{
NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
const char *filename = luaL_checkstring(L, 2);
int flags = luaL_checkinteger(L, 3);
- int *handle = lua_newuserdata(L, sizeof(int));
- luaL_getmetatable(L, nvg_image_tname);
- lua_setmetatable(L, -2);
- *handle = nvgCreateImage(*ctx, filename, flags);
+ int handle = nvgCreateImage(*ctx, filename, flags);
+ lua_pushinteger(L, handle);
return 1;
}
@@ -21,9 +19,9 @@ int CreateImage_bind(lua_State *L)
int nvgImageSize_bind(lua_State *L)
{
NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
- int *handle = luaL_checkudata(L, 2, nvg_image_tname);
+ int handle = luaL_checkinteger(L, 2);
int w, h;
- nvgImageSize(*ctx, *handle, &w, &h);
+ nvgImageSize(*ctx, handle, &w, &h);
lua_pushinteger(L, w);
lua_pushinteger(L, h);
return 2;
@@ -33,7 +31,7 @@ int nvgImageSize_bind(lua_State *L)
int nvgDeleteImage_bind(lua_State *L)
{
NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
- int *handle = luaL_checkudata(L, 2, nvg_image_tname);
- nvgDeleteImage(*ctx, *handle);
+ int handle = luaL_checkinteger(L, 2);
+ nvgDeleteImage(*ctx, handle);
return 0;
}
diff --git a/src/nvg/nvg.h b/src/nvg/nvg.h
index 33a2420..9bbb4a9 100644
--- a/src/nvg/nvg.h
+++ b/src/nvg/nvg.h
@@ -112,8 +112,8 @@ extern const char *nvg_paint_tname;
/* text */ \
X("CreateFont", nvgCreateFont_bind) \
X("CreateFontAtIndex", nvgCreateFontAtIndex_bind) \
- X("CreateFontMem", nvgCreateFontMem_bind) \
- X("CreateFontMemAtIndex", nvgCreateFontMemAtIndex_bind) \
+ /* X("CreateFontMem", nvgCreateFontMem_bind) */ \
+ /* X("CreateFontMemAtIndex", nvgCreateFontMemAtIndex_bind) */ \
X("FindFont", nvgFindFont_bind) \
X("AddFallbackFontId", nvgAddFallbackFontId_bind) \
X("AddFallbackFont", nvgAddFallbackFont_bind) \
@@ -130,9 +130,9 @@ extern const char *nvg_paint_tname;
X("TextBox", nvgTextBox_bind) \
X("TextBounds", nvgTextBounds_bind) \
X("TextBoxBounds", nvgTextBoxBounds_bind) \
- X("TextGlyphPositions", nvgTextGlyphPositions_bind) \
- X("TextMetrics", nvgTextMetrics_bind) \
- X("TextBreakLines", nvgTextBreakLines_bind) \
+ /* X("TextGlyphPositions", nvgTextGlyphPositions_bind) */ \
+ /* X("TextMetrics", nvgTextMetrics_bind) */ \
+ /* X("TextBreakLines", nvgTextBreakLines_bind) */ \
/* function declarations */
diff --git a/src/nvg/paint.c b/src/nvg/paint.c
new file mode 100644
index 0000000..0bdcae1
--- /dev/null
+++ b/src/nvg/paint.c
@@ -0,0 +1,77 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <nanovg.h>
+#include <nanovg_gl.h>
+#include "nvg.h"
+
+
+static void create_paint(lua_State *L, NVGpaint paint)
+{
+ NVGpaint *p = lua_newuserdata(L, sizeof(NVGpaint));
+ *p = paint;
+ luaL_getmetatable(L, nvg_paint_tname);
+ lua_setmetatable(L, -2);
+}
+
+int nvgLinearGradient_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float sx = luaL_checknumber(L, 2);
+ float sy = luaL_checknumber(L, 3);
+ float ex = luaL_checknumber(L, 4);
+ float ey = luaL_checknumber(L, 5);
+ NVGcolor *icol = luaL_checkudata(L, 6, nvg_color_tname);
+ NVGcolor *ocol = luaL_checkudata(L, 7, nvg_color_tname);
+ create_paint(L,
+ nvgLinearGradient(*ctx, sx, sy, ex, ey, *icol, *ocol)
+ );
+ return 1;
+}
+
+int nvgBoxGradient_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ float w = luaL_checknumber(L, 4);
+ float h = luaL_checknumber(L, 5);
+ float r = luaL_checknumber(L, 6);
+ float f = luaL_checknumber(L, 7);
+ NVGcolor *icol = luaL_checkudata(L, 8, nvg_color_tname);
+ NVGcolor *ocol = luaL_checkudata(L, 9, nvg_color_tname);
+ create_paint(L,
+ nvgBoxGradient(*ctx, x, y, w, h, r, f, *icol, *ocol)
+ );
+ return 1;
+}
+
+int nvgRadialGradient_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float cx = luaL_checknumber(L, 2);
+ float cy = luaL_checknumber(L, 3);
+ float inr = luaL_checknumber(L, 4);
+ float outr = luaL_checknumber(L, 5);
+ NVGcolor *icol = luaL_checkudata(L, 6, nvg_color_tname);
+ NVGcolor *ocol = luaL_checkudata(L, 7, nvg_color_tname);
+ create_paint(L,
+ nvgRadialGradient(*ctx, cx, cy, inr, outr, *icol, *ocol)
+ );
+ return 1;
+}
+
+int nvgImagePattern_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float ox = luaL_checknumber(L, 2);
+ float oy = luaL_checknumber(L, 3);
+ float ex = luaL_checknumber(L, 4);
+ float ey = luaL_checknumber(L, 5);
+ float angle = luaL_checknumber(L, 6);
+ int image = luaL_checkinteger(L, 7);
+ float alpha = luaL_checknumber(L, 8);
+ create_paint(L,
+ nvgImagePattern(*ctx, ox, oy, ex, ey, angle, image, alpha)
+ );
+ return 1;
+}
diff --git a/src/nvg/path.c b/src/nvg/path.c
index 1e0f527..7f2c4d0 100644
--- a/src/nvg/path.c
+++ b/src/nvg/path.c
@@ -1,117 +1,180 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <nanovg.h>
+#include <nanovg_gl.h>
+#include "nvg.h"
+
+
/* --===== paths =====-- */
-int nvg_begin_path(lua_State *L)
+int nvgBeginPath_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
- nvgBeginPath(*vg);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ nvgBeginPath(*ctx);
return 0;
}
-int nvg_move_to(lua_State *L)
+int nvgMoveTo_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float x = luaL_checknumber(L, 2);
float y = luaL_checknumber(L, 3);
- nvgMoveTo(*vg, x, y);
+ nvgMoveTo(*ctx, x, y);
return 0;
}
-int nvg_line_to(lua_State *L)
+int nvgLineTo_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float x = luaL_checknumber(L, 2);
float y = luaL_checknumber(L, 3);
- nvgLineTo(*vg, x, y);
+ nvgLineTo(*ctx, x, y);
return 0;
}
-int nvg_bezier_to(lua_State *L)
+int nvgBezierTo_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float c1x = luaL_checknumber(L, 2);
float c1y = luaL_checknumber(L, 3);
float c2x = luaL_checknumber(L, 4);
float c2y = luaL_checknumber(L, 5);
float x = luaL_checknumber(L, 6);
float y = luaL_checknumber(L, 7);
- nvgBezierTo(*vg, c1x, c1y, c2x, c2y, x, y);
+ nvgBezierTo(*ctx, c1x, c1y, c2x, c2y, x, y);
return 0;
}
-int nvg_quad_to(lua_State *L)
+int nvgQuadTo_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float cx = luaL_checknumber(L, 2);
float cy = luaL_checknumber(L, 3);
float x = luaL_checknumber(L, 4);
float y = luaL_checknumber(L, 5);
- nvgQuadTo(*vg, cx, cy, x, y);
+ nvgQuadTo(*ctx, cx, cy, x, y);
return 0;
}
-int nvg_arc_to(lua_State *L)
+int nvgArcTo_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float x1 = luaL_checknumber(L, 2);
float y1 = luaL_checknumber(L, 3);
float x2 = luaL_checknumber(L, 4);
float y2 = luaL_checknumber(L, 5);
float radius = luaL_checknumber(L, 6);
- nvgArcTo(*vg, x1, y1, x2, y2, radius);
+ nvgArcTo(*ctx, x1, y1, x2, y2, radius);
return 0;
}
-int nvg_close_path(lua_State *L)
+int nvgClosePath_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
- nvgClosePath(*vg);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ nvgClosePath(*ctx);
return 0;
}
-int nvg_path_winding(lua_State *L)
+int nvgPathWinding_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
int dir = luaL_checkinteger(L, 2);
- nvgPathWinding(*vg, dir);
+ nvgPathWinding(*ctx, dir);
return 0;
}
-int nvg_arc(lua_State *L)
+int nvgArc_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float cx = luaL_checknumber(L, 2);
float cy = luaL_checknumber(L, 3);
float r = luaL_checknumber(L, 4);
float a0 = luaL_checknumber(L, 5);
float a1 = luaL_checknumber(L, 6);
int dir = luaL_checkinteger(L, 7);
- nvgArc(*vg, cx, cy, r, a0, a1, dir);
+ nvgArc(*ctx, cx, cy, r, a0, a1, dir);
+ return 0;
+}
+
+
+int nvgRect_bind(lua_State *L)
+{
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ float w = luaL_checknumber(L, 4);
+ float h = luaL_checknumber(L, 5);
+ nvgRect(*ctx, x, y, w, h);
+ return 0;
+}
+
+int nvgRoundedRect_bind(lua_State *L)
+{
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ float w = luaL_checknumber(L, 4);
+ float h = luaL_checknumber(L, 5);
+ float r = luaL_checknumber(L, 6);
+ nvgRoundedRect(*ctx, x, y, w, h, r);
return 0;
}
-/* ... */
+int nvgRoundedRectVarying_bind(lua_State *L)
+{
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ float w = luaL_checknumber(L, 4);
+ float h = luaL_checknumber(L, 5);
+ float rtl = luaL_checknumber(L, 6);
+ float rtr = luaL_checknumber(L, 7);
+ float rbl = luaL_checknumber(L, 8);
+ float rbr = luaL_checknumber(L, 9);
+ nvgRoundedRectVarying(*ctx, x, y, w, h, rtl, rtr, rbl, rbr);
+ return 0;
+}
-int nvg_fill(lua_State *L)
+int nvgEllipse_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
- nvgFill(*vg);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float cx = luaL_checknumber(L, 2);
+ float cy = luaL_checknumber(L, 3);
+ float rx = luaL_checknumber(L, 4);
+ float ry = luaL_checknumber(L, 5);
+ nvgEllipse(*ctx, cx, cy, rx, ry);
return 0;
}
+int nvgCircle_bind(lua_State *L)
+{
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float cx = luaL_checknumber(L, 2);
+ float cy = luaL_checknumber(L, 3);
+ float r = luaL_checknumber(L, 4);
+ nvgCircle(*ctx, cx, cy, r);
+ return 0;
+}
-int nvg_stroke(lua_State *L)
+int nvgFill_bind(lua_State *L)
{
- struct NVGcontext **vg = luaL_checkudata(L, 1, ctx_tname);
- nvgStroke(*vg);
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ nvgFill(*ctx);
return 0;
}
+int nvgStroke_bind(lua_State *L)
+{
+ struct NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ nvgStroke(*ctx);
+ return 0;
+}
diff --git a/src/nvg/render.c b/src/nvg/render.c
index f28da90..87aaba2 100644
--- a/src/nvg/render.c
+++ b/src/nvg/render.c
@@ -5,10 +5,10 @@
#include "nvg.h"
-int ShapeAntiAlias_bind(lua_State *L)
+int nvgShapeAntiAlias_bind(lua_State *L)
{
NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
- int enabled = luaL_toboolean(L, 2);
+ int enabled = lua_toboolean(L, 2);
nvgShapeAntiAlias(*ctx, enabled);
return 0;
}
diff --git a/src/nvg/scissor.c b/src/nvg/scissor.c
new file mode 100644
index 0000000..7413c46
--- /dev/null
+++ b/src/nvg/scissor.c
@@ -0,0 +1,35 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <nanovg.h>
+#include <nanovg_gl.h>
+#include "nvg.h"
+
+
+int nvgScissor_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ float w = luaL_checknumber(L, 4);
+ float h = luaL_checknumber(L, 5);
+ nvgScissor(*ctx, x, y, w, h);
+ return 0;
+}
+
+int nvgIntersectScissor_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ float w = luaL_checknumber(L, 4);
+ float h = luaL_checknumber(L, 5);
+ nvgIntersectScissor(*ctx, x, y, w, h);
+ return 0;
+}
+
+int nvgResetScissor_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ nvgResetScissor(*ctx);
+ return 0;
+}
diff --git a/src/nvg/setup.c b/src/nvg/setup.c
index 16766c0..0404f91 100644
--- a/src/nvg/setup.c
+++ b/src/nvg/setup.c
@@ -1,8 +1,5 @@
#include <lua.h>
#include <lauxlib.h>
-#include "gl/glad/glad.h"
-#include <GLFW/glfw3.h>
-#define NANOVG_GL3_IMPLEMENTATION
#include <nanovg.h>
#include <nanovg_gl.h>
#include "util/util.h"
@@ -11,6 +8,8 @@
const char *nvg_ctx_tname = "nvg.Context";
const char *nvg_color_tname = "nvg.Color";
+const char *nvg_image_tname = "nvg.Image";
+const char *nvg_paint_tname = "nvg.Paint";
void setup_nvg(lua_State *L, int honey_tbl)
diff --git a/src/nvg/text.c b/src/nvg/text.c
new file mode 100644
index 0000000..cd480f6
--- /dev/null
+++ b/src/nvg/text.c
@@ -0,0 +1,182 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <nanovg.h>
+#include <nanovg_gl.h>
+#include "nvg.h"
+
+
+int nvgCreateFont_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ const char *name = luaL_checkstring(L, 2);
+ const char *filename = luaL_checkstring(L, 3);
+ lua_pushinteger(L,
+ nvgCreateFont(*ctx, name, filename)
+ );
+ return 1;
+}
+
+int nvgCreateFontAtIndex_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ const char *name = luaL_checkstring(L, 2);
+ const char *filename = luaL_checkstring(L, 3);
+ int index = luaL_checkinteger(L, 4);
+ lua_pushinteger(L,
+ nvgCreateFontAtIndex(*ctx, name, filename, index)
+ );
+ return 1;
+
+}
+
+int nvgFindFont_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ const char *name = luaL_checkstring(L, 2);
+ lua_pushinteger(L,
+ nvgFindFont(*ctx, name)
+ );
+ return 1;
+}
+
+int nvgAddFallbackFontId_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ int baseFont = luaL_checkinteger(L, 2);
+ int fallbackFont = luaL_checkinteger(L, 3);
+ int font = nvgAddFallbackFontId(*ctx, baseFont, fallbackFont);
+ lua_pushinteger(L, font);
+ return 1;
+}
+
+int nvgAddFallbackFont_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ const char *baseFont = luaL_checkstring(L, 2);
+ const char *fallbackFont = luaL_checkstring(L, 3);
+ int font = nvgAddFallbackFont(*ctx, baseFont, fallbackFont);
+ lua_pushinteger(L, font);
+ return 1;
+}
+
+int nvgResetFallbackFontsId_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ int baseFont = luaL_checkinteger(L, 2);
+ nvgResetFallbackFontsId(*ctx, baseFont);
+ return 0;
+}
+
+int nvgResetFallbackFonts_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ const char *baseFont = luaL_checkstring(L, 2);
+ nvgResetFallbackFonts(*ctx, baseFont);
+ return 0;
+}
+
+int nvgFontSize_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float size = luaL_checknumber(L, 2);
+ nvgFontSize(*ctx, size);
+ return 0;
+}
+
+int nvgFontBlur_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float blur = luaL_checknumber(L, 2);
+ nvgFontBlur(*ctx, blur);
+ return 0;
+}
+
+int nvgTextLetterSpacing_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float spacing = luaL_checknumber(L, 2);
+ nvgTextLetterSpacing(*ctx, spacing);
+ return 0;
+}
+
+int nvgTextLineHeight_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float lineHeight = luaL_checknumber(L, 2);
+ nvgTextLineHeight(*ctx, lineHeight);
+ return 0;
+}
+
+int nvgTextAlign_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ int align = luaL_checkinteger(L, 2);
+ nvgTextAlign(*ctx, align);
+ return 0;
+}
+
+int nvgFontFaceId_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ int font = luaL_checknumber(L, 2);
+ nvgFontFaceId(*ctx, font);
+ return 0;
+}
+
+int nvgFontFace_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ const char *font = luaL_checkstring(L, 2);
+ nvgFontFace(*ctx, font);
+ return 0;
+}
+
+int nvgText_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ const char *string = luaL_checkstring(L, 4);
+ nvgText(*ctx, x, y, string, NULL);
+ return 0;
+}
+
+int nvgTextBox_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ float breakRowWidth = luaL_checknumber(L, 4);
+ const char *string = luaL_checkstring(L, 5);
+ nvgTextBox(*ctx, x, y, breakRowWidth, string, NULL);
+ return 0;
+}
+
+int nvgTextBounds_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ const char *string = luaL_checkstring(L, 4);
+ float bounds[4];
+ nvgTextBounds(*ctx, x, y, string, NULL, bounds);
+ for (int i=0; i<4; i++) {
+ lua_pushnumber(L, bounds[i]);
+ }
+ return 4;
+}
+
+int nvgTextBoxBounds_bind(lua_State *L)
+{
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
+ float x = luaL_checknumber(L, 2);
+ float y = luaL_checknumber(L, 3);
+ const char *string = luaL_checkstring(L, 4);
+ float breakRowWidth = luaL_checknumber(L, 5);
+ float bounds[4];
+ nvgTextBoxBounds(*ctx, x, y, breakRowWidth, string, NULL, bounds);
+ for (int i=0; i<4; i++) {
+ lua_pushnumber(L, bounds[i]);
+ }
+ return 4;
+}
diff --git a/src/nvg/transform.c b/src/nvg/transform.c
index a4ab1eb..6fe0c3f 100644
--- a/src/nvg/transform.c
+++ b/src/nvg/transform.c
@@ -7,7 +7,7 @@
int nvgResetTransform_bind(lua_State *L)
{
- NVGcontext **ctx = lua_checkudata(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
nvgResetTransform(*ctx);
return 0;
}
@@ -15,21 +15,21 @@ int nvgResetTransform_bind(lua_State *L)
int nvgTransform_bind(lua_State *L)
{
- NVGcontext **ctx = lua_checkudata(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float a = luaL_checknumber(L, 2);
float b = luaL_checknumber(L, 3);
float c = luaL_checknumber(L, 4);
float d = luaL_checknumber(L, 5);
float e = luaL_checknumber(L, 6);
float f = luaL_checknumber(L, 7);
- nvgTransform(ctx, a, b, c, d, e, f);
+ nvgTransform(*ctx, a, b, c, d, e, f);
return 0;
}
int nvgTranslate_bind(lua_State *L)
{
- NVGcontext **ctx = lua_checkudata(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float x = luaL_checknumber(L, 2);
float y = luaL_checknumber(L, 3);
nvgTranslate(*ctx, x, y);
@@ -39,7 +39,7 @@ int nvgTranslate_bind(lua_State *L)
int nvgRotate_bind(lua_State *L)
{
- NVGcontext **ctx = lua_checkudata(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float angle = luaL_checknumber(L, 2);
nvgRotate(*ctx, angle);
return 0;
@@ -48,7 +48,7 @@ int nvgRotate_bind(lua_State *L)
int nvgSkewX_bind(lua_State *L)
{
- NVGcontext **ctx = lua_checkudata(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float angle = luaL_checknumber(L, 2);
nvgSkewX(*ctx, angle);
return 0;
@@ -57,7 +57,7 @@ int nvgSkewX_bind(lua_State *L)
int nvgSkewY_bind(lua_State *L)
{
- NVGcontext **ctx = lua_checkudata(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float angle = luaL_checknumber(L, 2);
nvgSkewY(*ctx, angle);
return 0;
@@ -66,7 +66,7 @@ int nvgSkewY_bind(lua_State *L)
int nvgScale_bind(lua_State *L)
{
- NVGcontext **ctx = lua_checkudata(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float x = luaL_checknumber(L, 2);
float y = luaL_checknumber(L, 3);
nvgScale(*ctx, x, y);
@@ -76,7 +76,7 @@ int nvgScale_bind(lua_State *L)
int nvgCurrentTransform_bind(lua_State *L)
{
- NVGcontext **ctx = luaL_checkudate(L, 1, nvg_ctx_tname);
+ NVGcontext **ctx = luaL_checkudata(L, 1, nvg_ctx_tname);
float xform[6];
nvgCurrentTransform(*ctx, xform);
for (int i=0; i<6; i++) {