mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
Cleanups - move input code to menu_input.c
This commit is contained in:
parent
3bbc5ebafe
commit
49a2bce941
55
menu/menu.c
55
menu/menu.c
@ -417,59 +417,8 @@ void menu_apply_deferred_settings(void)
|
||||
int menu_iterate(retro_input_t input,
|
||||
retro_input_t old_input, retro_input_t trigger_input)
|
||||
{
|
||||
unsigned action = MENU_ACTION_NOOP;
|
||||
static bool initial_held = true;
|
||||
static bool first_held = false;
|
||||
int32_t ret = 0;
|
||||
static const retro_input_t input_repeat =
|
||||
(1ULL << RETRO_DEVICE_ID_JOYPAD_UP)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_RIGHT)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_L)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_R);
|
||||
|
||||
if (!driver.menu)
|
||||
return -1;
|
||||
|
||||
driver.retro_ctx.poll_cb();
|
||||
|
||||
if (input & input_repeat)
|
||||
{
|
||||
if (!first_held)
|
||||
{
|
||||
first_held = true;
|
||||
driver.menu->delay_timer = initial_held ? 12 : 6;
|
||||
driver.menu->delay_count = 0;
|
||||
}
|
||||
|
||||
if (driver.menu->delay_count >= driver.menu->delay_timer)
|
||||
{
|
||||
first_held = false;
|
||||
trigger_input |= input & input_repeat;
|
||||
driver.menu->scroll_accel = min(driver.menu->scroll_accel + 1, 64);
|
||||
}
|
||||
|
||||
initial_held = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
first_held = false;
|
||||
initial_held = true;
|
||||
driver.menu->scroll_accel = 0;
|
||||
}
|
||||
|
||||
driver.menu->mouse.enable = g_settings.menu.mouse_enable;
|
||||
|
||||
driver.menu->delay_count++;
|
||||
|
||||
if (driver.block_input)
|
||||
trigger_input = 0;
|
||||
|
||||
/* don't run anything first frame, only capture held inputs
|
||||
* for old_input_state.
|
||||
*/
|
||||
action = menu_input_frame(trigger_input);
|
||||
int32_t ret = 0;
|
||||
unsigned action = menu_input_frame(input, trigger_input);
|
||||
|
||||
if (driver.menu_ctx && driver.menu_ctx->entry_iterate)
|
||||
ret = driver.menu_ctx->entry_iterate(action);
|
||||
|
@ -423,31 +423,77 @@ int menu_input_bind_iterate_keyboard(void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned menu_input_frame(retro_input_t trigger_state)
|
||||
unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input)
|
||||
{
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_UP))
|
||||
static bool initial_held = true;
|
||||
static bool first_held = false;
|
||||
static const retro_input_t input_repeat =
|
||||
(1ULL << RETRO_DEVICE_ID_JOYPAD_UP)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_RIGHT)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_L)
|
||||
| (1ULL << RETRO_DEVICE_ID_JOYPAD_R);
|
||||
|
||||
driver.retro_ctx.poll_cb();
|
||||
|
||||
/* don't run anything first frame, only capture held inputs
|
||||
* for old_input_state. */
|
||||
|
||||
if (input & input_repeat)
|
||||
{
|
||||
if (!first_held)
|
||||
{
|
||||
first_held = true;
|
||||
driver.menu->delay_timer = initial_held ? 12 : 6;
|
||||
driver.menu->delay_count = 0;
|
||||
}
|
||||
|
||||
if (driver.menu->delay_count >= driver.menu->delay_timer)
|
||||
{
|
||||
first_held = false;
|
||||
trigger_input |= input & input_repeat;
|
||||
driver.menu->scroll_accel = min(driver.menu->scroll_accel + 1, 64);
|
||||
}
|
||||
|
||||
initial_held = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
first_held = false;
|
||||
initial_held = true;
|
||||
driver.menu->scroll_accel = 0;
|
||||
}
|
||||
|
||||
driver.menu->mouse.enable = g_settings.menu.mouse_enable;
|
||||
|
||||
driver.menu->delay_count++;
|
||||
|
||||
if (driver.block_input)
|
||||
trigger_input = 0;
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_UP))
|
||||
return MENU_ACTION_UP;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN))
|
||||
return MENU_ACTION_DOWN;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT))
|
||||
return MENU_ACTION_LEFT;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_RIGHT))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_RIGHT))
|
||||
return MENU_ACTION_RIGHT;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_L))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_L))
|
||||
return MENU_ACTION_SCROLL_UP;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_R))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_R))
|
||||
return MENU_ACTION_SCROLL_DOWN;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_B))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_B))
|
||||
return MENU_ACTION_CANCEL;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_A))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_A))
|
||||
return MENU_ACTION_OK;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_Y))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_Y))
|
||||
return MENU_ACTION_Y;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_START))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_START))
|
||||
return MENU_ACTION_START;
|
||||
if (trigger_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_SELECT))
|
||||
if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_SELECT))
|
||||
return MENU_ACTION_SELECT;
|
||||
if (trigger_state & (1ULL << RARCH_MENU_TOGGLE))
|
||||
if (trigger_input & (1ULL << RARCH_MENU_TOGGLE))
|
||||
return MENU_ACTION_TOGGLE;
|
||||
return MENU_ACTION_NOOP;
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ int menu_input_bind_iterate(void *data);
|
||||
|
||||
int menu_input_bind_iterate_keyboard(void *data);
|
||||
|
||||
unsigned menu_input_frame(retro_input_t trigger_state);
|
||||
unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_state);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -1009,8 +1009,9 @@ int rarch_main_iterate(void)
|
||||
#ifdef HAVE_MENU
|
||||
if (g_extern.is_menu)
|
||||
{
|
||||
if (menu_iterate(input, old_input, trigger_input) == -1)
|
||||
rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED);
|
||||
if (driver.menu)
|
||||
if (menu_iterate(input, old_input, trigger_input) == -1)
|
||||
rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED);
|
||||
|
||||
if (!input && g_settings.menu.pause_libretro)
|
||||
ret = 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user