Factor out key handling out of the window and into the renderer

This commit is contained in:
Nathan Chapman 2025-07-13 20:49:21 -06:00
parent 0123bb5527
commit f4328b0b6e
4 changed files with 18 additions and 19 deletions

View File

@ -163,3 +163,9 @@ void cleanup_renderer(Renderer *renderer) {
cleanup_frame_buffer(&renderer->frame_buffer);
}
void handle_key_events(Renderer *renderer, s32 key, s32 scancode, s32 action, s32 mods) {
if (glfwGetKey(renderer->render_data.glfw_window, GLFW_KEY_SPACE) == GLFW_PRESS) {
renderer->render_data.use_alt_shader = !renderer->render_data.use_alt_shader;
}
}

View File

@ -35,4 +35,4 @@ void set_renderer_size(Renderer *renderer, u32 width, u32 height);
void draw_renderer(Renderer *renderer);
void upload_renderer_data(Renderer *renderer, Mesh *vertex_data);
void cleanup_renderer(Renderer *renderer);
void handle_key_events(Renderer *renderer, s32 key, s32 scancode, s32 action, s32 mods);

View File

@ -40,11 +40,18 @@ bool init_window(Window *window, u32 width, u32 height, string title) {
log(1, "%s: Renderer initialized\n", __FUNCTION__);
glfwSetWindowUserPointer(window->glfw_window, window);
glfwSetWindowUserPointer(window->glfw_window, window->renderer);
glfwSetWindowSizeCallback(window->glfw_window, [](GLFWwindow *glfw_window, s32 width, s32 height) {
Renderer* renderer = static_cast<Renderer*>(glfwGetWindowUserPointer(glfw_window));
set_renderer_size(renderer, width, height);
});
glfwSetKeyCallback(window->glfw_window, [](GLFWwindow *glfw_window, s32 key, s32 scancode, s32 action, s32 mods) {
Renderer* renderer = static_cast<Renderer*>(glfwGetWindowUserPointer(glfw_window));
handle_key_events(renderer, key, scancode, action, mods);
});
glfwSetWindowSizeCallback(window->glfw_window, handle_window_resize_events);
glfwSetWindowCloseCallback(window->glfw_window, handle_close);
glfwSetKeyCallback(window->glfw_window, handle_key_events);
// Have to disable so ImGui will accept mouse events
// glfwSetCursorPosCallback(window->glfw_window, handle_mouse_position_events);
// glfwSetMouseButtonCallback(window->glfw_window, handle_mouse_button_events);
@ -76,19 +83,6 @@ void cleanup(Window *window) {
glfwTerminate();
}
void handle_close(GLFWwindow *gl_window) {
Window *window = static_cast<Window *>(glfwGetWindowUserPointer(gl_window));
log(1, "%s: Window got close event... bye!\n", __FUNCTION__);
}
void handle_key_events(GLFWwindow *gl_window, s32 key, s32 scancode, s32 action, s32 mods) {
Window *window = static_cast<Window *>(glfwGetWindowUserPointer(gl_window));
if (glfwGetKey(window->glfw_window, GLFW_KEY_SPACE) == GLFW_PRESS) {
window->renderer->render_data.use_alt_shader = !window->renderer->render_data.use_alt_shader;
}
}
void handle_mouse_position_events(GLFWwindow *gl_window, f64 x_pos, f64 y_pos) {
Window *window = static_cast<Window *>(glfwGetWindowUserPointer(gl_window));
log(1, "%s: Mouse is at position %lf/%lf\n", __FUNCTION__, x_pos, y_pos);

View File

@ -13,7 +13,6 @@ bool init_window(Window *window, u32 width, u32 height, string title);
void main_loop(Window *window);
void cleanup(Window *window);
void handle_close(GLFWwindow *gl_window);
void handle_key_events(GLFWwindow *gl_window, s32 key, s32 scancode, s32 action, s32 mods);
void handle_mouse_position_events(GLFWwindow *gl_window, f64 x_pos, f64 y_pos);
void handle_mouse_button_events(GLFWwindow *gl_window, s32 button, s32 action, s32 mods);
void handle_window_resize_events(GLFWwindow *gl_window, s32 width, s32 height);