|
|
|
|
@ -13,61 +13,61 @@ static int translate_sdl_key(SDL_Keysym key)
|
|
|
|
|
int sym = key.sym; |
|
|
|
|
switch (sym) { |
|
|
|
|
case SDLK_ESCAPE: |
|
|
|
|
return VK_ESCAPE; |
|
|
|
|
return DVL_VK_ESCAPE; |
|
|
|
|
case SDLK_RETURN: |
|
|
|
|
case SDLK_KP_ENTER: |
|
|
|
|
return VK_RETURN; |
|
|
|
|
return DVL_VK_RETURN; |
|
|
|
|
case SDLK_TAB: |
|
|
|
|
return VK_TAB; |
|
|
|
|
return DVL_VK_TAB; |
|
|
|
|
case SDLK_SPACE: |
|
|
|
|
return VK_SPACE; |
|
|
|
|
return DVL_VK_SPACE; |
|
|
|
|
case SDLK_BACKSPACE: |
|
|
|
|
return VK_BACK; |
|
|
|
|
return DVL_VK_BACK; |
|
|
|
|
|
|
|
|
|
case SDLK_DOWN: |
|
|
|
|
return VK_DOWN; |
|
|
|
|
return DVL_VK_DOWN; |
|
|
|
|
case SDLK_LEFT: |
|
|
|
|
return VK_LEFT; |
|
|
|
|
return DVL_VK_LEFT; |
|
|
|
|
case SDLK_RIGHT: |
|
|
|
|
return VK_RIGHT; |
|
|
|
|
return DVL_VK_RIGHT; |
|
|
|
|
case SDLK_UP: |
|
|
|
|
return VK_UP; |
|
|
|
|
return DVL_VK_UP; |
|
|
|
|
|
|
|
|
|
case SDLK_PAGEUP: |
|
|
|
|
return VK_PRIOR; |
|
|
|
|
return DVL_VK_PRIOR; |
|
|
|
|
case SDLK_PAGEDOWN: |
|
|
|
|
return VK_NEXT; |
|
|
|
|
return DVL_VK_NEXT; |
|
|
|
|
|
|
|
|
|
case SDLK_PAUSE: |
|
|
|
|
return VK_PAUSE; |
|
|
|
|
return DVL_VK_PAUSE; |
|
|
|
|
|
|
|
|
|
case SDLK_SEMICOLON: |
|
|
|
|
return VK_OEM_1; |
|
|
|
|
return DVL_VK_OEM_1; |
|
|
|
|
case SDLK_QUESTION: |
|
|
|
|
return VK_OEM_2; |
|
|
|
|
return DVL_VK_OEM_2; |
|
|
|
|
case SDLK_BACKQUOTE: |
|
|
|
|
return VK_OEM_3; |
|
|
|
|
return DVL_VK_OEM_3; |
|
|
|
|
case SDLK_LEFTBRACKET: |
|
|
|
|
return VK_OEM_4; |
|
|
|
|
return DVL_VK_OEM_4; |
|
|
|
|
case SDLK_BACKSLASH: |
|
|
|
|
return VK_OEM_5; |
|
|
|
|
return DVL_VK_OEM_5; |
|
|
|
|
case SDLK_RIGHTBRACKET: |
|
|
|
|
return VK_OEM_6; |
|
|
|
|
return DVL_VK_OEM_6; |
|
|
|
|
case SDLK_QUOTE: |
|
|
|
|
return VK_OEM_7; |
|
|
|
|
return DVL_VK_OEM_7; |
|
|
|
|
case SDLK_MINUS: |
|
|
|
|
return VK_OEM_MINUS; |
|
|
|
|
return DVL_VK_OEM_MINUS; |
|
|
|
|
case SDLK_PLUS: |
|
|
|
|
return VK_OEM_PLUS; |
|
|
|
|
return DVL_VK_OEM_PLUS; |
|
|
|
|
case SDLK_PERIOD: |
|
|
|
|
return VK_OEM_PERIOD; |
|
|
|
|
return DVL_VK_OEM_PERIOD; |
|
|
|
|
case SDLK_COMMA: |
|
|
|
|
return VK_OEM_COMMA; |
|
|
|
|
return DVL_VK_OEM_COMMA; |
|
|
|
|
case SDLK_LSHIFT: |
|
|
|
|
case SDLK_RSHIFT: |
|
|
|
|
return VK_SHIFT; |
|
|
|
|
return DVL_VK_SHIFT; |
|
|
|
|
case SDLK_PRINTSCREEN: |
|
|
|
|
return VK_SNAPSHOT; |
|
|
|
|
return DVL_VK_SNAPSHOT; |
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
if (sym >= SDLK_a && sym <= SDLK_z) { |
|
|
|
|
@ -75,7 +75,7 @@ static int translate_sdl_key(SDL_Keysym key)
|
|
|
|
|
} else if (sym >= SDLK_0 && sym <= SDLK_9) { |
|
|
|
|
return '0' + (sym - SDLK_0); |
|
|
|
|
} else if (sym >= SDLK_F1 && sym <= SDLK_F12) { |
|
|
|
|
return VK_F1 + (sym - SDLK_F1); |
|
|
|
|
return DVL_VK_F1 + (sym - SDLK_F1); |
|
|
|
|
} |
|
|
|
|
DUMMY_PRINT("unknown key: name=%s sym=0x%X scan=%d mod=0x%X", SDL_GetKeyName(sym), sym, key.scancode, key.mod); |
|
|
|
|
return -1; |
|
|
|
|
@ -85,16 +85,16 @@ static int translate_sdl_key(SDL_Keysym key)
|
|
|
|
|
static WPARAM keystate_for_mouse(WPARAM ret) |
|
|
|
|
{ |
|
|
|
|
const Uint8 *keystate = SDL_GetKeyboardState(NULL); |
|
|
|
|
ret |= keystate[SDL_SCANCODE_LSHIFT] ? MK_SHIFT : 0; |
|
|
|
|
ret |= keystate[SDL_SCANCODE_RSHIFT] ? MK_SHIFT : 0; |
|
|
|
|
// XXX: other MK_* codes not implemented
|
|
|
|
|
ret |= keystate[SDL_SCANCODE_LSHIFT] ? DVL_MK_SHIFT : 0; |
|
|
|
|
ret |= keystate[SDL_SCANCODE_RSHIFT] ? DVL_MK_SHIFT : 0; |
|
|
|
|
// XXX: other DVL_MK_* codes not implemented
|
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static WINBOOL false_avail() |
|
|
|
|
{ |
|
|
|
|
DUMMY_PRINT("return FALSE although event avaliable"); |
|
|
|
|
return FALSE; |
|
|
|
|
DUMMY_PRINT("return false although event avaliable"); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) |
|
|
|
|
@ -118,12 +118,12 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
|
|
|
|
|
if (!message_queue.empty()) { |
|
|
|
|
*lpMsg = message_queue.front(); |
|
|
|
|
message_queue.pop_front(); |
|
|
|
|
return TRUE; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SDL_Event e; |
|
|
|
|
if (!SDL_PollEvent(&e)) { |
|
|
|
|
return FALSE; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
lpMsg->hwnd = hWnd; |
|
|
|
|
@ -139,26 +139,26 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
|
|
|
|
|
int key = translate_sdl_key(e.key.keysym); |
|
|
|
|
if (key == -1) |
|
|
|
|
return false_avail(); |
|
|
|
|
lpMsg->message = e.type == SDL_KEYDOWN ? WM_KEYDOWN : WM_KEYUP; |
|
|
|
|
lpMsg->message = e.type == SDL_KEYDOWN ? DVL_WM_KEYDOWN : DVL_WM_KEYUP; |
|
|
|
|
lpMsg->wParam = (DWORD)key; |
|
|
|
|
// HACK: Encode modifier in lParam for TranslateMessage later
|
|
|
|
|
lpMsg->lParam = e.key.keysym.mod << 16; |
|
|
|
|
} break; |
|
|
|
|
case SDL_MOUSEMOTION: |
|
|
|
|
lpMsg->message = WM_MOUSEMOVE; |
|
|
|
|
lpMsg->message = DVL_WM_MOUSEMOVE; |
|
|
|
|
lpMsg->lParam = (e.motion.y << 16) | (e.motion.x & 0xFFFF); |
|
|
|
|
lpMsg->wParam = keystate_for_mouse(0); |
|
|
|
|
break; |
|
|
|
|
case SDL_MOUSEBUTTONDOWN: { |
|
|
|
|
int button = e.button.button; |
|
|
|
|
if (button == SDL_BUTTON_LEFT) { |
|
|
|
|
lpMsg->message = WM_LBUTTONDOWN; |
|
|
|
|
lpMsg->message = DVL_WM_LBUTTONDOWN; |
|
|
|
|
lpMsg->lParam = (e.button.y << 16) | (e.button.x & 0xFFFF); |
|
|
|
|
lpMsg->wParam = keystate_for_mouse(MK_LBUTTON); |
|
|
|
|
lpMsg->wParam = keystate_for_mouse(DVL_MK_LBUTTON); |
|
|
|
|
} else if (button == SDL_BUTTON_RIGHT) { |
|
|
|
|
lpMsg->message = WM_RBUTTONDOWN; |
|
|
|
|
lpMsg->message = DVL_WM_RBUTTONDOWN; |
|
|
|
|
lpMsg->lParam = (e.button.y << 16) | (e.button.x & 0xFFFF); |
|
|
|
|
lpMsg->wParam = keystate_for_mouse(MK_RBUTTON); |
|
|
|
|
lpMsg->wParam = keystate_for_mouse(DVL_MK_RBUTTON); |
|
|
|
|
} else { |
|
|
|
|
return false_avail(); |
|
|
|
|
} |
|
|
|
|
@ -166,11 +166,11 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
|
|
|
|
|
case SDL_MOUSEBUTTONUP: { |
|
|
|
|
int button = e.button.button; |
|
|
|
|
if (button == SDL_BUTTON_LEFT) { |
|
|
|
|
lpMsg->message = WM_LBUTTONUP; |
|
|
|
|
lpMsg->message = DVL_WM_LBUTTONUP; |
|
|
|
|
lpMsg->lParam = (e.button.y << 16) | (e.button.x & 0xFFFF); |
|
|
|
|
lpMsg->wParam = keystate_for_mouse(0); |
|
|
|
|
} else if (button == SDL_BUTTON_RIGHT) { |
|
|
|
|
lpMsg->message = WM_RBUTTONUP; |
|
|
|
|
lpMsg->message = DVL_WM_RBUTTONUP; |
|
|
|
|
lpMsg->lParam = (e.button.y << 16) | (e.button.x & 0xFFFF); |
|
|
|
|
lpMsg->wParam = keystate_for_mouse(0); |
|
|
|
|
} else { |
|
|
|
|
@ -180,7 +180,7 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
|
|
|
|
|
case SDL_TEXTINPUT: |
|
|
|
|
case SDL_WINDOWEVENT: |
|
|
|
|
if (e.window.event == SDL_WINDOWEVENT_CLOSE) { |
|
|
|
|
lpMsg->message = WM_QUERYENDSESSION; |
|
|
|
|
lpMsg->message = DVL_WM_QUERYENDSESSION; |
|
|
|
|
} else { |
|
|
|
|
return false_avail(); |
|
|
|
|
} |
|
|
|
|
@ -189,13 +189,13 @@ WINBOOL PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilter
|
|
|
|
|
DUMMY_PRINT("unknown SDL message 0x%X", e.type); |
|
|
|
|
return false_avail(); |
|
|
|
|
} |
|
|
|
|
return TRUE; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
WINBOOL TranslateMessage(CONST MSG *lpMsg) |
|
|
|
|
WINBOOL TranslateMessage(const MSG *lpMsg) |
|
|
|
|
{ |
|
|
|
|
assert(lpMsg->hwnd == 0); |
|
|
|
|
if (lpMsg->message == WM_KEYDOWN) { |
|
|
|
|
if (lpMsg->message == DVL_WM_KEYDOWN) { |
|
|
|
|
int key = lpMsg->wParam; |
|
|
|
|
unsigned mod = (DWORD)lpMsg->lParam >> 16; |
|
|
|
|
|
|
|
|
|
@ -204,8 +204,8 @@ WINBOOL TranslateMessage(CONST MSG *lpMsg)
|
|
|
|
|
|
|
|
|
|
bool is_alpha = (key >= 'A' && key <= 'Z'); |
|
|
|
|
bool is_numeric = (key >= '0' && key <= '9'); |
|
|
|
|
bool is_control = key == VK_SPACE || key == VK_BACK || key == VK_ESCAPE || key == VK_TAB || key == VK_RETURN; |
|
|
|
|
bool is_oem = (key >= VK_OEM_1 && key <= VK_OEM_7); |
|
|
|
|
bool is_control = key == DVL_VK_SPACE || key == DVL_VK_BACK || key == DVL_VK_ESCAPE || key == DVL_VK_TAB || key == DVL_VK_RETURN; |
|
|
|
|
bool is_oem = (key >= DVL_VK_OEM_1 && key <= DVL_VK_OEM_7); |
|
|
|
|
|
|
|
|
|
if (is_control || is_alpha || is_numeric || is_oem) { |
|
|
|
|
if (!upper && is_alpha) { |
|
|
|
|
@ -215,38 +215,38 @@ WINBOOL TranslateMessage(CONST MSG *lpMsg)
|
|
|
|
|
} else if (is_oem) { |
|
|
|
|
// XXX: This probably only supports US keyboard layout
|
|
|
|
|
switch (key) { |
|
|
|
|
case VK_OEM_1: |
|
|
|
|
case DVL_VK_OEM_1: |
|
|
|
|
key = shift ? ':' : ';'; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_2: |
|
|
|
|
case DVL_VK_OEM_2: |
|
|
|
|
key = shift ? '?' : '/'; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_3: |
|
|
|
|
case DVL_VK_OEM_3: |
|
|
|
|
key = shift ? '~' : '`'; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_4: |
|
|
|
|
case DVL_VK_OEM_4: |
|
|
|
|
key = shift ? '{' : '['; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_5: |
|
|
|
|
case DVL_VK_OEM_5: |
|
|
|
|
key = shift ? '|' : '\\'; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_6: |
|
|
|
|
case DVL_VK_OEM_6: |
|
|
|
|
key = shift ? '}' : ']'; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_7: |
|
|
|
|
case DVL_VK_OEM_7: |
|
|
|
|
key = shift ? '"' : '\''; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case VK_OEM_MINUS: |
|
|
|
|
case DVL_VK_OEM_MINUS: |
|
|
|
|
key = shift ? '_' : '-'; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_PLUS: |
|
|
|
|
case DVL_VK_OEM_PLUS: |
|
|
|
|
key = shift ? '+' : '='; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_PERIOD: |
|
|
|
|
case DVL_VK_OEM_PERIOD: |
|
|
|
|
key = shift ? '>' : '.'; |
|
|
|
|
break; |
|
|
|
|
case VK_OEM_COMMA: |
|
|
|
|
case DVL_VK_OEM_COMMA: |
|
|
|
|
key = shift ? '<' : ','; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
@ -260,11 +260,11 @@ WINBOOL TranslateMessage(CONST MSG *lpMsg)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// XXX: This does not add extended info to lParam
|
|
|
|
|
PostMessageA(lpMsg->hwnd, WM_CHAR, key, 0); |
|
|
|
|
PostMessageA(lpMsg->hwnd, DVL_WM_CHAR, key, 0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return TRUE; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SHORT GetAsyncKeyState(int vKey) |
|
|
|
|
@ -274,7 +274,7 @@ SHORT GetAsyncKeyState(int vKey)
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
LRESULT DispatchMessageA(CONST MSG *lpMsg) |
|
|
|
|
LRESULT DispatchMessageA(const MSG *lpMsg) |
|
|
|
|
{ |
|
|
|
|
DUMMY_ONCE(); |
|
|
|
|
assert(lpMsg->hwnd == 0); |
|
|
|
|
@ -298,7 +298,7 @@ WINBOOL PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|
|
|
|
|
|
|
|
|
message_queue.push_back(msg); |
|
|
|
|
|
|
|
|
|
return TRUE; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|