diff --git a/src/Input.c b/src/Input.c index eafeca9f4..7f3ad86ab 100644 --- a/src/Input.c +++ b/src/Input.c @@ -48,7 +48,8 @@ static struct TouchPointer { TimeMS start; } touches[INPUT_MAX_POINTERS]; int Pointers_Count; -cc_bool Input_TapPlace = true, Input_HoldPlace = false; +int Input_TapMode = INPUT_MODE_PLACE; +int Input_HoldMode = INPUT_MODE_DELETE; cc_bool Input_TouchMode; static void MouseStatePress(int button); @@ -137,7 +138,12 @@ static void CheckBlockTap(int i) { if (DateTime_CurrentUTC_MS() > touches[i].start + 250) return; if (touches[i].type != TOUCH_TYPE_ALL) return; - btn = Input_TapPlace ? MOUSE_RIGHT : MOUSE_LEFT; + if (Input_TapMode == INPUT_MODE_PLACE) { + btn = MOUSE_RIGHT; + } else if (Input_TapMode == INPUT_MODE_DELETE) { + btn = MOUSE_LEFT; + } else { return; } + pressed = input_buttonsDown[btn]; MouseStatePress(btn); @@ -774,8 +780,8 @@ void InputHandler_Tick(void) { #ifdef CC_BUILD_TOUCH if (Input_TouchMode) { - left = !Input_HoldPlace && AnyBlockTouches(); - right = Input_HoldPlace && AnyBlockTouches(); + left = (Input_HoldMode == INPUT_MODE_DELETE) && AnyBlockTouches(); + right = (Input_HoldMode == INPUT_MODE_PLACE) && AnyBlockTouches(); middle = false; } #endif diff --git a/src/Input.h b/src/Input.h index bbf767742..ee144008f 100644 --- a/src/Input.h +++ b/src/Input.h @@ -82,8 +82,10 @@ extern cc_bool Input_RawMode; #ifdef CC_BUILD_TOUCH #define INPUT_MAX_POINTERS 32 +enum INPUT_MODE { INPUT_MODE_PLACE, INPUT_MODE_DELETE, INPUT_MODE_NONE, INPUT_MODE_COUNT }; + extern int Pointers_Count; -extern cc_bool Input_TapPlace, Input_HoldPlace; +extern int Input_TapMode, Input_HoldMode; /* Whether touch input is being used. */ extern cc_bool Input_TouchMode; void Input_SetTouchMode(cc_bool enabled); diff --git a/src/Menus.c b/src/Menus.c index f89d82125..ea783e19f 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -3873,14 +3873,25 @@ static struct Widget* touchCtrls_widgets[1 + TOUCHCTRLS_BTNS] = { }; #define TOUCHCTRLS_MAX_VERTICES (BUTTONWIDGET_MAX + TOUCHCTRLS_BTNS * BUTTONWIDGET_MAX) +static const char* GetTapDesc(int mode) { + if (mode == INPUT_MODE_PLACE) return "Tap: Place"; + if (mode == INPUT_MODE_DELETE) return "Tap: Delete"; + return "Tap: None"; +} static void TouchCtrls_UpdateTapText(void* screen) { struct TouchCtrlsScreen* s = (struct TouchCtrlsScreen*)screen; - ButtonWidget_SetConst(&s->btns[0], Input_TapPlace ? "Tap: Place" : "Tap: Delete", &s->font); + ButtonWidget_SetConst(&s->btns[0], GetTapDesc(Input_TapMode), &s->font); s->dirty = true; } + +static const char* GetHoldDesc(int mode) { + if (mode == INPUT_MODE_PLACE) return "Hold: Place"; + if (mode == INPUT_MODE_DELETE) return "Hold: Delete"; + return "Hold: None"; +} static void TouchCtrls_UpdateHoldText(void* screen) { struct TouchCtrlsScreen* s = (struct TouchCtrlsScreen*)screen; - ButtonWidget_SetConst(&s->btns[1], Input_HoldPlace ? "Hold: Place" : "Hold: Delete", &s->font); + ButtonWidget_SetConst(&s->btns[1], GetHoldDesc(Input_HoldMode), &s->font); s->dirty = true; } @@ -3910,11 +3921,11 @@ static void TouchCtrls_More(void* s, void* w) { TouchMoreScreen_Show(); } static void TouchCtrls_Onscreen(void* s, void* w) { TouchOnscreenScreen_Show(); } static void TouchCtrls_Tap(void* s, void* w) { - Input_TapPlace = !Input_TapPlace; + Input_TapMode = (Input_TapMode + 1) % INPUT_MODE_COUNT; TouchCtrls_UpdateTapText(s); } static void TouchCtrls_Hold(void* s, void* w) { - Input_HoldPlace = !Input_HoldPlace; + Input_HoldMode = (Input_HoldMode + 1) % INPUT_MODE_COUNT; TouchCtrls_UpdateHoldText(s); }