aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp22
-rw-r--r--src/window.cpp28
2 files changed, 43 insertions, 7 deletions
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) {