mirror of
https://github.com/libretro/RetroArch
synced 2025-04-18 14:42:30 +00:00
commit
5366fc1f29
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -14,9 +14,6 @@
|
|||||||
"*.in": "c",
|
"*.in": "c",
|
||||||
"*.rh": "c",
|
"*.rh": "c",
|
||||||
"array": "c",
|
"array": "c",
|
||||||
"stdlib.h": "c",
|
|
||||||
"cmath": "c",
|
|
||||||
"cstdlib": "c"
|
|
||||||
},
|
},
|
||||||
"C_Cpp.dimInactiveRegions": false,
|
"C_Cpp.dimInactiveRegions": false,
|
||||||
}
|
}
|
@ -662,6 +662,8 @@ static const unsigned input_poll_type_behavior = 2;
|
|||||||
|
|
||||||
static const unsigned input_bind_timeout = 5;
|
static const unsigned input_bind_timeout = 5;
|
||||||
|
|
||||||
|
static const unsigned input_bind_hold = 2;
|
||||||
|
|
||||||
static const unsigned menu_thumbnails_default = 3;
|
static const unsigned menu_thumbnails_default = 3;
|
||||||
|
|
||||||
static const unsigned menu_left_thumbnails_default = 0;
|
static const unsigned menu_left_thumbnails_default = 0;
|
||||||
|
@ -1494,6 +1494,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
|
|||||||
struct config_uint_setting *tmp = (struct config_uint_setting*)malloc((*size + 1) * sizeof(struct config_uint_setting));
|
struct config_uint_setting *tmp = (struct config_uint_setting*)malloc((*size + 1) * sizeof(struct config_uint_setting));
|
||||||
|
|
||||||
SETTING_UINT("input_bind_timeout", &settings->uints.input_bind_timeout, true, input_bind_timeout, false);
|
SETTING_UINT("input_bind_timeout", &settings->uints.input_bind_timeout, true, input_bind_timeout, false);
|
||||||
|
SETTING_UINT("input_bind_hold", &settings->uints.input_bind_hold, true, input_bind_hold, false);
|
||||||
SETTING_UINT("input_turbo_period", &settings->uints.input_turbo_period, true, turbo_period, false);
|
SETTING_UINT("input_turbo_period", &settings->uints.input_turbo_period, true, turbo_period, false);
|
||||||
SETTING_UINT("input_duty_cycle", &settings->uints.input_turbo_duty_cycle, true, turbo_duty_cycle, false);
|
SETTING_UINT("input_duty_cycle", &settings->uints.input_turbo_duty_cycle, true, turbo_duty_cycle, false);
|
||||||
SETTING_UINT("input_max_users", input_driver_get_uint(INPUT_ACTION_MAX_USERS), true, input_max_users, false);
|
SETTING_UINT("input_max_users", input_driver_get_uint(INPUT_ACTION_MAX_USERS), true, input_max_users, false);
|
||||||
|
@ -333,6 +333,7 @@ typedef struct settings
|
|||||||
unsigned input_turbo_duty_cycle;
|
unsigned input_turbo_duty_cycle;
|
||||||
|
|
||||||
unsigned input_bind_timeout;
|
unsigned input_bind_timeout;
|
||||||
|
unsigned input_bind_hold;
|
||||||
|
|
||||||
unsigned input_menu_toggle_gamepad_combo;
|
unsigned input_menu_toggle_gamepad_combo;
|
||||||
unsigned input_keyboard_gamepad_mapping_type;
|
unsigned input_keyboard_gamepad_mapping_type;
|
||||||
|
@ -52,6 +52,7 @@ enum {
|
|||||||
AMOTION_EVENT_BUTTON_TERTIARY = 1 << 2,
|
AMOTION_EVENT_BUTTON_TERTIARY = 1 << 2,
|
||||||
AMOTION_EVENT_BUTTON_BACK = 1 << 3,
|
AMOTION_EVENT_BUTTON_BACK = 1 << 3,
|
||||||
AMOTION_EVENT_BUTTON_FORWARD = 1 << 4,
|
AMOTION_EVENT_BUTTON_FORWARD = 1 << 4,
|
||||||
|
AMOTION_EVENT_AXIS_VSCROLL = 9,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -65,7 +66,7 @@ enum {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Use this to enable/disable using the touch screen as mouse */
|
/* Use this to enable/disable using the touch screen as mouse */
|
||||||
#define ENABLE_TOUCH_SCREEN_MOUSE 0
|
#define ENABLE_TOUCH_SCREEN_MOUSE 1
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -121,7 +122,7 @@ typedef struct android_input
|
|||||||
unsigned pointer_count;
|
unsigned pointer_count;
|
||||||
int mouse_x_delta, mouse_y_delta;
|
int mouse_x_delta, mouse_y_delta;
|
||||||
float mouse_x_prev, mouse_y_prev;
|
float mouse_x_prev, mouse_y_prev;
|
||||||
int mouse_l, mouse_r, mouse_m;
|
int mouse_l, mouse_r, mouse_m, mouse_wu, mouse_wd;
|
||||||
int64_t quick_tap_time;
|
int64_t quick_tap_time;
|
||||||
} android_input_t;
|
} android_input_t;
|
||||||
|
|
||||||
@ -566,6 +567,14 @@ static int16_t android_mouse_state(android_input_t *android, unsigned id)
|
|||||||
val = android->mouse_y_delta; /* flush delta after it has been read */
|
val = android->mouse_y_delta; /* flush delta after it has been read */
|
||||||
android->mouse_y_delta = 0;
|
android->mouse_y_delta = 0;
|
||||||
break;
|
break;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||||
|
val = android->mouse_wu;
|
||||||
|
android->mouse_wu = 0;
|
||||||
|
break;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||||
|
val = android->mouse_wd;
|
||||||
|
android->mouse_wd = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
@ -674,9 +683,17 @@ static INLINE int android_input_poll_event_type_motion(
|
|||||||
if (p_AMotionEvent_getButtonState)
|
if (p_AMotionEvent_getButtonState)
|
||||||
{
|
{
|
||||||
btn = (int)AMotionEvent_getButtonState(event);
|
btn = (int)AMotionEvent_getButtonState(event);
|
||||||
|
|
||||||
android->mouse_l = (btn & AMOTION_EVENT_BUTTON_PRIMARY);
|
android->mouse_l = (btn & AMOTION_EVENT_BUTTON_PRIMARY);
|
||||||
android->mouse_r = (btn & AMOTION_EVENT_BUTTON_SECONDARY);
|
android->mouse_r = (btn & AMOTION_EVENT_BUTTON_SECONDARY);
|
||||||
android->mouse_m = (btn & AMOTION_EVENT_BUTTON_TERTIARY);
|
android->mouse_m = (btn & AMOTION_EVENT_BUTTON_TERTIARY);
|
||||||
|
|
||||||
|
btn = (int)AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_VSCROLL, motion_ptr);
|
||||||
|
|
||||||
|
if (btn > 0)
|
||||||
|
android->mouse_wu = btn;
|
||||||
|
else if (btn < 0)
|
||||||
|
android->mouse_wd = btn;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1386,7 +1403,8 @@ static int16_t android_input_state(void *data,
|
|||||||
port, idx, id, binds[port]);
|
port, idx, id, binds[port]);
|
||||||
break;
|
break;
|
||||||
case RETRO_DEVICE_MOUSE:
|
case RETRO_DEVICE_MOUSE:
|
||||||
return android_mouse_state(android, id);
|
ret = android_mouse_state(android, id);
|
||||||
|
return ret;
|
||||||
case RETRO_DEVICE_LIGHTGUN:
|
case RETRO_DEVICE_LIGHTGUN:
|
||||||
return android_lightgun_device_state(android, id);
|
return android_lightgun_device_state(android, id);
|
||||||
case RETRO_DEVICE_POINTER:
|
case RETRO_DEVICE_POINTER:
|
||||||
|
@ -614,6 +614,11 @@ int menu_hash_get_help_ar_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Amount of seconds to wait until proceeding \n"
|
"Amount of seconds to wait until proceeding \n"
|
||||||
"to the next bind.");
|
"to the next bind.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay scale.");
|
"Overlay scale.");
|
||||||
|
@ -765,6 +765,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL,
|
|||||||
"Bind Default All")
|
"Bind Default All")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
||||||
"Bind Timeout")
|
"Bind Timeout")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_HOLD,
|
||||||
|
"Bind Hold")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
||||||
"Hide Unbound Core Input Descriptors")
|
"Hide Unbound Core Input Descriptors")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
||||||
@ -2459,6 +2461,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period when turbo-enabled buttons are toggled. Numbers are described in frames."
|
"Describes the period when turbo-enabled buttons are toggled. Numbers are described in frames."
|
||||||
|
@ -569,6 +569,11 @@ int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Amount of seconds to wait until proceeding \n"
|
"Amount of seconds to wait until proceeding \n"
|
||||||
"to the next bind.");
|
"to the next bind.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay scale.");
|
"Overlay scale.");
|
||||||
|
@ -2299,6 +2299,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
||||||
|
@ -566,6 +566,11 @@ int menu_hash_get_help_cht_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Amount of seconds to wait until proceeding \n"
|
"Amount of seconds to wait until proceeding \n"
|
||||||
"to the next bind.");
|
"to the next bind.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay 比例.");
|
"Overlay 比例.");
|
||||||
|
@ -2291,6 +2291,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
||||||
|
@ -593,6 +593,11 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Anzahl der Sekunden, die gewartet werden soll, \n"
|
"Anzahl der Sekunden, die gewartet werden soll, \n"
|
||||||
"bis zur nächsten Belegung gewechselt wird.");
|
"bis zur nächsten Belegung gewechselt wird.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay-Skalierung.");
|
"Overlay-Skalierung.");
|
||||||
|
@ -628,6 +628,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL,
|
|||||||
"Bind Default All")
|
"Bind Default All")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
||||||
"Bind Timeout")
|
"Bind Timeout")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_HOLD,
|
||||||
|
"Bind Hold")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
||||||
"Hide Unbound Core Input Descriptors")
|
"Hide Unbound Core Input Descriptors")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
||||||
@ -2190,6 +2192,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
||||||
|
@ -713,6 +713,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL,
|
|||||||
"Bind Default All")
|
"Bind Default All")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
||||||
"Bind Timeout")
|
"Bind Timeout")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_HOLD,
|
||||||
|
"Bind Hold")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
||||||
"Nascondi i descrittori di input di core non legati")
|
"Nascondi i descrittori di input di core non legati")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
||||||
|
@ -586,6 +586,11 @@ int menu_hash_get_help_jp_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Amount of seconds to wait until proceeding \n"
|
"Amount of seconds to wait until proceeding \n"
|
||||||
"to the next bind.");
|
"to the next bind.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay scale.");
|
"Overlay scale.");
|
||||||
|
@ -2443,6 +2443,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
||||||
|
@ -588,6 +588,11 @@ int menu_hash_get_help_ko_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Amount of seconds to wait until proceeding \n"
|
"Amount of seconds to wait until proceeding \n"
|
||||||
"to the next bind.");
|
"to the next bind.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay scale.");
|
"Overlay scale.");
|
||||||
|
@ -493,6 +493,8 @@ MSG_HASH(MENU_ENUM_LABEL_INPUT_BIND_MODE,
|
|||||||
"input_bind_mode")
|
"input_bind_mode")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT,
|
MSG_HASH(MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT,
|
||||||
"input_bind_timeout")
|
"input_bind_timeout")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_INPUT_BIND_HOLD,
|
||||||
|
"input_bind_hold")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
MSG_HASH(MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
||||||
"input_descriptor_hide_unbound")
|
"input_descriptor_hide_unbound")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW,
|
MSG_HASH(MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW,
|
||||||
|
@ -628,6 +628,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL,
|
|||||||
"Bind Default All")
|
"Bind Default All")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
||||||
"Bind Timeout")
|
"Bind Timeout")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_HOLD,
|
||||||
|
"Bind Hold")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
||||||
"Verbergen Niet-gemapte Core Input Descripties")
|
"Verbergen Niet-gemapte Core Input Descripties")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
||||||
@ -2188,6 +2190,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
"Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames."
|
||||||
|
@ -618,6 +618,11 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Quantos segundos aguardar até prosseguir \n"
|
"Quantos segundos aguardar até prosseguir \n"
|
||||||
"para o próximo vínculo.");
|
"para o próximo vínculo.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Escala da Transparência.");
|
"Escala da Transparência.");
|
||||||
|
@ -610,6 +610,11 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Amount of seconds to wait until proceeding \n"
|
"Amount of seconds to wait until proceeding \n"
|
||||||
"to the next bind.");
|
"to the next bind.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay scale.");
|
"Overlay scale.");
|
||||||
|
@ -777,6 +777,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL,
|
|||||||
"Bind Default All")
|
"Bind Default All")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
||||||
"Bind Timeout")
|
"Bind Timeout")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_HOLD,
|
||||||
|
"Bind Hold")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
||||||
"Hide Unbound Core Input Descriptors")
|
"Hide Unbound Core Input Descriptors")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
||||||
@ -2515,6 +2517,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period when turbo-enabled buttons are toggled. Numbers are described in frames."
|
"Describes the period when turbo-enabled buttons are toggled. Numbers are described in frames."
|
||||||
|
@ -586,6 +586,11 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
"Amount of seconds to wait until proceeding \n"
|
"Amount of seconds to wait until proceeding \n"
|
||||||
"to the next bind.");
|
"to the next bind.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Input bind hold time (in seconds). \n"
|
||||||
|
"Amount of seconds to hold an input to bind it.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Overlay scale.");
|
"Overlay scale.");
|
||||||
|
@ -707,6 +707,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL,
|
|||||||
"Bind Default All")
|
"Bind Default All")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT,
|
||||||
"Bind Timeout")
|
"Bind Timeout")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_HOLD,
|
||||||
|
"Bind Hold")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND,
|
||||||
"Hide Unbound Core Input Descriptors")
|
"Hide Unbound Core Input Descriptors")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW,
|
||||||
@ -2327,6 +2329,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||||
"Amount of seconds to wait until proceeding to the next bind."
|
"Amount of seconds to wait until proceeding to the next bind."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||||
|
"Amount of seconds to hold an input to bind it."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||||
"Describes the period when turbo-enabled buttons are toggled. Numbers are described in frames."
|
"Describes the period when turbo-enabled buttons are toggled. Numbers are described in frames."
|
||||||
|
@ -145,6 +145,7 @@ default_sublabel_macro(action_bind_sublabel_input_max_users, MENU_
|
|||||||
default_sublabel_macro(action_bind_sublabel_input_poll_type_behavior, MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR)
|
default_sublabel_macro(action_bind_sublabel_input_poll_type_behavior, MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR)
|
||||||
default_sublabel_macro(action_bind_sublabel_input_all_users_control_menu, MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU)
|
default_sublabel_macro(action_bind_sublabel_input_all_users_control_menu, MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU)
|
||||||
default_sublabel_macro(action_bind_sublabel_input_bind_timeout, MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT)
|
default_sublabel_macro(action_bind_sublabel_input_bind_timeout, MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT)
|
||||||
|
default_sublabel_macro(action_bind_sublabel_input_bind_hold, MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD)
|
||||||
default_sublabel_macro(action_bind_sublabel_audio_volume, MENU_ENUM_SUBLABEL_AUDIO_VOLUME)
|
default_sublabel_macro(action_bind_sublabel_audio_volume, MENU_ENUM_SUBLABEL_AUDIO_VOLUME)
|
||||||
default_sublabel_macro(action_bind_sublabel_audio_mixer_volume, MENU_ENUM_SUBLABEL_AUDIO_MIXER_VOLUME)
|
default_sublabel_macro(action_bind_sublabel_audio_mixer_volume, MENU_ENUM_SUBLABEL_AUDIO_MIXER_VOLUME)
|
||||||
default_sublabel_macro(action_bind_sublabel_audio_sync, MENU_ENUM_SUBLABEL_AUDIO_SYNC)
|
default_sublabel_macro(action_bind_sublabel_audio_sync, MENU_ENUM_SUBLABEL_AUDIO_SYNC)
|
||||||
@ -1485,6 +1486,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
|||||||
case MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT:
|
case MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_bind_timeout);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_bind_timeout);
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_BIND_HOLD:
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_bind_hold);
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD:
|
case MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_axis_threshold);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_axis_threshold);
|
||||||
break;
|
break;
|
||||||
|
@ -6298,6 +6298,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
|||||||
MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD, PARSE_ONLY_FLOAT, false);
|
MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD, PARSE_ONLY_FLOAT, false);
|
||||||
ret = menu_displaylist_parse_settings_enum(menu, info,
|
ret = menu_displaylist_parse_settings_enum(menu, info,
|
||||||
MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT, PARSE_ONLY_UINT, false);
|
MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT, PARSE_ONLY_UINT, false);
|
||||||
|
ret = menu_displaylist_parse_settings_enum(menu, info,
|
||||||
|
MENU_ENUM_LABEL_INPUT_BIND_HOLD, PARSE_ONLY_UINT, false);
|
||||||
ret = menu_displaylist_parse_settings_enum(menu, info,
|
ret = menu_displaylist_parse_settings_enum(menu, info,
|
||||||
MENU_ENUM_LABEL_INPUT_TURBO_PERIOD, PARSE_ONLY_UINT, false);
|
MENU_ENUM_LABEL_INPUT_TURBO_PERIOD, PARSE_ONLY_UINT, false);
|
||||||
ret = menu_displaylist_parse_settings_enum(menu, info,
|
ret = menu_displaylist_parse_settings_enum(menu, info,
|
||||||
|
@ -4546,6 +4546,20 @@ static bool setting_append_list(
|
|||||||
menu_settings_list_current_add_range(list, list_info, 1, 0, 1, true, false);
|
menu_settings_list_current_add_range(list, list_info, 1, 0, 1, true, false);
|
||||||
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
|
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
|
||||||
|
|
||||||
|
CONFIG_UINT(
|
||||||
|
list, list_info,
|
||||||
|
&settings->uints.input_bind_hold,
|
||||||
|
MENU_ENUM_LABEL_INPUT_BIND_HOLD,
|
||||||
|
MENU_ENUM_LABEL_VALUE_INPUT_BIND_HOLD,
|
||||||
|
input_bind_hold,
|
||||||
|
&group_info,
|
||||||
|
&subgroup_info,
|
||||||
|
parent_group,
|
||||||
|
general_write_handler,
|
||||||
|
general_read_handler);
|
||||||
|
menu_settings_list_current_add_range(list, list_info, 1, 0, 1, true, false);
|
||||||
|
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
|
||||||
|
|
||||||
CONFIG_UINT(
|
CONFIG_UINT(
|
||||||
list, list_info,
|
list, list_info,
|
||||||
&settings->uints.input_turbo_period,
|
&settings->uints.input_turbo_period,
|
||||||
|
@ -51,10 +51,12 @@ struct menu_bind_axis_state
|
|||||||
|
|
||||||
struct menu_bind_state
|
struct menu_bind_state
|
||||||
{
|
{
|
||||||
struct retro_keybind *target;
|
struct retro_keybind * output;
|
||||||
/* For keyboard binding. */
|
struct retro_keybind buffer;
|
||||||
|
|
||||||
|
rarch_timer_t timer_timeout;
|
||||||
|
rarch_timer_t timer_hold;
|
||||||
|
|
||||||
rarch_timer_t timer;
|
|
||||||
unsigned begin;
|
unsigned begin;
|
||||||
unsigned last;
|
unsigned last;
|
||||||
unsigned user;
|
unsigned user;
|
||||||
@ -71,11 +73,18 @@ static bool menu_input_key_bind_custom_bind_keyboard_cb(
|
|||||||
{
|
{
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
|
|
||||||
menu_input_binds.target->key = (enum retro_key)code;
|
/* store key in bind */
|
||||||
menu_input_binds.begin++;
|
menu_input_binds.buffer.key = (enum retro_key)code;
|
||||||
menu_input_binds.target++;
|
|
||||||
|
|
||||||
rarch_timer_begin_new_time(&menu_input_binds.timer, settings->uints.input_bind_timeout);
|
/* write out the bind */
|
||||||
|
*(menu_input_binds.output)=menu_input_binds.buffer;
|
||||||
|
|
||||||
|
/* next bind */
|
||||||
|
menu_input_binds.begin++;
|
||||||
|
menu_input_binds.output++;
|
||||||
|
menu_input_binds.buffer=*(menu_input_binds.output);
|
||||||
|
rarch_timer_begin_new_time(&menu_input_binds.timer_hold, settings->uints.input_bind_hold);
|
||||||
|
rarch_timer_begin_new_time(&menu_input_binds.timer_timeout, settings->uints.input_bind_timeout);
|
||||||
|
|
||||||
return (menu_input_binds.begin <= menu_input_binds.last);
|
return (menu_input_binds.begin <= menu_input_binds.last);
|
||||||
}
|
}
|
||||||
@ -105,7 +114,8 @@ static int menu_input_key_bind_set_mode_common(
|
|||||||
|
|
||||||
menu_input_binds.begin = bind_type;
|
menu_input_binds.begin = bind_type;
|
||||||
menu_input_binds.last = bind_type;
|
menu_input_binds.last = bind_type;
|
||||||
menu_input_binds.target = keybind;
|
menu_input_binds.output = keybind;
|
||||||
|
menu_input_binds.buffer = *(menu_input_binds.output);
|
||||||
menu_input_binds.user = index_offset;
|
menu_input_binds.user = index_offset;
|
||||||
|
|
||||||
info.list = menu_stack;
|
info.list = menu_stack;
|
||||||
@ -119,7 +129,8 @@ static int menu_input_key_bind_set_mode_common(
|
|||||||
menu_displaylist_info_free(&info);
|
menu_displaylist_info_free(&info);
|
||||||
break;
|
break;
|
||||||
case MENU_INPUT_BINDS_CTL_BIND_ALL:
|
case MENU_INPUT_BINDS_CTL_BIND_ALL:
|
||||||
menu_input_binds.target = &input_config_binds[index_offset][0];
|
menu_input_binds.output = &input_config_binds[index_offset][0];
|
||||||
|
menu_input_binds.buffer = *(menu_input_binds.output);
|
||||||
menu_input_binds.begin = MENU_SETTINGS_BIND_BEGIN;
|
menu_input_binds.begin = MENU_SETTINGS_BIND_BEGIN;
|
||||||
menu_input_binds.last = MENU_SETTINGS_BIND_LAST;
|
menu_input_binds.last = MENU_SETTINGS_BIND_LAST;
|
||||||
|
|
||||||
@ -268,7 +279,8 @@ bool menu_input_key_bind_set_mode(
|
|||||||
menu_input_key_bind_poll_bind_state(
|
menu_input_key_bind_poll_bind_state(
|
||||||
&menu_input_binds, menu_bind_port, false);
|
&menu_input_binds, menu_bind_port, false);
|
||||||
|
|
||||||
rarch_timer_begin_new_time(&menu_input_binds.timer, settings->uints.input_bind_timeout);
|
rarch_timer_begin_new_time(&menu_input_binds.timer_hold, settings->uints.input_bind_hold);
|
||||||
|
rarch_timer_begin_new_time(&menu_input_binds.timer_timeout, settings->uints.input_bind_timeout);
|
||||||
|
|
||||||
keys.userdata = menu;
|
keys.userdata = menu;
|
||||||
keys.cb = menu_input_key_bind_custom_bind_keyboard_cb;
|
keys.cb = menu_input_key_bind_custom_bind_keyboard_cb;
|
||||||
@ -280,6 +292,7 @@ bool menu_input_key_bind_set_mode(
|
|||||||
static bool menu_input_key_bind_poll_find_trigger_pad(
|
static bool menu_input_key_bind_poll_find_trigger_pad(
|
||||||
struct menu_bind_state *state,
|
struct menu_bind_state *state,
|
||||||
struct menu_bind_state *new_state,
|
struct menu_bind_state *new_state,
|
||||||
|
struct retro_keybind * output,
|
||||||
unsigned p)
|
unsigned p)
|
||||||
{
|
{
|
||||||
unsigned a, b, h;
|
unsigned a, b, h;
|
||||||
@ -307,7 +320,7 @@ static bool menu_input_key_bind_poll_find_trigger_pad(
|
|||||||
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||||
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
|
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
|
||||||
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
|
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
|
||||||
state->target->mbutton = b;
|
output->mbutton = b;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -319,8 +332,8 @@ static bool menu_input_key_bind_poll_find_trigger_pad(
|
|||||||
if (!iterate)
|
if (!iterate)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
state->target->joykey = b;
|
output->joykey = b;
|
||||||
state->target->joyaxis = AXIS_NONE;
|
output->joyaxis = AXIS_NONE;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,9 +351,9 @@ static bool menu_input_key_bind_poll_find_trigger_pad(
|
|||||||
{
|
{
|
||||||
/* Take care of case where axis rests on +/- 0x7fff
|
/* Take care of case where axis rests on +/- 0x7fff
|
||||||
* (e.g. 360 controller on Linux) */
|
* (e.g. 360 controller on Linux) */
|
||||||
state->target->joyaxis = n->axes[a] > 0
|
output->joyaxis = n->axes[a] > 0
|
||||||
? AXIS_POS(a) : AXIS_NEG(a);
|
? AXIS_POS(a) : AXIS_NEG(a);
|
||||||
state->target->joykey = NO_BTN;
|
output->joykey = NO_BTN;
|
||||||
|
|
||||||
/* Lock the current axis */
|
/* Lock the current axis */
|
||||||
new_state->axis_state[p].locked_axes[a] =
|
new_state->axis_state[p].locked_axes[a] =
|
||||||
@ -369,8 +382,8 @@ static bool menu_input_key_bind_poll_find_trigger_pad(
|
|||||||
|
|
||||||
if (sane_trigger)
|
if (sane_trigger)
|
||||||
{
|
{
|
||||||
state->target->joykey = HAT_MAP(h, sane_trigger);
|
output->joykey = HAT_MAP(h, sane_trigger);
|
||||||
state->target->joyaxis = AXIS_NONE;
|
output->joyaxis = AXIS_NONE;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -378,9 +391,119 @@ static bool menu_input_key_bind_poll_find_trigger_pad(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool menu_input_key_bind_poll_find_hold_pad(
|
||||||
|
struct menu_bind_state *new_state,
|
||||||
|
struct retro_keybind * output,
|
||||||
|
unsigned p)
|
||||||
|
{
|
||||||
|
unsigned a, b, h;
|
||||||
|
const struct menu_bind_state_port *n = (const struct menu_bind_state_port*)
|
||||||
|
&new_state->state[p];
|
||||||
|
|
||||||
|
for (b = 0; b < MENU_MAX_MBUTTONS; b++)
|
||||||
|
{
|
||||||
|
bool iterate = n->mbuttons[b];
|
||||||
|
|
||||||
|
if (!iterate)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
switch ( b )
|
||||||
|
{
|
||||||
|
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_LEFT:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_BUTTON_5:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
|
||||||
|
output->mbutton = b;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (b = 0; b < MENU_MAX_BUTTONS; b++)
|
||||||
|
{
|
||||||
|
bool iterate = n->buttons[b];
|
||||||
|
|
||||||
|
if (!iterate)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
output->joykey = b;
|
||||||
|
output->joyaxis = AXIS_NONE;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Axes are a bit tricky ... */
|
||||||
|
for (a = 0; a < MENU_MAX_AXES; a++)
|
||||||
|
{
|
||||||
|
if (abs(n->axes[a]) >= 20000)
|
||||||
|
{
|
||||||
|
/* Take care of case where axis rests on +/- 0x7fff
|
||||||
|
* (e.g. 360 controller on Linux) */
|
||||||
|
output->joyaxis = n->axes[a] > 0
|
||||||
|
? AXIS_POS(a) : AXIS_NEG(a);
|
||||||
|
output->joykey = NO_BTN;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (h = 0; h < MENU_MAX_HATS; h++)
|
||||||
|
{
|
||||||
|
uint16_t trigged = n->hats[h];
|
||||||
|
uint16_t sane_trigger = 0;
|
||||||
|
|
||||||
|
if (trigged & HAT_UP_MASK)
|
||||||
|
sane_trigger = HAT_UP_MASK;
|
||||||
|
else if (trigged & HAT_DOWN_MASK)
|
||||||
|
sane_trigger = HAT_DOWN_MASK;
|
||||||
|
else if (trigged & HAT_LEFT_MASK)
|
||||||
|
sane_trigger = HAT_LEFT_MASK;
|
||||||
|
else if (trigged & HAT_RIGHT_MASK)
|
||||||
|
sane_trigger = HAT_RIGHT_MASK;
|
||||||
|
|
||||||
|
if (sane_trigger)
|
||||||
|
{
|
||||||
|
output->joykey = HAT_MAP(h, sane_trigger);
|
||||||
|
output->joyaxis = AXIS_NONE;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool menu_input_key_bind_poll_find_hold(
|
||||||
|
struct menu_bind_state *new_state,
|
||||||
|
struct retro_keybind * output
|
||||||
|
)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||||
|
|
||||||
|
if (!new_state)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (i = 0; i < max_users; i++)
|
||||||
|
{
|
||||||
|
if (!menu_input_key_bind_poll_find_hold_pad( new_state, output, i))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static bool menu_input_key_bind_poll_find_trigger(
|
static bool menu_input_key_bind_poll_find_trigger(
|
||||||
struct menu_bind_state *state,
|
struct menu_bind_state *state,
|
||||||
struct menu_bind_state *new_state)
|
struct menu_bind_state *new_state,
|
||||||
|
struct retro_keybind * output
|
||||||
|
)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||||
@ -390,8 +513,7 @@ static bool menu_input_key_bind_poll_find_trigger(
|
|||||||
|
|
||||||
for (i = 0; i < max_users; i++)
|
for (i = 0; i < max_users; i++)
|
||||||
{
|
{
|
||||||
if (!menu_input_key_bind_poll_find_trigger_pad(
|
if (!menu_input_key_bind_poll_find_trigger_pad( state, new_state, output, i))
|
||||||
state, new_state, i))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -413,32 +535,35 @@ bool menu_input_key_bind_set_min_max(menu_input_ctx_bind_limits_t *lim)
|
|||||||
|
|
||||||
bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind)
|
bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind)
|
||||||
{
|
{
|
||||||
struct menu_bind_state binds;
|
|
||||||
bool timed_out = false;
|
bool timed_out = false;
|
||||||
settings_t * settings = config_get_ptr();
|
settings_t * settings = config_get_ptr();
|
||||||
|
|
||||||
rarch_timer_tick(&menu_input_binds.timer);
|
|
||||||
|
|
||||||
if (!bind)
|
if (!bind)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (rarch_timer_has_expired(&menu_input_binds.timer))
|
|
||||||
{
|
|
||||||
input_driver_keyboard_mapping_set_block(false);
|
|
||||||
|
|
||||||
menu_input_binds.begin++;
|
|
||||||
menu_input_binds.target++;
|
|
||||||
rarch_timer_begin_new_time(&menu_input_binds.timer, settings->uints.input_bind_timeout);
|
|
||||||
timed_out = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf( bind->s, bind->len,
|
snprintf( bind->s, bind->len,
|
||||||
"[%s]\npress keyboard, mouse or joypad\n(timeout %d %s)",
|
"[%s]\npress keyboard, mouse or joypad\n(timeout %d %s)",
|
||||||
input_config_bind_map_get_desc(
|
input_config_bind_map_get_desc(
|
||||||
menu_input_binds.begin - MENU_SETTINGS_BIND_BEGIN ),
|
menu_input_binds.begin - MENU_SETTINGS_BIND_BEGIN ),
|
||||||
rarch_timer_get_timeout(&menu_input_binds.timer),
|
rarch_timer_get_timeout( &menu_input_binds.timer_timeout ),
|
||||||
msg_hash_to_str( MENU_ENUM_LABEL_VALUE_SECONDS ) );
|
msg_hash_to_str( MENU_ENUM_LABEL_VALUE_SECONDS ) );
|
||||||
|
|
||||||
|
/*tick main timers*/
|
||||||
|
rarch_timer_tick( &menu_input_binds.timer_timeout );
|
||||||
|
rarch_timer_tick( &menu_input_binds.timer_hold );
|
||||||
|
|
||||||
|
if (rarch_timer_has_expired(&menu_input_binds.timer_timeout))
|
||||||
|
{
|
||||||
|
input_driver_keyboard_mapping_set_block(false);
|
||||||
|
|
||||||
|
/*skip to next bind*/
|
||||||
|
menu_input_binds.begin++;
|
||||||
|
menu_input_binds.output++;
|
||||||
|
rarch_timer_begin_new_time(&menu_input_binds.timer_hold, settings->uints.input_bind_hold);
|
||||||
|
rarch_timer_begin_new_time(&menu_input_binds.timer_timeout, settings->uints.input_bind_timeout);
|
||||||
|
timed_out = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* binds.begin is updated in keyboard_press callback. */
|
/* binds.begin is updated in keyboard_press callback. */
|
||||||
if (menu_input_binds.begin > menu_input_binds.last)
|
if (menu_input_binds.begin > menu_input_binds.last)
|
||||||
{
|
{
|
||||||
@ -452,14 +577,59 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
bool complete = false;
|
||||||
|
struct menu_bind_state binds;
|
||||||
binds = menu_input_binds;
|
binds = menu_input_binds;
|
||||||
|
|
||||||
input_driver_keyboard_mapping_set_block( true );
|
input_driver_keyboard_mapping_set_block( true );
|
||||||
menu_input_key_bind_poll_bind_state( &binds, menu_bind_port, timed_out );
|
menu_input_key_bind_poll_bind_state( &binds, menu_bind_port, timed_out );
|
||||||
|
|
||||||
if ((binds.skip && !menu_input_binds.skip) ||
|
#ifdef ANDROID
|
||||||
menu_input_key_bind_poll_find_trigger(&menu_input_binds, &binds))
|
|
||||||
|
/*keep resetting bind during the hold period, or we'll potentially bind joystick and mouse, etc.*/
|
||||||
|
binds.buffer = *( binds.output );
|
||||||
|
|
||||||
|
if ( menu_input_key_bind_poll_find_hold( &binds, &binds.buffer ) )
|
||||||
{
|
{
|
||||||
|
/*inhibit timeout*/
|
||||||
|
rarch_timer_begin_new_time( &binds.timer_timeout, settings->uints.input_bind_timeout );
|
||||||
|
|
||||||
|
/*run hold timer*/
|
||||||
|
rarch_timer_tick( &binds.timer_hold );
|
||||||
|
|
||||||
|
snprintf( bind->s, bind->len,
|
||||||
|
"[%s]\npress keyboard, mouse or joypad\nand hold ...",
|
||||||
|
input_config_bind_map_get_desc(
|
||||||
|
menu_input_binds.begin - MENU_SETTINGS_BIND_BEGIN ) );
|
||||||
|
|
||||||
|
/*hold complete?*/
|
||||||
|
if ( rarch_timer_has_expired( &binds.timer_hold ) )
|
||||||
|
{
|
||||||
|
complete = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*reset hold countdown*/
|
||||||
|
rarch_timer_begin_new_time( &binds.timer_hold, settings->uints.input_bind_hold );
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
if ( ( binds.skip && !menu_input_binds.skip ) ||
|
||||||
|
menu_input_key_bind_poll_find_trigger( &menu_input_binds, &binds, &( binds.buffer ) ) )
|
||||||
|
{
|
||||||
|
complete = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ( complete )
|
||||||
|
{
|
||||||
|
/*update bind*/
|
||||||
|
*( binds.output ) = binds.buffer;
|
||||||
|
|
||||||
input_driver_keyboard_mapping_set_block( false );
|
input_driver_keyboard_mapping_set_block( false );
|
||||||
|
|
||||||
/* Avoid new binds triggering things right away. */
|
/* Avoid new binds triggering things right away. */
|
||||||
@ -473,10 +643,15 @@ bool menu_input_key_bind_iterate(menu_input_ctx_bind_t *bind)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
binds.target++;
|
/*next bind*/
|
||||||
rarch_timer_begin_new_time(&binds.timer, settings->uints.input_bind_timeout);
|
binds.output++;
|
||||||
|
binds.buffer = *( binds.output );
|
||||||
|
rarch_timer_begin_new_time( &binds.timer_hold, settings->uints.input_bind_hold );
|
||||||
|
rarch_timer_begin_new_time( &binds.timer_timeout, settings->uints.input_bind_timeout );
|
||||||
}
|
}
|
||||||
|
|
||||||
menu_input_binds = binds;
|
menu_input_binds = binds;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -664,6 +664,7 @@ enum msg_hash_enums
|
|||||||
MENU_LABEL(INPUT_DESCRIPTOR_HIDE_UNBOUND),
|
MENU_LABEL(INPUT_DESCRIPTOR_HIDE_UNBOUND),
|
||||||
MENU_LABEL(INPUT_AXIS_THRESHOLD),
|
MENU_LABEL(INPUT_AXIS_THRESHOLD),
|
||||||
MENU_LABEL(INPUT_BIND_TIMEOUT),
|
MENU_LABEL(INPUT_BIND_TIMEOUT),
|
||||||
|
MENU_LABEL(INPUT_BIND_HOLD),
|
||||||
MENU_LABEL(INPUT_REMAP_BINDS_ENABLE),
|
MENU_LABEL(INPUT_REMAP_BINDS_ENABLE),
|
||||||
MENU_LABEL(MENU_INPUT_SWAP_OK_CANCEL),
|
MENU_LABEL(MENU_INPUT_SWAP_OK_CANCEL),
|
||||||
MENU_LABEL(INPUT_OVERLAY_ENABLE),
|
MENU_LABEL(INPUT_OVERLAY_ENABLE),
|
||||||
|
@ -125,14 +125,14 @@ void rarch_timer_tick(rarch_timer_t *timer)
|
|||||||
if (!timer)
|
if (!timer)
|
||||||
return;
|
return;
|
||||||
timer->current = cpu_features_get_time_usec();
|
timer->current = cpu_features_get_time_usec();
|
||||||
timer->timeout = (timer->timeout_end - timer->current) / 1000000;
|
timer->timeout_us = (timer->timeout_end - timer->current);
|
||||||
}
|
}
|
||||||
|
|
||||||
int rarch_timer_get_timeout(rarch_timer_t *timer)
|
int rarch_timer_get_timeout(rarch_timer_t *timer)
|
||||||
{
|
{
|
||||||
if (!timer)
|
if (!timer)
|
||||||
return 0;
|
return 0;
|
||||||
return (int)timer->timeout;
|
return (int)timer->timeout_us / 1000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rarch_timer_is_running(rarch_timer_t *timer)
|
bool rarch_timer_is_running(rarch_timer_t *timer)
|
||||||
@ -144,7 +144,7 @@ bool rarch_timer_is_running(rarch_timer_t *timer)
|
|||||||
|
|
||||||
bool rarch_timer_has_expired(rarch_timer_t *timer)
|
bool rarch_timer_has_expired(rarch_timer_t *timer)
|
||||||
{
|
{
|
||||||
if (!timer || timer->timeout <= 0)
|
if (!timer || timer->timeout_us <= 0)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -162,7 +162,18 @@ void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec)
|
|||||||
{
|
{
|
||||||
if (!timer)
|
if (!timer)
|
||||||
return;
|
return;
|
||||||
timer->timeout_end = cpu_features_get_time_usec() + sec * 1000000;
|
timer->timeout_us = sec * 1000000;
|
||||||
|
timer->current = cpu_features_get_time_usec();
|
||||||
|
timer->timeout_end = timer->current + timer->timeout_us;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rarch_timer_begin_new_time_us(rarch_timer_t *timer, uint64_t usec)
|
||||||
|
{
|
||||||
|
if (!timer)
|
||||||
|
return;
|
||||||
|
timer->timeout_us = usec;
|
||||||
|
timer->current = cpu_features_get_time_usec();
|
||||||
|
timer->timeout_end = timer->current + timer->timeout_us;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec)
|
void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec)
|
||||||
|
@ -33,7 +33,7 @@ RETRO_BEGIN_DECLS
|
|||||||
typedef struct rarch_timer
|
typedef struct rarch_timer
|
||||||
{
|
{
|
||||||
int64_t current;
|
int64_t current;
|
||||||
int64_t timeout;
|
int64_t timeout_us;
|
||||||
int64_t timeout_end;
|
int64_t timeout_end;
|
||||||
bool timer_begin;
|
bool timer_begin;
|
||||||
bool timer_end;
|
bool timer_end;
|
||||||
@ -99,6 +99,8 @@ void rarch_timer_begin(rarch_timer_t *timer, uint64_t ms);
|
|||||||
|
|
||||||
void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec);
|
void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec);
|
||||||
|
|
||||||
|
void rarch_timer_begin_new_time_us(rarch_timer_t *timer, uint64_t usec);
|
||||||
|
|
||||||
void rarch_timer_end(rarch_timer_t *timer);
|
void rarch_timer_end(rarch_timer_t *timer);
|
||||||
|
|
||||||
int rarch_timer_get_timeout(rarch_timer_t *timer);
|
int rarch_timer_get_timeout(rarch_timer_t *timer);
|
||||||
|
@ -3209,7 +3209,7 @@ static enum runloop_state runloop_check_state(
|
|||||||
{
|
{
|
||||||
/* rarch_timer_tick */
|
/* rarch_timer_tick */
|
||||||
timer.current = cpu_features_get_time_usec();
|
timer.current = cpu_features_get_time_usec();
|
||||||
timer.timeout = (timer.timeout_end - timer.current) / 1000;
|
timer.timeout_us = (timer.timeout_end - timer.current);
|
||||||
|
|
||||||
if (!timer.timer_end && rarch_timer_has_expired(&timer))
|
if (!timer.timer_end && rarch_timer_has_expired(&timer))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user