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
10#include <GLFW/glfw3.h>
11
12#include "LayerList.hpp"
13#include "SD/arena.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
29struct Window;
30
31// TODO(docs): Document WindowDesc struct
32// - Each field's purpose
33// - Which are required vs optional
47
48
50 Window(int width, int height, const std::string& title);
51 explicit Window(const WindowDesc& desc);
52
53
54 Window(Window&&) = delete;
55 Window& operator=(Window&&) = delete;
56
57 Window(const Window&) = delete;
58 Window& operator=(const Window&) = delete;
62 static void wait_events() { glfwWaitEvents(); }
63
64
65 ~Window();
66 void set_resize_callback(const ResizeCallbackFn& callback) { m_resize_callback = callback; }
67 void set_key_callback(const KeyCallbackFn& callback) { m_key_callback = callback; }
68 void set_scroll_callback(const ScrollCallbackFn& callback) { m_scroll_callback = callback; }
69 void set_cursor_callback(const CursorCallbackFn& callback) { m_cursor_callback = callback; }
71 m_mouse_button_callback = callback;
72 }
73 void set_refresh_callback(const RefreshCallbackFn& callback) { m_refresh_callback = callback; }
74 void set_char_callback(const CharCallbackFn& callback) { m_char_callback = callback; }
75
76 [[nodiscard]] GLFWwindow* get_native_handle() const { return m_handle; }
77 [[nodiscard]] std::pair<int, int> get_window_size() const;
78 [[nodiscard]] std::pair<int, int> get_framebuffer_size() const;
79 [[nodiscard]] bool should_close() const { return glfwWindowShouldClose(m_handle); }
80 vk::UniqueSurfaceKHR
81 create_window_surface(vk::UniqueInstance& instance,
83 EventManager& get_event_manager() { return m_window_event_manager; }
84
86
87
89
90
98
100
101
102 static void dispatch_resize(GLFWwindow* window, int width, int height);
103 static void dispatch_close(GLFWwindow* window);
104 static void dispatch_key(GLFWwindow* window, int key, int scancode, int action, int mods);
105 static void dispatch_scroll(GLFWwindow* window, double xOffset, double yOffset);
106 static void dispatch_cursor(GLFWwindow* window, double xPos, double yPos);
107 static void dispatch_mouse_button(GLFWwindow* window, int button, int action, int mods);
108 static void dispatch_refresh(GLFWwindow* window);
109 static void dispatch_char_dispatch_char(GLFWwindow* window, unsigned int keycode);
110};
111
130} // namespace sd
Definition Application.hpp:22
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 arena.hpp:85
Definition EventManager.hpp:12
Definition LayerList.hpp:15
Definition Window.hpp:112
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
WindowBuilder & set_size(int width, int height)
Definition Window.cpp:187
WindowBuilder & set_width(int width)
Definition Window.cpp:192
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
Window * build(Arena *arena) const
Definition Window.cpp:230
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:128
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
Definition Window.hpp:49
LayerList layer_stack
Definition Window.hpp:85
ScrollCallbackFn m_scroll_callback
Definition Window.hpp:93
MouseButtonCallbackFn m_mouse_button_callback
Definition Window.hpp:95
Window(const Window &)=delete
void set_key_callback(const KeyCallbackFn &callback)
Definition Window.hpp:67
Window & operator=(Window &&)=delete
GLFWwindow * m_handle
Definition Window.hpp:88
void set_char_callback(const CharCallbackFn &callback)
Definition Window.hpp:74
void set_refresh_callback(const RefreshCallbackFn &callback)
Definition Window.hpp:73
CharCallbackFn m_char_callback
Definition Window.hpp:97
CursorCallbackFn m_cursor_callback
Definition Window.hpp:94
void set_resize_callback(const ResizeCallbackFn &callback)
Definition Window.hpp:66
Window & operator=(const Window &)=delete
void set_mouse_button_callback(const MouseButtonCallbackFn &callback)
Definition Window.hpp:70
RefreshCallbackFn m_refresh_callback
Definition Window.hpp:96
void set_cursor_callback(const CursorCallbackFn &callback)
Definition Window.hpp:69
ResizeCallbackFn m_resize_callback
Definition Window.hpp:91
Window(Window &&)=delete
static void wait_events()
ONLY CALL if ALL windows are minimized.
Definition Window.hpp:62
EventManager & get_event_manager()
Definition Window.hpp:83
GLFWwindow * get_native_handle() const
Definition Window.hpp:76
KeyCallbackFn m_key_callback
Definition Window.hpp:92
EventManager m_window_event_manager
Definition Window.hpp:99
void set_scroll_callback(const ScrollCallbackFn &callback)
Definition Window.hpp:68
bool should_close() const
Definition Window.hpp:79
consteval U64 type_id_of()
Definition type_id.hpp:6