|
11 | 11 |
|
12 | 12 | GraphicsDevice gGraphicsDevice; |
13 | 13 |
|
| 14 | +////////////////////////////////////////////////////////////////////////// |
| 15 | + |
| 16 | +// glfw to native input mapping |
| 17 | +static eKeycode GlfwKeycodeToNative(int keycode) |
| 18 | +{ |
| 19 | + switch (keycode) |
| 20 | + { |
| 21 | + case GLFW_KEY_ESCAPE: return eKeycode_ESCAPE; |
| 22 | + case GLFW_KEY_SPACE: return eKeycode_SPACE; |
| 23 | + case GLFW_KEY_PAGE_UP: return eKeycode_PAGE_UP; |
| 24 | + case GLFW_KEY_PAGE_DOWN: return eKeycode_PAGE_DOWN; |
| 25 | + case GLFW_KEY_HOME: return eKeycode_HOME; |
| 26 | + case GLFW_KEY_END: return eKeycode_END; |
| 27 | + case GLFW_KEY_INSERT: return eKeycode_INSERT; |
| 28 | + case GLFW_KEY_DELETE: return eKeycode_DELETE; |
| 29 | + case GLFW_KEY_RIGHT_CONTROL: return eKeycode_RIGHT_CTRL; |
| 30 | + case GLFW_KEY_LEFT_CONTROL: return eKeycode_LEFT_CTRL; |
| 31 | + case GLFW_KEY_BACKSPACE: return eKeycode_BACKSPACE; |
| 32 | + case GLFW_KEY_ENTER: return eKeycode_ENTER; |
| 33 | + case GLFW_KEY_TAB: return eKeycode_TAB; |
| 34 | + case GLFW_KEY_GRAVE_ACCENT: return eKeycode_TILDE; |
| 35 | + case GLFW_KEY_F1: return eKeycode_F1; |
| 36 | + case GLFW_KEY_F2: return eKeycode_F2; |
| 37 | + case GLFW_KEY_F3: return eKeycode_F3; |
| 38 | + case GLFW_KEY_F4: return eKeycode_F4; |
| 39 | + case GLFW_KEY_F5: return eKeycode_F5; |
| 40 | + case GLFW_KEY_F6: return eKeycode_F6; |
| 41 | + case GLFW_KEY_F7: return eKeycode_F7; |
| 42 | + case GLFW_KEY_F8: return eKeycode_F8; |
| 43 | + case GLFW_KEY_F9: return eKeycode_F9; |
| 44 | + case GLFW_KEY_F10: return eKeycode_F10; |
| 45 | + case GLFW_KEY_F11: return eKeycode_F11; |
| 46 | + case GLFW_KEY_F12: return eKeycode_F12; |
| 47 | + case GLFW_KEY_A: return eKeycode_A; |
| 48 | + case GLFW_KEY_C: return eKeycode_C; |
| 49 | + case GLFW_KEY_F: return eKeycode_F; |
| 50 | + case GLFW_KEY_V: return eKeycode_V; |
| 51 | + case GLFW_KEY_X: return eKeycode_X; |
| 52 | + case GLFW_KEY_W: return eKeycode_W; |
| 53 | + case GLFW_KEY_D: return eKeycode_D; |
| 54 | + case GLFW_KEY_S: return eKeycode_S; |
| 55 | + case GLFW_KEY_Y: return eKeycode_Y; |
| 56 | + case GLFW_KEY_Z: return eKeycode_Z; |
| 57 | + case GLFW_KEY_R: return eKeycode_R; |
| 58 | + case GLFW_KEY_0: return eKeycode_0; |
| 59 | + case GLFW_KEY_1: return eKeycode_1; |
| 60 | + case GLFW_KEY_2: return eKeycode_2; |
| 61 | + case GLFW_KEY_3: return eKeycode_3; |
| 62 | + case GLFW_KEY_4: return eKeycode_4; |
| 63 | + case GLFW_KEY_5: return eKeycode_5; |
| 64 | + case GLFW_KEY_6: return eKeycode_6; |
| 65 | + case GLFW_KEY_7: return eKeycode_7; |
| 66 | + case GLFW_KEY_8: return eKeycode_8; |
| 67 | + case GLFW_KEY_9: return eKeycode_9; |
| 68 | + case GLFW_KEY_LEFT: return eKeycode_LEFT; |
| 69 | + case GLFW_KEY_RIGHT: return eKeycode_RIGHT; |
| 70 | + case GLFW_KEY_UP: return eKeycode_UP; |
| 71 | + case GLFW_KEY_DOWN: return eKeycode_DOWN; |
| 72 | + } |
| 73 | + return eKeycode_null; |
| 74 | +} |
| 75 | + |
| 76 | +static eMButton GlfwMouseButtonToNative(int mbutton) |
| 77 | +{ |
| 78 | + switch (mbutton) |
| 79 | + { |
| 80 | + case GLFW_MOUSE_BUTTON_LEFT: return eMButton_LEFT; |
| 81 | + case GLFW_MOUSE_BUTTON_RIGHT: return eMButton_RIGHT; |
| 82 | + case GLFW_MOUSE_BUTTON_MIDDLE: return eMButton_MIDDLE; |
| 83 | + } |
| 84 | + return eMButton_null; |
| 85 | +} |
| 86 | + |
| 87 | +////////////////////////////////////////////////////////////////////////// |
| 88 | + |
14 | 89 | GraphicsDevice::GraphicsDevice() |
15 | 90 | : mCurrentStates() |
16 | 91 | , mViewportRect() |
@@ -90,17 +165,25 @@ bool GraphicsDevice::Initialize(int screensizex, int screensizey, bool fullscree |
90 | 165 | ::glfwMakeContextCurrent(graphicsWindow); |
91 | 166 | ::glfwSetMouseButtonCallback(graphicsWindow, [](GLFWwindow*, int button, int action, int mods) |
92 | 167 | { |
93 | | - if (action != GLFW_REPEAT) |
| 168 | + if (action == GLFW_REPEAT) |
| 169 | + return; |
| 170 | + |
| 171 | + eMButton mbuttonNative = GlfwMouseButtonToNative(button); |
| 172 | + if (mbuttonNative != eMButton_null) |
94 | 173 | { |
95 | | - MouseButtonInputEvent ev { button, mods, action == GLFW_PRESS }; |
| 174 | + MouseButtonInputEvent ev { mbuttonNative, mods, action == GLFW_PRESS }; |
96 | 175 | gSystem.HandleEvent(ev); |
97 | 176 | } |
98 | 177 | }); |
99 | 178 | ::glfwSetKeyCallback(graphicsWindow, [](GLFWwindow*, int keycode, int scancode, int action, int mods) |
100 | 179 | { |
101 | | - if (action != GLFW_REPEAT) |
| 180 | + if (action == GLFW_REPEAT) |
| 181 | + return; |
| 182 | + |
| 183 | + eKeycode keycodeNative = GlfwKeycodeToNative(keycode); |
| 184 | + if (keycodeNative != eKeycode_null) |
102 | 185 | { |
103 | | - KeyInputEvent ev { keycode, scancode, mods, action == GLFW_PRESS }; |
| 186 | + KeyInputEvent ev { keycodeNative, scancode, mods, action == GLFW_PRESS }; |
104 | 187 | gSystem.HandleEvent(ev); |
105 | 188 | } |
106 | 189 | }); |
|
0 commit comments