From 49a2bce941827db49e1108618be86a069ae95eec Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 27 Jan 2015 01:29:33 +0100 Subject: [PATCH] Cleanups - move input code to menu_input.c --- menu/menu.c | 55 ++---------------------------------- menu/menu_input.c | 72 ++++++++++++++++++++++++++++++++++++++--------- menu/menu_input.h | 2 +- runloop.c | 5 ++-- 4 files changed, 65 insertions(+), 69 deletions(-) diff --git a/menu/menu.c b/menu/menu.c index f0821c749e..3f9a5b735d 100644 --- a/menu/menu.c +++ b/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); diff --git a/menu/menu_input.c b/menu/menu_input.c index 608ae5fe43..c612929198 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -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; } diff --git a/menu/menu_input.h b/menu/menu_input.h index d974e9be69..66cd3160e5 100644 --- a/menu/menu_input.h +++ b/menu/menu_input.h @@ -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 } diff --git a/runloop.c b/runloop.c index 0b2f54eb10..e876cb4ff3 100644 --- a/runloop.c +++ b/runloop.c @@ -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;