From 73c927fdaff5593dbf25ada893558b12b7b5ab50 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Thu, 5 Sep 2024 19:07:48 -0400 Subject: [PATCH] Added window callbacks for focused and closed --- Nuake/src/Window.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ Nuake/src/Window.h | 13 +++++++++++++ 2 files changed, 53 insertions(+) diff --git a/Nuake/src/Window.cpp b/Nuake/src/Window.cpp index dc75d2af..d8f6f969 100644 --- a/Nuake/src/Window.cpp +++ b/Nuake/src/Window.cpp @@ -88,6 +88,20 @@ int Window::Init() glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwSetWindowUserPointer(window, this); + + glfwSetWindowCloseCallback(window, [](GLFWwindow* nativeWindow) + { + Window* window = reinterpret_cast(glfwGetWindowUserPointer(nativeWindow)); + window->OnWindowClosed(*window); + }); + + glfwSetWindowFocusCallback(window, [](GLFWwindow* nativeWindow, int focused) + { + Window* window = reinterpret_cast(glfwGetWindowUserPointer(nativeWindow)); + window->OnWindowFocused(*window, static_cast(focused)); + }); + // TODO: have clear color in environnement. glClearColor(0.f, 0.f, 0.f, 1.0f); @@ -324,6 +338,32 @@ void Window::Maximize() glfwMaximizeWindow(this->window); } +void Window::SetOnWindowFocusedCallback(std::function callback) +{ + onWindowFocusedCallback = callback; +} + +void Window::SetOnWindowClosedCallback(std::function callback) +{ + onWindowClosedCallback = callback; +} + +void Window::OnWindowFocused(Window& window, bool focused) +{ + if (onWindowFocusedCallback) + { + onWindowFocusedCallback(window, focused); + } +} + +void Window::OnWindowClosed(Window& window) +{ + if (onWindowClosedCallback) + { + onWindowClosedCallback(window); + } +} + void Window::InitImgui() { ImGui::CreateContext(); diff --git a/Nuake/src/Window.h b/Nuake/src/Window.h index 2c37828c..fab81918 100644 --- a/Nuake/src/Window.h +++ b/Nuake/src/Window.h @@ -52,6 +52,12 @@ namespace Nuake void SetFullScreen(bool enabled); void Maximize(); + void OnWindowFocused(Window& window, bool focused); + void OnWindowClosed(Window& window); + + void SetOnWindowFocusedCallback(std::function callback); + void SetOnWindowClosedCallback(std::function callback); + private: const std::string DEFAULT_TITLE = "Untitled Window"; const uint32_t DEFAULT_WIDTH = 1280; @@ -67,6 +73,13 @@ namespace Nuake Ref framebuffer; Ref scene; + // Callbacks + std::function onWindowClosedCallback; + std::function onWindowFocusedCallback; + void InitImgui(); + + private: + }; }