diff options
Diffstat (limited to 'src/window')
-rw-r--r-- | src/window/window.c | 268 | ||||
-rw-r--r-- | src/window/window.h | 86 |
2 files changed, 0 insertions, 354 deletions
diff --git a/src/window/window.c b/src/window/window.c deleted file mode 100644 index 6a1fe6f..0000000 --- a/src/window/window.c +++ /dev/null @@ -1,268 +0,0 @@ -#include "window.h" - -int honey_window_info_ref = LUA_NOREF; -int honey_window_resize_callback_ref = LUA_NOREF; -int honey_window_resize_callback_data_ref = LUA_NOREF; -int honey_window_focus_callback_ref = LUA_NOREF; -int honey_window_focus_callback_data_ref = LUA_NOREF; - -static void honey_glfw_window_resize_callback(honey_window window, - int width, int height) -{ - lua_State* L = glfwGetWindowUserPointer(window); - - int callback = honey_window_resize_callback_ref; - int data = honey_window_resize_callback_data_ref; - - if (callback == LUA_NOREF) - return; - - lua_rawgeti(L, LUA_REGISTRYINDEX, callback); - - lua_pushinteger(L, width); - lua_pushinteger(L, height); - - if (data == LUA_NOREF || data == LUA_REFNIL) - lua_pushnil(L); - else - lua_rawgeti(L, LUA_REGISTRYINDEX, data); - - honey_lua_pcall(L, 3, 0); -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -static void honey_glfw_window_focus_callback(honey_window window, - int focused) -{ - lua_State* L = glfwGetWindowUserPointer(window); - - int callback = honey_window_focus_callback_ref; - int data = honey_window_focus_callback_data_ref; - - if (callback == LUA_NOREF) - return; - - lua_rawgeti(L, LUA_REGISTRYINDEX, callback); - - lua_pushboolean(L, focused); - - if (data == LUA_NOREF || data == LUA_REFNIL) - lua_pushnil(L); - else - lua_rawgeti(L, LUA_REGISTRYINDEX, data); - - honey_lua_pcall(L, 2, 0); -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -bool honey_setup_window(lua_State* L) -{ - honey_window_information* info = lua_newuserdata(L, sizeof(honey_window_information)); - honey_window_info_ref = luaL_ref(L, LUA_REGISTRYINDEX); - - glfwInit(); - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - - info->window = glfwCreateWindow(HONEY_WINDOW_DEFAULT_WIDTH, - HONEY_WINDOW_DEFAULT_HEIGHT, - "honey", NULL, NULL); - - info->width = HONEY_WINDOW_DEFAULT_WIDTH; - info->height = HONEY_WINDOW_DEFAULT_WIDTH; - info->fullscreen = false; - - if (info->window == NULL) { - fprintf(stderr, "[honey] ERROR: failed to create window!\n"); - glfwTerminate(); - return false; - } - /* store lua state in window, so it's accessible from GLFW callbacks */ - glfwSetWindowUserPointer(info->window, L); - glfwMakeContextCurrent(info->window); - - if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) { - fprintf(stderr, "[honey] ERROR: failed to initialize GLAD!\n"); - glfwTerminate(); - return false; - } - - // Enable blending - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - // Enable depth testing - glEnable(GL_DEPTH_TEST); - - // Enable face culling - glEnable(GL_CULL_FACE); - - glfwSetWindowSizeCallback(info->window, honey_glfw_window_resize_callback); - 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); - return true; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -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); - - lua_rawgeti(L, LUA_REGISTRYINDEX, honey_window_info_ref); - honey_window_information* info = lua_touserdata(L, -1); - - if (fullscreen) { - glfwGetWindowSize(info->window, &(info->width), &(info->height)); - - GLFWmonitor* monitor = glfwGetPrimaryMonitor(); - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - glfwSetWindowMonitor(info->window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); - info->fullscreen = true; - } - else { - glfwSetWindowMonitor(info->window, NULL, 20, 20, info->width, info->height, 0); - info->fullscreen = false; - } - return 0; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -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); - - lua_rawgeti(L, LUA_REGISTRYINDEX, honey_window_info_ref); - honey_window_information* info = lua_touserdata(L, -1); - - glfwSetWindowTitle(info->window, title); - return 0; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -int honey_window_get_size(lua_State* L) -{ - lua_rawgeti(L, LUA_REGISTRYINDEX, honey_window_info_ref); - honey_window_information* info = lua_touserdata(L, -1); - - int width, height; - glfwGetWindowSize(info->window, &width, &height); - lua_pushinteger(L, width); - lua_pushinteger(L, height); - return 2; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -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); - - lua_rawgeti(L, LUA_REGISTRYINDEX, honey_window_info_ref); - honey_window_information* info = lua_touserdata(L, -1); - - glfwSetWindowSize(info->window, width, height); - return 0; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -int honey_window_resize_bind(lua_State* L) -{ - if (!honey_lua_validate_types(L, 2, HONEY_FUNCTION, HONEY_ANY)) - lua_error(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); - - return 0; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -int honey_window_resize_unbind(lua_State* L) -{ - int callback = honey_window_resize_callback_ref; - int data = honey_window_resize_callback_data_ref; - - if (callback != LUA_NOREF) { - lua_pushnil(L); - lua_rawseti(L, LUA_REGISTRYINDEX, callback); - } - - if (data != LUA_NOREF && data != LUA_REFNIL) { - lua_pushnil(L); - lua_rawseti(L, LUA_REGISTRYINDEX, callback); - } - - honey_window_resize_callback_ref = LUA_NOREF; - honey_window_resize_callback_data_ref = LUA_NOREF; - return 0; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -int honey_window_focus_bind(lua_State* L) -{ - if (!honey_lua_validate_types(L, 2, HONEY_FUNCTION, HONEY_ANY)) - lua_error(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); - - return 0; -} - -/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -int honey_window_focus_unbind(lua_State* L) -{ - int callback = honey_window_focus_callback_ref; - int data = honey_window_focus_callback_data_ref; - - if (callback != LUA_NOREF) { - lua_pushnil(L); - lua_rawseti(L, LUA_REGISTRYINDEX, callback); - } - - if (data != LUA_NOREF && data != LUA_REFNIL) { - lua_pushnil(L); - lua_rawseti(L, LUA_REGISTRYINDEX, callback); - } - - honey_window_focus_callback_ref = LUA_NOREF; - honey_window_focus_callback_data_ref = LUA_NOREF; - return 0; -} diff --git a/src/window/window.h b/src/window/window.h deleted file mode 100644 index 3ac982a..0000000 --- a/src/window/window.h +++ /dev/null @@ -1,86 +0,0 @@ -/** @file */ - -#ifndef HONEY_WINDOW_H -#define HONEY_WINDOW_H - -#include "../common.h" - -#define HONEY_WINDOW_DEFAULT_WIDTH 640 -#define HONEY_WINDOW_DEFAULT_HEIGHT 480 - -/** @brief Push the various honey.window table to the stack. - * - * @param[in] L The lua state to push to - * @param[in] window The window created by honey_setup() - * - * @returns Nothing. - */ -bool honey_setup_window(lua_State* L); - -/** @brief Set whether or not the window is fullscreen. - * - * Lua parameters: - * @param[in] fullscreen Boolean set to true if the window is to be fullscreen and false otherwise. - * - * @returns Nothing. - */ -int honey_window_set_fullscreen(lua_State* L); - -/** @brief Set the title of the window. - * - * @param[in] title String containing the desired window title. - * - * @returns Nothing. - */ -int honey_window_set_title(lua_State* L); - -/** @brief Get the current size of the window. - * - * @returns width, height numbers representing the window size in pixels. - */ -int honey_window_get_size(lua_State* L); - -/** @brief Set the current size of the window. - * - * @param[in] width Integer of the desired width in pixels. - * @param[in] height Integer of the desired height in pixels. - * - * @returns Nothing. - */ -int honey_window_set_size(lua_State* L); - -/** @brief Bind a call back to the window resize. - * - * @param[in] callback The callback function to call on a window resize. - * - * @returns Nothing. - */ -int honey_window_resize_bind(lua_State* L); - -/** @brief Unbind any callback that may be attached to the window resize. - * - * @returns Nothing. - */ -int honey_window_resize_unbind(lua_State* L); - -/** @brief Bind a callback to the window changing focus. - * - * The supplied callback function should be of the form - * function(boolean, data). The boolean is true if the window - * is gaining focus, and false if it is losing focus. The data is - * just the data parameter passed to this function. - * - * @param callback The callback function to call on a window resize. - * @param data Data to send to the callback. - * - * @returns Nothing. - */ -int honey_window_focus_bind(lua_State* L); - -/** @brief Unbind any callback that may be attached to the window focus. - * - * @returns Nothing. - */ -int honey_window_focus_unbind(lua_State* L); - -#endif |