diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c6b05696..050aa79bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -301,11 +301,6 @@ set(devilutionx_SRCS Packaging/resources/CharisSILB.ttf Packaging/windows/devilutionx.rc) -if(USE_SDL1) - list(APPEND devilutionx_SRCS - SourceS/sdl2_to_1_2_backports.cpp) -endif() - if(NOT NONET) list(APPEND devilutionx_SRCS SourceX/dvlnet/tcp_client.cpp diff --git a/SourceS/sdl2_to_1_2_backports.cpp b/SourceS/sdl2_to_1_2_backports.cpp deleted file mode 100644 index 4783c1f5b..000000000 --- a/SourceS/sdl2_to_1_2_backports.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "sdl2_to_1_2_backports.h" - -SDL_bool SDLBackport_IsTextInputActive = SDL_FALSE; diff --git a/SourceS/sdl2_to_1_2_backports.h b/SourceS/sdl2_to_1_2_backports.h index 7c11932ee..e2d5de966 100644 --- a/SourceS/sdl2_to_1_2_backports.h +++ b/SourceS/sdl2_to_1_2_backports.h @@ -59,20 +59,12 @@ inline void SDL_Log(const char *fmt, ...) puts(""); } -extern SDL_bool SDLBackport_IsTextInputActive; - -inline SDL_bool SDL_IsTextInputActive() -{ - return SDLBackport_IsTextInputActive; -} - inline void SDL_StartTextInput() { - SDLBackport_IsTextInputActive = SDL_TRUE; } -inline void SDL_StopTextInput() + +inline void SDL_SetTextInputRect(const SDL_Rect *r) { - SDLBackport_IsTextInputActive = SDL_FALSE; } //== Graphics helpers diff --git a/SourceX/DiabloUI/diabloui.cpp b/SourceX/DiabloUI/diabloui.cpp index aec6e9139..01b6a173c 100644 --- a/SourceX/DiabloUI/diabloui.cpp +++ b/SourceX/DiabloUI/diabloui.cpp @@ -46,6 +46,7 @@ std::vector gUiItems; bool UiItemsWraps; char *UiTextInput; int UiTextInputLen; +bool textInputActive = true; int SelectedItem = 0; @@ -89,15 +90,20 @@ void UiInitList(int min, int max, void (*fnFocus)(int value), void (*fnSelect)(i if (fnFocus) fnFocus(min); +#ifndef __SWITCH__ SDL_StopTextInput(); // input is enabled by default +#endif + textInputActive = false; for (std::size_t i = 0; i < items.size(); i++) { if (items[i]->m_type == UI_EDIT) { UiEdit *pItemUIEdit = (UiEdit *)items[i]; + SDL_SetTextInputRect(&items[i]->m_rect); + textInputActive = true; #ifdef __SWITCH__ switch_start_text_input("", pItemUIEdit->m_value, pItemUIEdit->m_max_length, /*multiline=*/0); -#endif - +#else SDL_StartTextInput(); +#endif UiTextInput = pItemUIEdit->m_value; UiTextInputLen = pItemUIEdit->m_max_length; } @@ -272,7 +278,7 @@ void UiFocusNavigation(SDL_Event *event) } #endif - if (SDL_IsTextInputActive()) { + if (textInputActive) { switch (event->type) { case SDL_KEYDOWN: { switch (event->key.keysym.sym) { @@ -314,7 +320,9 @@ void UiFocusNavigation(SDL_Event *event) } #ifndef USE_SDL1 case SDL_TEXTINPUT: - selhero_CatToName(event->text.text, UiTextInput, UiTextInputLen); + if (textInputActive) { + selhero_CatToName(event->text.text, UiTextInput, UiTextInputLen); + } return; #endif default: @@ -368,11 +376,13 @@ void UiHandleEvents(SDL_Event *event) void UiFocusNavigationSelect() { UiPlaySelectSound(); - if (SDL_IsTextInputActive()) { + if (textInputActive) { if (strlen(UiTextInput) == 0) { return; } +#ifndef __SWITCH__ SDL_StopTextInput(); +#endif UiTextInput = NULL; UiTextInputLen = 0; } @@ -383,8 +393,10 @@ void UiFocusNavigationSelect() void UiFocusNavigationEsc() { UiPlaySelectSound(); - if (SDL_IsTextInputActive()) { + if (textInputActive) { +#ifndef __SWITCH__ SDL_StopTextInput(); +#endif UiTextInput = NULL; UiTextInputLen = 0; } diff --git a/SourceX/DiabloUI/diabloui.h b/SourceX/DiabloUI/diabloui.h index d87f037fe..9595fe06e 100644 --- a/SourceX/DiabloUI/diabloui.h +++ b/SourceX/DiabloUI/diabloui.h @@ -9,6 +9,7 @@ namespace dvl { extern int SelectedItem; +extern bool textInputActive; typedef enum _artFocus { FOCUS_SMALL, diff --git a/SourceX/DiabloUI/dialogs.cpp b/SourceX/DiabloUI/dialogs.cpp index ffd6f4bad..6ae1cce9c 100644 --- a/SourceX/DiabloUI/dialogs.cpp +++ b/SourceX/DiabloUI/dialogs.cpp @@ -18,7 +18,6 @@ namespace { Art dialogArt; bool fontWasLoaded; -bool textInputWasActive; bool dialogEnd; @@ -204,8 +203,6 @@ void Init(const char *text, const char *caption, bool error, bool renderBehind) fontWasLoaded = font != NULL; if (!fontWasLoaded) LoadTtfFont(); - textInputWasActive = SDL_IsTextInputActive(); - SDL_StopTextInput(); } void Deinit() @@ -214,8 +211,6 @@ void Deinit() UnloadSmlButtonArt(); if (!fontWasLoaded) UnloadTtfFont(); - if (textInputWasActive) - SDL_StartTextInput(); for (std::size_t i = 0; i < vecOkDialog.size(); i++) { UiItemBase *pUIItem = vecOkDialog[i]; diff --git a/SourceX/controls/menu_controls.cpp b/SourceX/controls/menu_controls.cpp index 5a2d08cf1..cef39a6ab 100644 --- a/SourceX/controls/menu_controls.cpp +++ b/SourceX/controls/menu_controls.cpp @@ -2,6 +2,7 @@ #include "controls/controller.h" #include "controls/remap_keyboard.h" +#include "DiabloUI/diabloui.h" namespace dvl { @@ -71,7 +72,7 @@ MenuAction GetMenuAction(const SDL_Event &event) case SDLK_KP_ENTER: return MenuAction_SELECT; case SDLK_SPACE: - if (!SDL_IsTextInputActive()) { + if (!textInputActive) { return MenuAction_SELECT; } break;