From edae24372140e7f3368e13b0e0ccd7b08cf08ba5 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 17 Dec 2020 19:10:41 +1100 Subject: [PATCH] Mobile: Add (disabled) button for setting scale of touch gui --- src/Gui.c | 1 + src/Gui.h | 1 + src/Menus.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- src/Options.h | 1 + 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/Gui.c b/src/Gui.c index 1f688527f..e4608c0b8 100644 --- a/src/Gui.c +++ b/src/Gui.c @@ -95,6 +95,7 @@ static void LoadOptions(void) { Gui.RawInventoryScale = Options_GetFloat(OPT_INVENTORY_SCALE, 0.25f, 5.0f, 1.0f); Gui.RawHotbarScale = Options_GetFloat(OPT_HOTBAR_SCALE, 0.25f, 5.0f, 1.0f); Gui.RawChatScale = Options_GetFloat(OPT_CHAT_SCALE, 0.25f, 5.0f, 1.0f); + Gui.RawTouchScale = Options_GetFloat(OPT_TOUCH_SCALE, 0.25f, 5.0f, 1.0f); } static void LoseAllScreens(void) { diff --git a/src/Gui.h b/src/Gui.h index e48c51a5a..1b701fc11 100644 --- a/src/Gui.h +++ b/src/Gui.h @@ -45,6 +45,7 @@ CC_VAR extern struct _GuiData { int DefaultLines; /* (internal) Bitmask of on-screen buttons, see Input.h */ int _onscreenButtons; + float RawTouchScale; } Gui; float Gui_Scale(float value); diff --git a/src/Menus.c b/src/Menus.c index 62160dc10..a070fa37f 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -3794,7 +3794,7 @@ void TouchOnscreenScreen_Show(void) { /*########################################################################################################################* *---------------------------------------------------TouchControlsScreen---------------------------------------------------* *#########################################################################################################################*/ -#define TOUCHCTRLS_BTNS 4 +#define TOUCHCTRLS_BTNS 5 static struct TouchCtrlsScreen { Screen_Body struct ButtonWidget back; @@ -3805,7 +3805,7 @@ static struct TouchCtrlsScreen { static struct Widget* touchCtrls_widgets[1 + TOUCHCTRLS_BTNS] = { (struct Widget*)&TouchCtrlsScreen.back, (struct Widget*)&TouchCtrlsScreen.btns[0], (struct Widget*)&TouchCtrlsScreen.btns[1], (struct Widget*)&TouchCtrlsScreen.btns[2], - (struct Widget*)&TouchCtrlsScreen.btns[3] + (struct Widget*)&TouchCtrlsScreen.btns[3], (struct Widget*)&TouchCtrlsScreen.btns[4] }; #define TOUCHCTRLS_MAX_VERTICES (BUTTONWIDGET_MAX + TOUCHCTRLS_BTNS * BUTTONWIDGET_MAX) @@ -3831,6 +3831,17 @@ static void TouchCtrls_UpdateSensitivity(void* screen) { s->dirty = true; } +static void TouchCtrls_UpdateScale(void* screen) { + cc_string value; char valueBuffer[STRING_SIZE]; + struct TouchCtrlsScreen* s = (struct TouchCtrlsScreen*)screen; + String_InitArray(value, valueBuffer); + + String_AppendConst(&value, "Scale: "); + String_AppendFloat(&value, Gui.RawTouchScale, 1); + ButtonWidget_Set(&s->btns[3], &value, &s->font); + s->dirty = true; +} + static void TouchCtrls_More(void* s, void* w) { TouchMoreScreen_Show(); } static void TouchCtrls_Onscreen(void* s, void* w) { TouchOnscreenScreen_Show(); } @@ -3843,7 +3854,7 @@ static void TouchCtrls_Hold(void* s, void* w) { TouchCtrls_UpdateHoldText(s); } -static void TouchCtrls_OnDone(const cc_string* value, cc_bool valid) { +static void TouchCtrls_SensitivityDone(const cc_string* value, cc_bool valid) { if (!valid) return; MiscOptionsScreen_SetSensitivity(value); TouchCtrls_UpdateSensitivity(&TouchCtrlsScreen); @@ -3857,16 +3868,35 @@ static void TouchCtrls_Sensitivity(void* screen, void* w) { MenuInput_Int(desc, 1, 200, 30); MiscOptionsScreen_GetSensitivity(&value); - MenuInputOverlay_Show(&desc, &value, TouchCtrls_OnDone, true); + MenuInputOverlay_Show(&desc, &value, TouchCtrls_SensitivityDone, true); /* Fix Sensitivity button getting stuck as 'active' */ /* (input overlay swallows subsequent pointer events) */ s->btns[2].active = 0; } -static const struct SimpleButtonDesc touchCtrls_btns[4] = { +static void TouchCtrls_ScaleDone(const cc_string* value, cc_bool valid) { + if (!valid) return; + ChatOptionsScreen_SetScale(value, &Gui.RawTouchScale, OPT_TOUCH_SCALE); + TouchCtrls_UpdateScale(&TouchCtrlsScreen); +} + +static void TouchCtrls_Scale(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); + + MenuInput_Float(desc, 0.25f, 5.0f, 1.0f); + String_AppendFloat(&value, Gui.RawTouchScale, 1); + MenuInputOverlay_Show(&desc, &value, TouchCtrls_ScaleDone, true); + s->btns[3].active = 0; +} + +static const struct SimpleButtonDesc touchCtrls_btns[5] = { { -102, -50, "", TouchCtrls_Tap }, { 102, -50, "", TouchCtrls_Hold }, - { 0, 0, "", TouchCtrls_Sensitivity }, + { -102, 0, "", TouchCtrls_Sensitivity }, + { 102, 0, "", TouchCtrls_Scale }, { 0, 50, "On-screen controls", TouchCtrls_Onscreen } }; @@ -3886,6 +3916,7 @@ static void TouchCtrlsScreen_ContextRecreated(void* screen) { TouchCtrls_UpdateTapText(s); TouchCtrls_UpdateHoldText(s); TouchCtrls_UpdateSensitivity(s); + TouchCtrls_UpdateScale(s); } static void TouchCtrlsScreen_Layout(void* screen) { @@ -3900,9 +3931,10 @@ static void TouchCtrlsScreen_Init(void* screen) { s->numWidgets = Array_Elems(touchCtrls_widgets); s->maxVertices = TOUCHCTRLS_MAX_VERTICES; - Menu_InitButtons(s->btns, 195, touchCtrls_btns, 2); - Menu_InitButtons(s->btns + 2, 400, touchCtrls_btns + 2, 2); + Menu_InitButtons(s->btns, 195, touchCtrls_btns, 4); + Menu_InitButtons(s->btns + 4, 400, touchCtrls_btns + 4, 1); Menu_InitBack(&s->back, TouchCtrls_More); + s->btns[3].disabled = true; } static const struct ScreenVTABLE TouchCtrlsScreen_VTABLE = { diff --git a/src/Options.h b/src/Options.h index 1ddc0e40e..fca948e45 100644 --- a/src/Options.h +++ b/src/Options.h @@ -69,6 +69,7 @@ #define OPT_CAMERA_MASS "cameramass" #define OPT_GRAB_CURSOR "win-grab-cursor" #define OPT_TOUCH_BUTTONS "gui-touchbuttons" +#define OPT_TOUCH_SCALE "gui-touchscale" struct StringsBuffer; extern struct StringsBuffer Options;