feat(event): handle key down and key up events for windows

This commit is contained in:
fallenoak 2023-03-18 17:10:01 -05:00
parent b8ebabaea5
commit 43402e3bd1
4 changed files with 147 additions and 0 deletions

View File

@ -54,6 +54,8 @@ void IEvtInputSetMouseMode(EvtContext* context, MOUSEMODE mode, uint32_t holdBut
const char* KeyCodeToString(KEY key);
bool OsGuiIsModifierKeyDown(int32_t key);
int32_t OsGuiProcessMessage(void* message);
int32_t OsInputGet(OSINPUT* id, int32_t* param0, int32_t* param1, int32_t* param2, int32_t* param3);

View File

@ -1,5 +1,10 @@
#include "event/Input.hpp"
bool OsGuiIsModifierKeyDown(int32_t key) {
// TODO
return false;
}
int32_t OsGuiProcessMessage(void* message) {
return 0;
}

View File

@ -1,6 +1,11 @@
#include "event/Input.hpp"
#include <common/Time.hpp>
bool OsGuiIsModifierKeyDown(int32_t key) {
// TODO
return false;
}
int32_t OsGuiProcessMessage(void* message) {
return 0;
}

View File

@ -68,6 +68,107 @@ int32_t ConvertButton(uint32_t message, uintptr_t wparam, MOUSEBUTTON* button) {
}
}
int32_t ConvertKeyCode(uint32_t vkey, KEY* key) {
if (vkey >= VK_F1 && vkey <= VK_F12) {
*key = static_cast<KEY>(KEY_F1 + (vkey - VK_F1));
return 1;
}
if (vkey >= 0x30 && vkey <= 0x39) {
*key = static_cast<KEY>(KEY_0 + (vkey - 0x30));
return 1;
}
switch (vkey) {
case VK_BACK: {
*key = KEY_BACKSPACE;
return 1;
}
case VK_TAB: {
*key = KEY_TAB;
return 1;
}
case VK_RETURN: {
*key = KEY_ENTER;
return 1;
}
case VK_PAUSE: {
*key = KEY_PAUSE;
return 1;
}
case VK_CAPITAL: {
*key = KEY_CAPSLOCK;
return 1;
}
case VK_ESCAPE: {
*key = KEY_ESCAPE;
return 1;
}
case VK_SPACE: {
*key = KEY_SPACE;
return 1;
}
case VK_PRIOR: {
*key = KEY_PAGEUP;
return 1;
}
case VK_NEXT: {
*key = KEY_PAGEDOWN;
return 1;
}
case VK_END: {
*key = KEY_END;
return 1;
}
case VK_HOME: {
*key = KEY_HOME;
return 1;
}
case VK_LEFT: {
*key = KEY_LEFT;
return 1;
}
case VK_UP: {
*key = KEY_UP;
return 1;
}
case VK_RIGHT: {
*key = KEY_RIGHT;
return 1;
}
case VK_DOWN: {
*key = KEY_DOWN;
return 1;
}
// TODO remaining vkeys
default: {
auto character = MapVirtualKey(vkey, MAPVK_VK_TO_CHAR);
*key = static_cast<KEY>(character);
if (character && character <= 0xFF) {
return 1;
} else {
return 0;
}
}
}
}
bool ProcessMouseEvent(MOUSEBUTTON button, uint32_t message, HWND hwnd, OSINPUT id) {
POINT mousePos;
@ -130,6 +231,11 @@ int32_t HandleMouseUp(uint32_t message, uintptr_t wparam, bool* xbutton, HWND hw
return 1;
}
bool OsGuiIsModifierKeyDown(int32_t key) {
// TODO
return false;
}
int32_t OsGuiProcessMessage(void* message) {
// TODO
return 0;
@ -226,6 +332,35 @@ int32_t OsWindowProc(void* window, uint32_t message, uintptr_t wparam, intptr_t
return 0;
}
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP: {
auto keyDown = message == WM_KEYDOWN || message == WM_SYSKEYDOWN;
if (wparam == VK_SHIFT) {
// TODO
} else if (wparam == VK_CONTROL) {
// TODO
} else if (wparam == VK_MENU) {
// TODO
}
KEY key;
if (ConvertKeyCode(wparam, &key)) {
OsQueuePut(keyDown ? OS_INPUT_KEY_DOWN : OS_INPUT_KEY_UP, key, LOWORD(lparam), 0, 0);
// Alt + F4
if (key == KEY_F4 && OsGuiIsModifierKeyDown(2)) {
break;
}
return 0;
}
break;
}
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN: