From 3d4f0b48b81d620afced557c4736fb19892ec03a Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 17 Jul 2022 10:32:40 +0100 Subject: [PATCH] Remove `TranslateMessage` It has become entirely redundant. --- Source/debug.cpp | 1 - Source/diablo.cpp | 129 +++++++++++++++++------------------- Source/interfac.cpp | 1 - Source/miniwin/misc_msg.cpp | 81 ---------------------- Source/miniwin/misc_msg.h | 2 - 5 files changed, 61 insertions(+), 153 deletions(-) diff --git a/Source/debug.cpp b/Source/debug.cpp index 8bc36dd0d..8cdb2a355 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -122,7 +122,6 @@ void ProcessMessages() gbRunGame = false; break; } - TranslateMessage(&msg); PushMessage(&msg); } } diff --git a/Source/diablo.cpp b/Source/diablo.cpp index ed82c8b06..35bf67f8c 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -441,8 +441,11 @@ void ClosePanels() QuestLogIsOpen = false; } -void PressKey(SDL_Keycode vkey) +void PressKey(SDL_Keycode vkey, uint16_t modState) { + if (vkey == SDLK_UNKNOWN) + return; + if (vkey == SDLK_PAUSE) { diablo_pause_game(); return; @@ -457,7 +460,7 @@ void PressKey(SDL_Keycode vkey) } sgOptions.Keymapper.KeyPressed(vkey); if (vkey == SDLK_RETURN || vkey == SDLK_KP_ENTER) { - if ((SDL_GetModState() & KMOD_ALT) != 0) { + if ((modState & KMOD_ALT) != 0) { sgOptions.Graphics.fullscreen.SetValue(!IsFullScreen()); SaveOptions(); } else { @@ -483,15 +486,53 @@ void PressKey(SDL_Keycode vkey) sgOptions.Keymapper.KeyPressed(vkey); if (PauseMode == 2) { - if ((vkey == SDLK_RETURN || vkey == SDLK_KP_ENTER) && (SDL_GetModState() & KMOD_ALT) != 0) { + if ((vkey == SDLK_RETURN || vkey == SDLK_KP_ENTER) && (modState & KMOD_ALT) != 0) { sgOptions.Graphics.fullscreen.SetValue(!IsFullScreen()); SaveOptions(); } return; } - if (vkey == SDLK_RETURN || vkey == SDLK_KP_ENTER) { - if ((SDL_GetModState() & KMOD_ALT) != 0) { + if (DoomFlag) { + doom_close(); + return; + } + if (dropGoldFlag) { + control_drop_gold(vkey); + return; + } + if (IsWithdrawGoldOpen) { + WithdrawGoldKeyPress(vkey); + return; + } + + switch (vkey) { + case SDLK_PLUS: + case SDLK_KP_PLUS: + case SDLK_EQUALS: + case SDLK_KP_EQUALS: + if (AutomapActive) { + AutomapZoomIn(); + } + return; + case SDLK_MINUS: + case SDLK_KP_MINUS: + case SDLK_UNDERSCORE: + if (AutomapActive) { + AutomapZoomOut(); + } + return; +#ifdef _DEBUG + case SDLK_m: + if ((modState & KMOD_ALT) != 0) + NextDebugMonster(); + else + GetDebugMonster(); + return; +#endif + case SDLK_RETURN: + case SDLK_KP_ENTER: + if ((modState & KMOD_ALT) != 0) { sgOptions.Graphics.fullscreen.SetValue(!IsFullScreen()); SaveOptions(); } else if (stextflag != STORE_NONE) { @@ -501,7 +542,8 @@ void PressKey(SDL_Keycode vkey) } else { control_type_message(); } - } else if (vkey == SDLK_UP) { + return; + case SDLK_UP: if (stextflag != STORE_NONE) { StoreUp(); } else if (QuestLogIsOpen) { @@ -515,7 +557,8 @@ void PressKey(SDL_Keycode vkey) } else if (IsStashOpen) { Stash.PreviousPage(); } - } else if (vkey == SDLK_DOWN) { + return; + case SDLK_DOWN: if (stextflag != STORE_NONE) { StoreDown(); } else if (QuestLogIsOpen) { @@ -529,74 +572,29 @@ void PressKey(SDL_Keycode vkey) } else if (IsStashOpen) { Stash.NextPage(); } - } else if (vkey == SDLK_PAGEUP) { + return; + case SDLK_PAGEUP: if (stextflag != STORE_NONE) { StorePrior(); } else if (ChatLogFlag) { ChatLogScrollTop(); } - } else if (vkey == SDLK_PAGEDOWN) { + return; + case SDLK_PAGEDOWN: if (stextflag != STORE_NONE) { StoreNext(); } else if (ChatLogFlag) { ChatLogScrollBottom(); } - } else if (vkey == SDLK_LEFT) { - if (AutomapActive && !talkflag) { - AutomapLeft(); - } - } else if (vkey == SDLK_RIGHT) { - if (AutomapActive && !talkflag) { - AutomapRight(); - } - } -} - -/** - * @internal `return` must be used instead of `break` to be bin exact as C++ - */ -void PressChar(char vkey) -{ - if (gmenu_is_active() || IsTalkActive() || sgnTimeoutCurs != CURSOR_NONE || MyPlayerIsDead) { - return; - } - if (PauseMode == 2) { - return; - } - if (DoomFlag) { - doom_close(); - return; - } - if (dropGoldFlag) { - control_drop_gold(static_cast(vkey)); - return; - } - if (IsWithdrawGoldOpen) { - WithdrawGoldKeyPress(static_cast(vkey)); return; - } - - switch (vkey) { - case '+': - case '=': - if (AutomapActive) { - AutomapZoomIn(); - } - return; - case '-': - case '_': - if (AutomapActive) { - AutomapZoomOut(); - } - return; -#ifdef _DEBUG - case 'M': - NextDebugMonster(); + case SDLK_LEFT: + if (AutomapActive && !talkflag) + AutomapLeft(); return; - case 'm': - GetDebugMonster(); + case SDLK_RIGHT: + if (AutomapActive && !talkflag) + AutomapRight(); return; -#endif } } @@ -609,14 +607,11 @@ void GameEventHandler(uint32_t uMsg, uint32_t wParam, uint32_t lParam) { switch (uMsg) { case DVL_WM_KEYDOWN: - PressKey(static_cast(wParam)); + PressKey(static_cast(wParam), DecodeKeyboardModState(lParam)); return; case DVL_WM_KEYUP: ReleaseKey(static_cast(wParam)); return; - case DVL_WM_CHAR: - PressChar(static_cast(wParam)); - return; case DVL_WM_SYSKEYDOWN: if (PressSysKey(static_cast(wParam))) return; @@ -756,7 +751,6 @@ void RunGameLoop(interface_mode uMsg) gbRunGame = false; break; } - TranslateMessage(&msg); PushMessage(&msg); } if (!gbRunGame) @@ -2041,7 +2035,6 @@ void DisableInputEventHandler(uint32_t uMsg, uint32_t /*wParam*/, uint32_t lPara switch (uMsg) { case DVL_WM_KEYDOWN: case DVL_WM_KEYUP: - case DVL_WM_CHAR: case DVL_WM_SYSKEYDOWN: case DVL_WM_SYSCOMMAND: return; diff --git a/Source/interfac.cpp b/Source/interfac.cpp index ebc81845b..40cbb22f9 100644 --- a/Source/interfac.cpp +++ b/Source/interfac.cpp @@ -212,7 +212,6 @@ void interface_msg_pump() while (FetchMessage(&msg)) { if (msg.message != DVL_WM_QUIT) { - TranslateMessage(&msg); PushMessage(&msg); } } diff --git a/Source/miniwin/misc_msg.cpp b/Source/miniwin/misc_msg.cpp index 68388460a..ae9168949 100644 --- a/Source/miniwin/misc_msg.cpp +++ b/Source/miniwin/misc_msg.cpp @@ -503,87 +503,6 @@ bool FetchMessage(tagMSG *lpMsg) return available; } -void TranslateMessage(const tagMSG *lpMsg) -{ - if (lpMsg->message == DVL_WM_KEYDOWN) { - const auto key = static_cast(lpMsg->wParam); - const uint16_t mod = DecodeKeyboardModState(lpMsg->lParam >> 16); - - const bool isShift = (mod & KMOD_SHIFT) != 0; - const bool isCapsLock = (mod & KMOD_CAPS) != 0; - const bool isUpper = isShift != isCapsLock; - - char chr; - if (key >= SDLK_a && key <= SDLK_z) { - chr = static_cast(key); - if (isUpper) - chr = static_cast(chr - ('a' - 'A')); - } else if (key <= 0x7F) { - chr = static_cast(key); - } else if (key >= SDLK_KP_1 && key <= SDLK_KP_9) { - chr = static_cast(SDLK_1 + (key - SDLK_KP_1)); - } else if (key == SDLK_KP_0) { - chr = static_cast(SDLK_0); - } else if (key == SDLK_KP_PLUS) { - chr = static_cast(SDLK_PLUS); - } else if (key == SDLK_KP_MINUS) { - chr = static_cast(SDLK_MINUS); - } else if (key == SDLK_KP_DIVIDE) { - chr = static_cast(SDLK_SLASH); - } else if (key == SDLK_KP_MULTIPLY) { - chr = static_cast(SDLK_ASTERISK); - } else if (key == SDLK_KP_COMMA) { - chr = static_cast(SDLK_COMMA); - } else if (key == SDLK_KP_PERIOD) { - chr = static_cast(SDLK_PERIOD); - } else if (key == SDLK_KP_ENTER) { - chr = static_cast(SDLK_RETURN); - } else if (key == SDLK_KP_EQUALS) { - chr = static_cast(SDLK_EQUALS); - } else { - return; - } - - if (isShift) { - switch (chr) { - case '1': - chr = '!'; - break; - case '2': - chr = '@'; - break; - case '3': - chr = '#'; - break; - case '4': - chr = '$'; - break; - case '5': - chr = '%'; - break; - case '6': - chr = '^'; - break; - case '7': - chr = '&'; - break; - case '8': - chr = '*'; - break; - case '9': - chr = '('; - break; - case '0': - chr = ')'; - break; - } - } - - // XXX: This does not add extended info to lParam - PostMessage(DVL_WM_CHAR, key, 0); - } -} - void PushMessage(const tagMSG *lpMsg) { assert(CurrentEventHandler != nullptr); diff --git a/Source/miniwin/misc_msg.h b/Source/miniwin/misc_msg.h index b792fb1fc..ae71a45df 100644 --- a/Source/miniwin/misc_msg.h +++ b/Source/miniwin/misc_msg.h @@ -30,7 +30,6 @@ void FocusOnCharInfo(); void SetMouseButtonEvent(SDL_Event &event, uint32_t type, uint8_t button, Point position); bool FetchMessage(tagMSG *lpMsg); -void TranslateMessage(const tagMSG *lpMsg); void PushMessage(const tagMSG *lpMsg); void PostMessage(uint32_t type, uint32_t wParam, uint32_t lParam); void ClearMessageQueue(); @@ -92,7 +91,6 @@ inline uint16_t DecodeMouseModState(uint32_t wParam) #define DVL_WM_SYSCOMMAND 0x0112 -#define DVL_WM_CHAR 0x0102 #define DVL_WM_CAPTURECHANGED 0x0215 #define DVL_WM_PAINT 0x000F