aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2021-01-16 23:22:30 +0100
committerladevieq <ladevie.quentin@gmail.com>2021-01-16 23:25:16 +0100
commitdfc9a9b37d544d3a357b560829d2a9a48e5e5f5b (patch)
treeed7233644518f134081ca2878b526ae90812e130
parentc4ed9a51d9630ceb87d5e4a256aee6cbdb82b0b9 (diff)
Add windows window event loop
-rw-r--r--include/window.hpp6
-rw-r--r--src/main.cpp2
-rw-r--r--src/window.cpp19
3 files changed, 27 insertions, 0 deletions
diff --git a/include/window.hpp b/include/window.hpp
index c0e4756..550463d 100644
--- a/include/window.hpp
+++ b/include/window.hpp
@@ -11,6 +11,8 @@ class window {
public:
window(uint32_t width, uint32_t height);
+ void poll_events();
+
xcb_connection_t* connection;
xcb_window_t win;
@@ -26,6 +28,10 @@ class window {
public:
window(uint32_t width, uint32_t height);
+ void poll_events();
+
+ LRESULT message_handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam);
+
static LRESULT CALLBACK window_procedure(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam);
HWND win_handle;
diff --git a/src/main.cpp b/src/main.cpp
index 0a357f8..0176fdf 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -153,6 +153,8 @@ int main() {
vkrenderer renderer { wnd, inputs };
while(wnd.isOpen) {
+ wnd.poll_events();
+
// To start a frame capture, call StartFrameCapture.
// You can specify NULL, NULL for the device to capture on if you have only one device and
// either no windows at all or only one window, and it will capture from that device.
diff --git a/src/window.cpp b/src/window.cpp
index a55a439..489473b 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -41,6 +41,7 @@ LRESULT CALLBACK window::window_procedure(HWND hwnd, UINT umsg, WPARAM wparam, L
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)win);
} else {
win = (window*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ return win->message_handler(hwnd, umsg, wparam, lparam);
}
return DefWindowProc(hwnd, umsg, wparam, lparam);
@@ -82,4 +83,22 @@ window::window(uint32_t width, uint32_t height)
isOpen = true;
}
+
+void window::poll_events() {
+ MSG msg = {};
+
+ while (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+}
+
+LRESULT window::message_handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) {
+ switch(umsg) {
+ default:
+ return DefWindowProc(hwnd, umsg, wparam, lparam);
+ }
+
+ return 0;
+}
#endif