aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/window.hpp22
-rw-r--r--src/main.cpp22
-rw-r--r--src/window.cpp28
3 files changed, 65 insertions, 7 deletions
diff --git a/include/window.hpp b/include/window.hpp
index 85f0a18..7667bbc 100644
--- a/include/window.hpp
+++ b/include/window.hpp
@@ -16,6 +16,22 @@ class vkrenderer;
#include <Windows.h>
#endif
+enum MODIFIERS {
+ SHIFT = 1,
+ LOCK = 2,
+ CTRL = 4,
+ ALT = 8,
+ MOD2 = 16,
+ MOD3 = 32,
+ MOD4 = 64,
+ MOD5 = 128,
+ BUTTON1 = 256,
+ BUTTON2 = 512,
+ BUTTON3 = 1024,
+ BUTTON4 = 2048,
+ BUTTON5 = 4096,
+};
+
enum KEYS {
SPACE,
Z,
@@ -29,13 +45,19 @@ enum EVENT_TYPES: int32_t {
RESIZE,
KEY_PRESS,
KEY_RELEASE,
+ BUTTON_PRESS,
+ BUTTON_RELEASE,
+ MOVE
};
struct event {
uint32_t width;
uint32_t height;
// KEYS key;
+ uint32_t modifiers;
uint32_t keycode;
+ int32_t x;
+ int32_t y;
EVENT_TYPES type;
};
diff --git a/src/main.cpp b/src/main.cpp
index fb6319e..d7e6462 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -72,19 +72,33 @@ int main() {
break;
}
case EVENT_TYPES::KEY_PRESS: {
+ auto move_speed = 0.1;
+ if (event.modifiers & MODIFIERS::SHIFT) {
+ move_speed *= 10;
+ }
+
switch((uint8_t)event.keycode) {
case('w'): {
- renderer.mapped_data->cam.move(renderer.mapped_data->cam.forward * 0.1);
+ renderer.mapped_data->cam.move(renderer.mapped_data->cam.forward * move_speed);
break;
}
case('s'): {
- renderer.mapped_data->cam.move(-renderer.mapped_data->cam.forward * 0.1);
+ renderer.mapped_data->cam.move(-renderer.mapped_data->cam.forward * move_speed);
+ break;
+ }
+ case('d'): {
+ renderer.mapped_data->cam.move(renderer.mapped_data->cam.right * move_speed);
+ break;
+ }
+ case('a'): {
+ renderer.mapped_data->cam.move(-renderer.mapped_data->cam.right * move_speed);
break;
}
- default:
- std::cerr << (uint8_t)event.keycode << std::endl;
}
}
+ case EVENT_TYPES::MOVE: {
+ std::cerr << "X : " << event.x << " Y : " << event.y << std::endl;
+ }
default: {
}
}
diff --git a/src/window.cpp b/src/window.cpp
index 34427ce..43fff2a 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -15,8 +15,10 @@ window::window(uint32_t width, uint32_t height)
auto screen_info = xcb_setup_roots_iterator(setup).data;
uint32_t events[] = {
- XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_KEY_PRESS |
- XCB_EVENT_MASK_KEY_RELEASE,
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY |
+ XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_KEY_RELEASE |
+ XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE |
+ XCB_EVENT_MASK_POINTER_MOTION,
};
xcb_create_window(
connection,
@@ -120,14 +122,34 @@ void window::poll_events() {
auto key_press_event = (xcb_key_press_event_t*)event;
auto keysym = xkb_state_key_get_one_sym(keyboard_state, key_press_event->detail);
struct event new_event = {
- .type = EVENT_TYPES::KEY_PRESS
+ .type = event->response_type == XCB_KEY_PRESS ? EVENT_TYPES::KEY_PRESS :EVENT_TYPES::KEY_RELEASE
};
+ new_event.modifiers = key_press_event->state;
new_event.keycode = keysym;
events.push_back(new_event);
break;
}
+ case XCB_BUTTON_RELEASE:
+ case XCB_BUTTON_PRESS: {
+ auto key_press_event = (xcb_key_press_event_t*)event;
+ struct event new_event = {
+ .type = event->response_type == XCB_BUTTON_PRESS ? EVENT_TYPES::BUTTON_PRESS :EVENT_TYPES::BUTTON_RELEASE
+ };
+
+ events.push_back(new_event);
+ break;
+ }
+ case XCB_MOTION_NOTIFY: {
+ auto motion_event = (xcb_motion_notify_event_t*)event;
+ events.push_back({
+ .x = motion_event->event_x,
+ .y = motion_event->event_y,
+ .type = EVENT_TYPES::MOVE,
+ });
+ break;
+ }
case XCB_CLIENT_MESSAGE: {
auto client_message_event = (xcb_client_message_event_t*)event;
if (client_message_event->data.data32[0] == win_delete_atom) {