From 56812c9af55b776db0a6b5f263e747492bc7d47b Mon Sep 17 00:00:00 2001 From: Joursoir Date: Thu, 1 Apr 2021 22:20:42 +0000 Subject: Events: add own key codes, win resize and mouse scroll handle --- src/window/Events.cpp | 157 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 3 deletions(-) (limited to 'src/window/Events.cpp') diff --git a/src/window/Events.cpp b/src/window/Events.cpp index 09f6acd..8799853 100644 --- a/src/window/Events.cpp +++ b/src/window/Events.cpp @@ -1,16 +1,21 @@ #include -#include #include #include "Events.hpp" +#include "Window.hpp" +#include "../debug.hpp" -Events::Events() : cur_frame(0), delta_x(0.0), delta_y(0.0), - x(0.0), y(0.0), cursor_locked(false) +static int get_std_key(int glfw_key); + +Events::Events(Window *w) : master(w), cur_frame(0), delta_x(0.0), delta_y(0.0), + x(0.0), y(0.0), scroll_dx(0), scroll_dy(0), cursor_locked(false) { keys = new bool[MAX_KEYS]; memset(keys, false, MAX_KEYS * sizeof(bool)); frames = new unsigned int[MAX_KEYS]; memset(frames, 0, MAX_KEYS * sizeof(unsigned int)); + + glfwGetCursorPos(w->GetWin(), &x, &y); } Events::~Events() @@ -46,6 +51,10 @@ bool Events::Jclicked(int button) void Events::NextFrame() { + delta_x = 0; + delta_y = 0; + scroll_dx = 0; + scroll_dy = 0; cur_frame++; } @@ -53,6 +62,10 @@ void Events::NextFrame() void Events::KeyHandle(int key, int scancode, int action, int mode) { + key = get_std_key(key); + if(key == KEY_UNKNOWN) + return; + if(action == GLFW_PRESS) { keys[key] = true; frames[key] = cur_frame; @@ -83,3 +96,141 @@ void Events::MouseButtonHandle(int button, int action, int mode) frames[MOUSE_BUTTONS + button] = cur_frame; } } + +void Events::WindowResizeHandle(int width, int height) +{ + master->Resize(width, height); +} + +void Events::MouseScrollHandle(double xoffset, double yoffset) +{ + scroll_dx = xoffset; + scroll_dy = yoffset; +} + +int get_std_key(int glfw_key) +{ + switch(glfw_key) { + case GLFW_KEY_SPACE: return KEY_SPACE; + case GLFW_KEY_APOSTROPHE: return KEY_APOSTROPHE; + case GLFW_KEY_COMMA: return KEY_COMMA; + case GLFW_KEY_MINUS: return KEY_MINUS; + case KEY_PERIOD: return GLFW_KEY_PERIOD; + case KEY_SLASH: return GLFW_KEY_SLASH; + case KEY_0: return GLFW_KEY_0; + case KEY_1: return GLFW_KEY_1; + case KEY_2: return GLFW_KEY_2; + case KEY_3: return GLFW_KEY_3; + case KEY_4: return GLFW_KEY_4; + case KEY_5: return GLFW_KEY_5; + case KEY_6: return GLFW_KEY_6; + case KEY_7: return GLFW_KEY_7; + case KEY_8: return GLFW_KEY_8; + case KEY_9: return GLFW_KEY_9; + case KEY_KEY_SEMICOLON: return GLFW_KEY_SEMICOLON; + case GLFW_KEY_EQUAL: return KEY_EQUAL; + case GLFW_KEY_A: return KEY_A; + case GLFW_KEY_B: return KEY_B; + case GLFW_KEY_C: return KEY_C; + case GLFW_KEY_D: return KEY_D; + case GLFW_KEY_E: return KEY_E; + case GLFW_KEY_F: return KEY_F; + case GLFW_KEY_G: return KEY_G; + case GLFW_KEY_H: return KEY_H; + case GLFW_KEY_I: return KEY_I; + case GLFW_KEY_J: return KEY_J; + case GLFW_KEY_K: return KEY_K; + case GLFW_KEY_L: return KEY_L; + case GLFW_KEY_M: return KEY_M; + case GLFW_KEY_N: return KEY_N; + case GLFW_KEY_O: return KEY_O; + case GLFW_KEY_P: return KEY_P; + case GLFW_KEY_Q: return KEY_Q; + case GLFW_KEY_R: return KEY_R; + case GLFW_KEY_S: return KEY_S; + case GLFW_KEY_T: return KEY_T; + case GLFW_KEY_U: return KEY_U; + case GLFW_KEY_V: return KEY_V; + case GLFW_KEY_W: return KEY_W; + case GLFW_KEY_X: return KEY_X; + case GLFW_KEY_Y: return KEY_Y; + case GLFW_KEY_Z: return KEY_Z; + case GLFW_KEY_LEFT_BRACKET: return KEY_LEFT_BRACKET; + case GLFW_KEY_BACKSLASH: return KEY_BACKSLASH; + case GLFW_KEY_RIGHT_BRACKET: return KEY_RIGHT_BRACKET; + case GLFW_KEY_GRAVE_ACCENT: return KEY_GRAVE_ACCENT; + case GLFW_KEY_WORLD_1: return KEY_WORLD_1; + case GLFW_KEY_WORLD_2: return KEY_WORLD_2; + case GLFW_KEY_ESCAPE: return KEY_ESCAPE; + case GLFW_KEY_ENTER: return KEY_ENTER; + case GLFW_KEY_TAB: return KEY_TAB; + case GLFW_KEY_BACKSPACE: return KEY_BACKSPACE; + case GLFW_KEY_INSERT: return KEY_INSERT; + case GLFW_KEY_DELETE: return KEY_DELETE; + case GLFW_KEY_RIGHT: return KEY_RIGHT; + case GLFW_KEY_LEFT: return KEY_LEFT; + case GLFW_KEY_DOWN: return KEY_DOWN; + case GLFW_KEY_UP: return KEY_UP; + case GLFW_KEY_PAGE_UP: return KEY_PAGE_UP; + case GLFW_KEY_PAGE_DOWN: return KEY_PAGE_DOWN; + case GLFW_KEY_HOME: return KEY_HOME; + case GLFW_KEY_END: return KEY_END; + case GLFW_KEY_CAPS_LOCK: return KEY_CAPS_LOCK; + case GLFW_KEY_SCROLL_LOCK: return KEY_SCROLL_LOCK; + case GLFW_KEY_NUM_LOCK: return KEY_NUM_LOCK; + case GLFW_KEY_PRINT_SCREEN: return KEY_PRINT_SCREEN; + case GLFW_KEY_PAUSE: return KEY_PAUSE; + case GLFW_KEY_F1: return KEY_F1; + case GLFW_KEY_F2: return KEY_F2; + case GLFW_KEY_F3: return KEY_F3; + case GLFW_KEY_F4: return KEY_F4; + case GLFW_KEY_F5: return KEY_F5; + case GLFW_KEY_F6: return KEY_F6; + case GLFW_KEY_F7: return KEY_F7; + case GLFW_KEY_F8: return KEY_F8; + case GLFW_KEY_F9: return KEY_F9; + case GLFW_KEY_F10: return KEY_F10; + case GLFW_KEY_F11: return KEY_F11; + case GLFW_KEY_F12: return KEY_F12; + case GLFW_KEY_F13: return KEY_F13; + case GLFW_KEY_F14: return KEY_F14; + case GLFW_KEY_F15: return KEY_F15; + case GLFW_KEY_F16: return KEY_F16; + case GLFW_KEY_F17: return KEY_F17; + case GLFW_KEY_F18: return KEY_F18; + case GLFW_KEY_F19: return KEY_F19; + case GLFW_KEY_F20: return KEY_F20; + case GLFW_KEY_F21: return KEY_F21; + case GLFW_KEY_F22: return KEY_F22; + case GLFW_KEY_F23: return KEY_F23; + case GLFW_KEY_F24: return KEY_F24; + case GLFW_KEY_F25: return KEY_F25; + case GLFW_KEY_KP_0: return KEY_KP_0; + case GLFW_KEY_KP_1: return KEY_KP_1; + case GLFW_KEY_KP_2: return KEY_KP_2; + case GLFW_KEY_KP_3: return KEY_KP_3; + case GLFW_KEY_KP_4: return KEY_KP_4; + case GLFW_KEY_KP_5: return KEY_KP_5; + case GLFW_KEY_KP_6: return KEY_KP_6; + case GLFW_KEY_KP_7: return KEY_KP_7; + case GLFW_KEY_KP_8: return KEY_KP_8; + case GLFW_KEY_KP_9: return KEY_KP_9; + case GLFW_KEY_KP_DECIMAL: return KEY_KP_DECIMAL; + case GLFW_KEY_KP_DIVIDE: return KEY_KP_DIVIDE; + case GLFW_KEY_KP_MULTIPLY: return KEY_KP_MULTIPLY; + case GLFW_KEY_KP_SUBTRACT: return KEY_KP_SUBTRACT; + case GLFW_KEY_KP_ADD: return KEY_KP_ADD; + case GLFW_KEY_KP_ENTER: return KEY_KP_ENTER; + case GLFW_KEY_KP_EQUAL: return KEY_KP_EQUAL; + case GLFW_KEY_LEFT_SHIFT: return KEY_LEFT_SHIFT; + case GLFW_KEY_LEFT_CONTROL: return KEY_LEFT_CONTROL; + case GLFW_KEY_LEFT_ALT: return KEY_LEFT_ALT; + case GLFW_KEY_LEFT_SUPER: return KEY_LEFT_SUPER; + case GLFW_KEY_RIGHT_SHIFT: return KEY_RIGHT_SHIFT; + case GLFW_KEY_RIGHT_CONTROL: return KEY_RIGHT_CONTROL; + case GLFW_KEY_RIGHT_ALT: return KEY_RIGHT_ALT; + case GLFW_KEY_RIGHT_SUPER: return KEY_RIGHT_SUPER; + case GLFW_KEY_MENU: return KEY_MENU; + default: return KEY_UNKNOWN; + } +} -- cgit v1.2.3-18-g5258