mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-08 06:47:23 -04:00
Mobile: Allow turning off hold/tap place/delete behaviour (Thanks HeteroChromia420)
This commit is contained in:
parent
6e433e5585
commit
6aac1c804f
14
src/Input.c
14
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
|
||||
|
@ -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);
|
||||
|
19
src/Menus.c
19
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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user