SDEngine
Game Engine
Loading...
Searching...
No Matches
Window.hpp
Go to the documentation of this file.
1// TODO(docs): Add file-level Doxygen header
2// - @file Window.hpp
3// - @brief Window abstraction over GLFW
4// - Event handling through callbacks
5// - Builder pattern for window creation
6#pragma once
7#define GLFW_INCLUDE_VULKAN
8#include <functional>
9#include <memory>
10
11#include <GLFW/glfw3.h>
12
13#include "LayerList.hpp"
14#include "SD/export.hpp"
16
17namespace sd {
18// TODO(docs): Document callback type aliases
19// - Each callback's signature and when it's called
20using ResizeCallbackFn = std::function<void(int, int)>;
21using KeyCallbackFn = std::function<void(int, int, int, int)>;
22using ScrollCallbackFn = std::function<void(double, double)>;
23using CursorCallbackFn = std::function<void(double, double)>;
24using MouseButtonCallbackFn = std::function<void(int, int, int)>;
25using RefreshCallbackFn = std::function<void()>;
26using CharCallbackFn = std::function<void(unsigned int)>;
27
28
29class Window;
30
31// TODO(docs): Document WindowDesc struct
32// - Each field's purpose
33// - Which are required vs optional
47
48
50public:
51 Window(int width, int height, const std::string& title);
52 explicit Window(const WindowDesc& desc);
53
54
55 Window(Window&&) = delete;
56 Window& operator=(Window&&) = delete;
57
58 Window(const Window&) = delete;
59 Window& operator=(const Window&) = delete;
63 static void wait_events() { glfwWaitEvents(); }
64
65
66 ~Window();
67 void set_resize_callback(const ResizeCallbackFn& callback) { m_resize_callback = callback; }
68 void set_key_callback(const KeyCallbackFn& callback) { m_key_callback = callback; }
69 void set_scroll_callback(const ScrollCallbackFn& callback) { m_scroll_callback = callback; }
70 void set_cursor_callback(const CursorCallbackFn& callback) { m_cursor_callback = callback; }
72 m_mouse_button_callback = callback;
73 }
74 void set_refresh_callback(const RefreshCallbackFn& callback) { m_refresh_callback = callback; }
75 void set_char_callback(const CharCallbackFn& callback) { m_char_callback = callback; }
76
77 [[nodiscard]] GLFWwindow* get_native_handle() const { return m_handle; }
78 [[nodiscard]] std::pair<int, int> get_window_size() const;
79 [[nodiscard]] std::pair<int, int> get_framebuffer_size() const;
80 [[nodiscard]] bool should_close() const { return glfwWindowShouldClose(m_handle); }
81 vk::UniqueSurfaceKHR
82 create_window_surface(vk::UniqueInstance& instance,
84 EventManager& get_event_manager() { return m_window_event_manager; }
85
87
88private:
90
91
99
101
102
103 static void dispatch_resize(GLFWwindow* window, int width, int height);
104 static void dispatch_close(GLFWwindow* window);
105 static void dispatch_key(GLFWwindow* window, int key, int scancode, int action, int mods);
106 static void dispatch_scroll(GLFWwindow* window, double xOffset, double yOffset);
107 static void dispatch_cursor(GLFWwindow* window, double xPos, double yPos);
108 static void dispatch_mouse_button(GLFWwindow* window, int button, int action, int mods);
109 static void dispatch_refresh(GLFWwindow* window);
110 static void dispatch_char_dispatch_char(GLFWwindow* window, unsigned int keycode);
111};
112
134} // namespace sd
Definition EventManager.hpp:20
Definition LayerList.hpp:21
Definition Window.hpp:113
WindowBuilder & set_refresh_callback_set_refresh_callback(const RefreshCallbackFn &callback)
Definition Window.cpp:222
WindowBuilder & set_title(const char *title)
Definition Window.cpp:183
WindowBuilder & set_scroll_callback(const ScrollCallbackFn &callback)
Definition Window.cpp:208
std::unique_ptr< Window > build() const
Definition Window.cpp:230
WindowBuilder & set_size(int width, int height)
Definition Window.cpp:187
WindowBuilder & set_width(int width)
Definition Window.cpp:192
WindowBuilder()
Definition Window.hpp:115
WindowBuilder & set_mouse_button_callback(const MouseButtonCallbackFn &callback)
Definition Window.cpp:217
WindowBuilder & set_height(int height)
Definition Window.cpp:196
WindowBuilder & set_char_callback(const CharCallbackFn &callback)
Definition Window.cpp:226
WindowBuilder & set_cursor_callback(const CursorCallbackFn &callback)
Definition Window.cpp:212
WindowBuilder & set_resize_callback(const ResizeCallbackFn &callback)
Definition Window.cpp:200
WindowBuilder & set_key_callback(const KeyCallbackFn &callback)
Definition Window.cpp:204
WindowDesc m_desc
Definition Window.hpp:132
Definition Window.hpp:49
LayerList layer_stack
Definition Window.hpp:86
ScrollCallbackFn m_scroll_callback
Definition Window.hpp:94
MouseButtonCallbackFn m_mouse_button_callback
Definition Window.hpp:96
Window(const Window &)=delete
void set_key_callback(const KeyCallbackFn &callback)
Definition Window.hpp:68
Window & operator=(Window &&)=delete
GLFWwindow * m_handle
Definition Window.hpp:89
void set_char_callback(const CharCallbackFn &callback)
Definition Window.hpp:75
void set_refresh_callback(const RefreshCallbackFn &callback)
Definition Window.hpp:74
CharCallbackFn m_char_callback
Definition Window.hpp:98
CursorCallbackFn m_cursor_callback
Definition Window.hpp:95
void set_resize_callback(const ResizeCallbackFn &callback)
Definition Window.hpp:67
Window & operator=(const Window &)=delete
void set_mouse_button_callback(const MouseButtonCallbackFn &callback)
Definition Window.hpp:71
RefreshCallbackFn m_refresh_callback
Definition Window.hpp:97
void set_cursor_callback(const CursorCallbackFn &callback)
Definition Window.hpp:70
ResizeCallbackFn m_resize_callback
Definition Window.hpp:92
Window(Window &&)=delete
static void wait_events()
ONLY CALL if ALL windows are minimized.
Definition Window.hpp:63
EventManager & get_event_manager()
Definition Window.hpp:84
GLFWwindow * get_native_handle() const
Definition Window.hpp:77
KeyCallbackFn m_key_callback
Definition Window.hpp:93
EventManager m_window_event_manager
Definition Window.hpp:100
void set_scroll_callback(const ScrollCallbackFn &callback)
Definition Window.hpp:69
bool should_close() const
Definition Window.hpp:80
Definition Application.hpp:28
std::function< void(int, int, int)> MouseButtonCallbackFn
Definition Window.hpp:24
std::function< void()> RefreshCallbackFn
Definition Window.hpp:25
std::function< void(double, double)> CursorCallbackFn
Definition Window.hpp:23
std::function< void(int, int)> ResizeCallbackFn
Definition Window.hpp:20
std::function< void(double, double)> ScrollCallbackFn
Definition Window.hpp:22
std::function< void(int, int, int, int)> KeyCallbackFn
Definition Window.hpp:21
std::function< void(unsigned int)> CharCallbackFn
Definition Window.hpp:26
Definition Window.hpp:34
int width
Definition Window.hpp:36
ScrollCallbackFn scroll_callback
Definition Window.hpp:41
int height
Definition Window.hpp:37
CharCallbackFn char_callback
Definition Window.hpp:45
MouseButtonCallbackFn mouse_button_callback
Definition Window.hpp:43
CursorCallbackFn cursor_callback
Definition Window.hpp:42
RefreshCallbackFn refresh_callback
Definition Window.hpp:44
ResizeCallbackFn resize_callback
Definition Window.hpp:39
const char * title
Definition Window.hpp:35
KeyCallbackFn key_callback
Definition Window.hpp:40
constexpr T g_type_max
Definition types.hpp:21