diff --git a/config.def.h b/config.def.h index fd86393c2b..71be4036a0 100644 --- a/config.def.h +++ b/config.def.h @@ -510,6 +510,8 @@ static const bool menu_show_core_updater = true; static const bool menu_show_legacy_thumbnail_updater = false; static const bool menu_show_sublabels = true; +static const bool menu_scroll_fast = false; + #define DEFAULT_MENU_TICKER_TYPE (TICKER_TYPE_BOUNCE) static const float menu_ticker_speed = 1.0f; diff --git a/configuration.c b/configuration.c index 157295aabb..7cc241ce9b 100644 --- a/configuration.c +++ b/configuration.c @@ -1465,6 +1465,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, SETTING_BOOL("menu_show_sublabels", &settings->bools.menu_show_sublabels, true, menu_show_sublabels, false); SETTING_BOOL("menu_dynamic_wallpaper_enable", &settings->bools.menu_dynamic_wallpaper_enable, true, false, false); SETTING_BOOL("menu_ticker_smooth", &settings->bools.menu_ticker_smooth, true, DEFAULT_MENU_TICKER_SMOOTH, false); + SETTING_BOOL("menu_scroll_fast", &settings->bools.menu_scroll_fast, true, false, false); SETTING_BOOL("settings_show_drivers", &settings->bools.settings_show_drivers, true, DEFAULT_SETTINGS_SHOW_DRIVERS, false); SETTING_BOOL("settings_show_video", &settings->bools.settings_show_video, true, DEFAULT_SETTINGS_SHOW_VIDEO, false); SETTING_BOOL("settings_show_audio", &settings->bools.settings_show_audio, true, DEFAULT_SETTINGS_SHOW_AUDIO, false); diff --git a/configuration.h b/configuration.h index 506c00067e..445856b713 100644 --- a/configuration.h +++ b/configuration.h @@ -176,6 +176,7 @@ typedef struct settings bool menu_throttle_framerate; bool menu_linear_filter; bool menu_horizontal_animation; + bool menu_scroll_fast; bool menu_show_online_updater; bool menu_show_core_updater; bool menu_show_load_core; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index b83471a93b..aab371c684 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1718,6 +1718,8 @@ MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_CORE_UPDATER, "menu_show_core_updater") MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_LEGACY_THUMBNAIL_UPDATER, "menu_show_legacy_thumbnail_updater") +MSG_HASH(MENU_ENUM_LABEL_MENU_SCROLL_FAST, + "menu_scroll_fast") MSG_HASH(MENU_ENUM_LABEL_CORE_DELETE, "core_delete") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 582ca6dd8f..3d6a0b5e3e 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -7145,6 +7145,22 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MENU_SHOW_LEGACY_THUMBNAIL_UPDATER, "Show/hide the ability to download legacy thumbnail packages." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MENU_SCROLL_FAST, + "Menu Scroll Acceleration" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_SCROLL_FAST, + "Maximum speed of the cursor when holding a direction to scroll." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SCROLL_NORMAL, + "Normal" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SCROLL_FAST, + "Fast" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MENU_VIEWS_SETTINGS, "Views" diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index f47aba9483..cdd4aa31e6 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -619,6 +619,7 @@ default_sublabel_macro(action_bind_sublabel_menu_show_shutdown, default_sublabel_macro(action_bind_sublabel_menu_show_online_updater, MENU_ENUM_SUBLABEL_MENU_SHOW_ONLINE_UPDATER) default_sublabel_macro(action_bind_sublabel_menu_show_core_updater, MENU_ENUM_SUBLABEL_MENU_SHOW_CORE_UPDATER) default_sublabel_macro(action_bind_sublabel_menu_show_legacy_thumbnail_updater, MENU_ENUM_SUBLABEL_MENU_SHOW_LEGACY_THUMBNAIL_UPDATER) +default_sublabel_macro(action_bind_sublabel_menu_scroll_fast, MENU_ENUM_SUBLABEL_MENU_SCROLL_FAST) default_sublabel_macro(action_bind_sublabel_menu_music_tab, MENU_ENUM_SUBLABEL_CONTENT_SHOW_MUSIC) default_sublabel_macro(action_bind_sublabel_menu_video_tab, MENU_ENUM_SUBLABEL_CONTENT_SHOW_VIDEO) default_sublabel_macro(action_bind_sublabel_menu_netplay_tab, MENU_ENUM_SUBLABEL_CONTENT_SHOW_NETPLAY) @@ -1759,6 +1760,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_MENU_SHOW_LEGACY_THUMBNAIL_UPDATER: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_legacy_thumbnail_updater); break; + case MENU_ENUM_LABEL_MENU_SCROLL_FAST: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_scroll_fast); + break; case MENU_ENUM_LABEL_CONTENT_SHOW_NETPLAY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_netplay_tab); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 9d93405bb1..ae4038fcee 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5994,6 +5994,7 @@ unsigned menu_displaylist_build_list( {MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_PAUSE_NONACTIVE, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION, PARSE_ONLY_BOOL, true}, + {MENU_ENUM_LABEL_MENU_SCROLL_FAST, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_UI_COMPANION_ENABLE, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT, PARSE_ONLY_BOOL, true}, {MENU_ENUM_LABEL_UI_MENUBAR_ENABLE, PARSE_ONLY_BOOL, true}, diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 6fa9c46e73..747aeaa9f8 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -15212,6 +15212,21 @@ static bool setting_append_list( SD_FLAG_NONE); #endif + CONFIG_BOOL( + list, list_info, + &settings->bools.menu_scroll_fast, + MENU_ENUM_LABEL_MENU_SCROLL_FAST, + MENU_ENUM_LABEL_VALUE_MENU_SCROLL_FAST, + menu_scroll_fast, + MENU_ENUM_LABEL_VALUE_SCROLL_NORMAL, + MENU_ENUM_LABEL_VALUE_SCROLL_FAST, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE); + CONFIG_BOOL( list, list_info, &settings->bools.ui_companion_enable, diff --git a/msg_hash.h b/msg_hash.h index e672c3ac90..1b03a6123b 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -973,6 +973,7 @@ enum msg_hash_enums MENU_LABEL(MENU_SHOW_ONLINE_UPDATER), MENU_LABEL(MENU_SHOW_CORE_UPDATER), MENU_LABEL(MENU_SHOW_LEGACY_THUMBNAIL_UPDATER), + MENU_LABEL(MENU_SCROLL_FAST), MENU_LABEL(MENU_ENABLE_KIOSK_MODE), MENU_LABEL(MENU_DISABLE_KIOSK_MODE), MENU_LABEL(MENU_KIOSK_MODE_PASSWORD), @@ -1102,6 +1103,9 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_MENU_TICKER_TYPE_BOUNCE, MENU_ENUM_LABEL_VALUE_MENU_TICKER_TYPE_LOOP, + MENU_ENUM_LABEL_VALUE_SCROLL_NORMAL, + MENU_ENUM_LABEL_VALUE_SCROLL_FAST, + /* UI settings */ MENU_LABEL(VIDEO_DISABLE_COMPOSITION), MENU_LABEL(UI_COMPANION_ENABLE), diff --git a/retroarch.c b/retroarch.c index 1e25b12b61..a57283e8d6 100644 --- a/retroarch.c +++ b/retroarch.c @@ -16510,6 +16510,7 @@ static unsigned menu_event( bool menu_mouse_enable = settings->bools.menu_mouse_enable; bool menu_pointer_enable = settings->bools.menu_pointer_enable; bool swap_ok_cancel_btns = settings->bools.input_menu_swap_ok_cancel_buttons; + bool menu_scroll_fast = settings->bools.menu_scroll_fast; bool input_swap_override = input_autoconfigure_get_swap_override(); unsigned menu_ok_btn = (!input_swap_override && swap_ok_cancel_btns) ? @@ -16539,7 +16540,10 @@ static unsigned menu_event( * for old_input_state. */ first_held = true; - delay_timer = initial_held ? 200 : 100; + if (menu_scroll_fast) + delay_timer = initial_held ? 200 : 100; + else + delay_timer = initial_held ? 400 : 20; delay_count = 0; } @@ -16560,7 +16564,10 @@ static unsigned menu_event( menu_driver_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL, &new_scroll_accel); - new_scroll_accel = MIN(new_scroll_accel + 1, 64); + if (menu_scroll_fast) + new_scroll_accel = MIN(new_scroll_accel + 1, 64); + else + new_scroll_accel = MIN(new_scroll_accel + 1, 5); } initial_held = false;