Mobile: Allow turning off hold/tap place/delete behaviour (Thanks HeteroChromia420)

This commit is contained in:
UnknownShadow200 2021-08-22 10:05:31 +10:00
parent 6e433e5585
commit 6aac1c804f
3 changed files with 28 additions and 9 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);
}