From d789184e9aa7533cddd88460eb30e1175ae426fc Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 13 Nov 2020 23:11:58 +1100 Subject: [PATCH] Fix speed/half-speed on-screen controls getting stuck down --- src/Menus.c | 7 ++++++- src/Screens.c | 10 ++++++---- src/Screens.h | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Menus.c b/src/Menus.c index be9186f96..b77a8b83b 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -3613,6 +3613,7 @@ static void TouchOnscreen_Any(void* s, void* w) { Gui._onscreenButtons |= bit; } Options_SetInt(OPT_TOUCH_BUTTONS, Gui._onscreenButtons); + TouchScreen_Refresh(); } static void TouchOnscreen_More(void* s, void* w) { TouchCtrlsScreen_Show(); } @@ -3738,7 +3739,8 @@ static void TouchCtrls_OnDone(const cc_string* value, cc_bool valid) { TouchCtrls_UpdateSensitivity(&TouchCtrlsScreen); } -static void TouchCtrls_Sensitivity(void* s, void* w) { +static void TouchCtrls_Sensitivity(void* screen, void* w) { + struct TouchCtrlsScreen* s = (struct TouchCtrlsScreen*)screen; static struct MenuInputDesc desc; cc_string value; char valueBuffer[STRING_SIZE]; String_InitArray(value, valueBuffer); @@ -3746,6 +3748,9 @@ static void TouchCtrls_Sensitivity(void* s, void* w) { MenuInput_Int(desc, 1, 200, 30); MiscOptionsScreen_GetSensitivity(&value); MenuInputOverlay_Show(&desc, &value, TouchCtrls_OnDone, true); + /* Fix Sensitivity button getting stuck as 'active' */ + /* (input overlay swallows subsequent pointer events) */ + s->btns[4].active = 0; } static const struct SimpleButtonDesc touchCtrls_btns[8] = { diff --git a/src/Screens.c b/src/Screens.c index df048dc06..d6c10334a 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -1935,8 +1935,9 @@ static void TouchScreen_NoclipClick(void* s, void* w) { LocalPlayer_HandleNocl static void TouchScreen_MoreClick(void* s, void* w) { TouchMoreScreen_Show(); } static void TouchScreen_BindClick(void* screen, void* widget) { struct TouchScreen* s = (struct TouchScreen*)screen; - int i = Screen_Index(screen, widget) - ONSCREEN_MAX_BTNS; - Input_SetPressed(KeyBinds[s->descs[i].bind], true); + int i = Screen_Index(screen, widget) - ONSCREEN_MAX_BTNS; + int key = KeyBinds[s->descs[i].bind]; + Input_SetPressed(key, !Input_Pressed[key]); } static const struct TouchButtonDesc onscreenDescs[8] = { @@ -1992,14 +1993,15 @@ static void TouchScreen_InitButtons(struct TouchScreen* s) { } } -static void TouchScreen_HacksChanged(void* screen) { - struct TouchScreen* s = (struct TouchScreen*)screen; +void TouchScreen_Refresh(void) { + struct TouchScreen* s = &TouchScreen; /* InitButtons changes number of widgets, hence */ /* must destroy graphics resources BEFORE that */ Screen_ContextLost(s); TouchScreen_InitButtons(s); Gui_Refresh((struct Screen*)s); } +static void TouchScreen_HacksChanged(void* s) { TouchScreen_Refresh(); } static void TouchScreen_ContextLost(void* screen) { struct TouchScreen* s = (struct TouchScreen*)screen; diff --git a/src/Screens.h b/src/Screens.h index 990458c2e..b9737e615 100644 --- a/src/Screens.h +++ b/src/Screens.h @@ -32,6 +32,7 @@ void GeneratingScreen_Show(void); void ChatScreen_Show(void); void DisconnectScreen_Show(const cc_string* title, const cc_string* message); #ifdef CC_BUILD_TOUCH +void TouchScreen_Refresh(void); void TouchScreen_Show(void); #endif