summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c89
1 files changed, 48 insertions, 41 deletions
diff --git a/src/window.c b/src/window.c
index 6a1fe6f..ffcaee7 100644
--- a/src/window.c
+++ b/src/window.c
@@ -104,18 +104,19 @@ bool honey_setup_window(lua_State* L)
glfwSetWindowFocusCallback(info->window, honey_glfw_window_focus_callback);
- honey_lua_element window_elements[] = {
- { "set_fullscreen", HONEY_FUNCTION, { .function = honey_window_set_fullscreen } },
- { "set_title", HONEY_FUNCTION, { .function = honey_window_set_title } },
- { "get_size", HONEY_FUNCTION, { .function = honey_window_get_size } },
- { "set_size", HONEY_FUNCTION, { .function = honey_window_set_size } },
- { "resize_bind", HONEY_FUNCTION, { .function = honey_window_resize_bind } },
- { "resize_unbind", HONEY_FUNCTION, { .function = honey_window_resize_unbind } },
- { "focus_bind", HONEY_FUNCTION, { .function = honey_window_focus_bind } },
- { "focus_unbind", HONEY_FUNCTION, { .function = honey_window_focus_unbind } },
- };
-
- honey_lua_create_table(L, window_elements, 8);
+ honey_lua_create_table
+ (L, 8,
+ HONEY_FUNCTION, "set_fullscreen", honey_window_set_fullscreen,
+ HONEY_FUNCTION, "set_title", honey_window_set_title,
+ HONEY_FUNCTION, "get_size", honey_window_get_size,
+ HONEY_FUNCTION, "set_size", honey_window_set_size,
+ HONEY_FUNCTION, "resize_bind", honey_window_resize_bind,
+ HONEY_FUNCTION, "resize_unbind", honey_window_resize_unbind,
+ HONEY_FUNCTION, "focus_bind", honey_window_focus_bind,
+ HONEY_FUNCTION, "focus_unbind", honey_window_focus_unbind);
+
+ lua_setfield(L, -2, "window");
+
return true;
}
@@ -123,10 +124,8 @@ bool honey_setup_window(lua_State* L)
int honey_window_set_fullscreen(lua_State* L)
{
- if (!honey_lua_validate_types(L, 1, HONEY_BOOLEAN))
- lua_error(L);
-
- bool fullscreen = lua_toboolean(L, 1);
+ bool fullscreen;
+ honey_lua_parse_arguments(L, 1, 1, HONEY_BOOLEAN, &fullscreen);
lua_rawgeti(L, LUA_REGISTRYINDEX, honey_window_info_ref);
honey_window_information* info = lua_touserdata(L, -1);
@@ -150,10 +149,8 @@ int honey_window_set_fullscreen(lua_State* L)
int honey_window_set_title(lua_State* L)
{
- if (!honey_lua_validate_types(L, 1, HONEY_STRING))
- lua_error(L);
-
- const char* title = lua_tostring(L, 1);
+ char* title;
+ honey_lua_parse_arguments(L, 1, 1, HONEY_STRING, &title);
lua_rawgeti(L, LUA_REGISTRYINDEX, honey_window_info_ref);
honey_window_information* info = lua_touserdata(L, -1);
@@ -180,11 +177,11 @@ int honey_window_get_size(lua_State* L)
int honey_window_set_size(lua_State* L)
{
- if (!honey_lua_validate_types(L, 2, HONEY_INTEGER, HONEY_INTEGER))
- lua_error(L);
-
- int width = lua_tointeger(L, 1);
- int height = lua_tointeger(L, 2);
+ int width, height;
+ honey_lua_parse_arguments
+ (L, 1, 2,
+ HONEY_INTEGER, &width,
+ HONEY_INTEGER, &height);
lua_rawgeti(L, LUA_REGISTRYINDEX, honey_window_info_ref);
honey_window_information* info = lua_touserdata(L, -1);
@@ -197,13 +194,20 @@ int honey_window_set_size(lua_State* L)
int honey_window_resize_bind(lua_State* L)
{
- if (!honey_lua_validate_types(L, 2, HONEY_FUNCTION, HONEY_ANY))
- lua_error(L);
+ int choice = honey_lua_parse_arguments
+ (L, 2,
+ 1, HONEY_FUNCTION,
+ 2, HONEY_FUNCTION, HONEY_ANY);
+
+ honey_window_resize_unbind(L);
lua_pushvalue(L, 1);
honey_window_resize_callback_ref = luaL_ref(L, LUA_REGISTRYINDEX);
- lua_pushvalue(L, 2);
- honey_window_resize_callback_data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ if (choice == 1) {
+ lua_pushvalue(L, 2);
+ honey_window_resize_callback_data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+ }
return 0;
}
@@ -216,13 +220,11 @@ int honey_window_resize_unbind(lua_State* L)
int data = honey_window_resize_callback_data_ref;
if (callback != LUA_NOREF) {
- lua_pushnil(L);
- lua_rawseti(L, LUA_REGISTRYINDEX, callback);
+ luaL_unref(L, LUA_REGISTRYINDEX, callback);
}
if (data != LUA_NOREF && data != LUA_REFNIL) {
- lua_pushnil(L);
- lua_rawseti(L, LUA_REGISTRYINDEX, callback);
+ luaL_unref(L, LUA_REGISTRYINDEX, data);
}
honey_window_resize_callback_ref = LUA_NOREF;
@@ -234,13 +236,20 @@ int honey_window_resize_unbind(lua_State* L)
int honey_window_focus_bind(lua_State* L)
{
- if (!honey_lua_validate_types(L, 2, HONEY_FUNCTION, HONEY_ANY))
- lua_error(L);
+ int choice = honey_lua_parse_arguments
+ (L, 2,
+ 1, HONEY_FUNCTION,
+ 2, HONEY_FUNCTION, HONEY_ANY);
+
+ honey_window_focus_unbind(L);
lua_pushvalue(L, 1);
honey_window_focus_callback_ref = luaL_ref(L, LUA_REGISTRYINDEX);
- lua_pushvalue(L, 2);
- honey_window_focus_callback_data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ if (choice == 1) {
+ lua_pushvalue(L, 2);
+ honey_window_focus_callback_data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+ }
return 0;
}
@@ -253,13 +262,11 @@ int honey_window_focus_unbind(lua_State* L)
int data = honey_window_focus_callback_data_ref;
if (callback != LUA_NOREF) {
- lua_pushnil(L);
- lua_rawseti(L, LUA_REGISTRYINDEX, callback);
+ luaL_unref(L, LUA_REGISTRYINDEX, callback);
}
if (data != LUA_NOREF && data != LUA_REFNIL) {
- lua_pushnil(L);
- lua_rawseti(L, LUA_REGISTRYINDEX, callback);
+ luaL_unref(L, LUA_REGISTRYINDEX, callback);
}
honey_window_focus_callback_ref = LUA_NOREF;