From bfe0c3fb48de789d7e3391eede1ef7eb3d1bc11d Mon Sep 17 00:00:00 2001 From: jdgleaver Date: Thu, 14 Feb 2019 17:26:46 +0000 Subject: [PATCH] Enable configuration of menu ticker text speed --- config.def.h | 1 + configuration.c | 1 + configuration.h | 1 + intl/msg_hash_lbl.h | 2 ++ intl/msg_hash_us.h | 8 ++++++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/menu_animation.c | 12 +++++++++--- menu/menu_displaylist.c | 4 ++++ menu/menu_setting.c | 15 +++++++++++++++ msg_hash.h | 1 + 10 files changed, 46 insertions(+), 3 deletions(-) diff --git a/config.def.h b/config.def.h index 8a92c9a92b..550d93d997 100644 --- a/config.def.h +++ b/config.def.h @@ -325,6 +325,7 @@ static bool menu_show_core_updater = true; static bool menu_show_sublabels = false; static unsigned menu_ticker_type = TICKER_TYPE_BOUNCE; +static float menu_ticker_speed = 1.0f; static bool content_show_settings = true; static bool content_show_favorites = true; diff --git a/configuration.c b/configuration.c index 968a1a39fe..528873fa6a 100644 --- a/configuration.c +++ b/configuration.c @@ -1605,6 +1605,7 @@ static struct config_float_setting *populate_settings_float(settings_t *settings SETTING_FLOAT("menu_framebuffer_opacity", &settings->floats.menu_framebuffer_opacity, true, menu_framebuffer_opacity, false); SETTING_FLOAT("menu_footer_opacity", &settings->floats.menu_footer_opacity, true, menu_footer_opacity, false); SETTING_FLOAT("menu_header_opacity", &settings->floats.menu_header_opacity, true, menu_header_opacity, false); + SETTING_FLOAT("menu_ticker_speed", &settings->floats.menu_ticker_speed, true, menu_ticker_speed, false); #endif SETTING_FLOAT("video_message_pos_x", &settings->floats.video_msg_pos_x, true, message_pos_offset_x, false); SETTING_FLOAT("video_message_pos_y", &settings->floats.video_msg_pos_y, true, message_pos_offset_y, false); diff --git a/configuration.h b/configuration.h index 83115c8fd8..c56b16ff5b 100644 --- a/configuration.h +++ b/configuration.h @@ -329,6 +329,7 @@ typedef struct settings float menu_framebuffer_opacity; float menu_footer_opacity; float menu_header_opacity; + float menu_ticker_speed; float audio_max_timing_skew; float audio_volume; /* dB scale. */ diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 8ee17e55c7..05399f3ef7 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1131,6 +1131,8 @@ MSG_HASH(MENU_ENUM_LABEL_TIMEDATE_STYLE, "menu_timedate_style") MSG_HASH(MENU_ENUM_LABEL_MENU_TICKER_TYPE, "menu_ticker_type") +MSG_HASH(MENU_ENUM_LABEL_MENU_TICKER_SPEED, + "menu_ticker_speed") MSG_HASH(MENU_ENUM_LABEL_UI_COMPANION_ENABLE, "ui_companion_enable") MSG_HASH(MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index a2340b3fd8..574150e13a 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3090,6 +3090,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_MENU_TICKER_TYPE_LOOP, "Scroll Left" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MENU_TICKER_SPEED, + "Ticker Text Speed" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_TICKER_SPEED, + "Animation speed when scrolling long menu text strings." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RGUI_MENU_COLOR_THEME, "Menu Color Theme" diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index f2ce9fd78b..e01aa523d3 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -519,6 +519,7 @@ default_sublabel_macro(action_bind_sublabel_menu_rgui_thumbnail_downscaler, default_sublabel_macro(action_bind_sublabel_content_runtime_log, MENU_ENUM_SUBLABEL_CONTENT_RUNTIME_LOG) default_sublabel_macro(action_bind_sublabel_menu_rgui_internal_upscale_level, MENU_ENUM_SUBLABEL_MENU_RGUI_INTERNAL_UPSCALE_LEVEL) default_sublabel_macro(action_bind_sublabel_menu_ticker_type, MENU_ENUM_SUBLABEL_MENU_TICKER_TYPE) +default_sublabel_macro(action_bind_sublabel_menu_ticker_speed, MENU_ENUM_SUBLABEL_MENU_TICKER_SPEED) static int action_bind_sublabel_systeminfo_controller_entry( file_list_t *list, @@ -2260,6 +2261,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_MENU_TICKER_TYPE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_ticker_type); break; + case MENU_ENUM_LABEL_MENU_TICKER_SPEED: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_ticker_speed); + break; default: case MSG_UNKNOWN: return -1; diff --git a/menu/menu_animation.c b/menu/menu_animation.c index 0e7cd20db6..4b9665fe18 100644 --- a/menu/menu_animation.c +++ b/menu/menu_animation.c @@ -566,6 +566,12 @@ static void menu_animation_update_time(bool timedate_enable) static retro_time_t last_ticker_slow_update = 0; + /* Adjust ticker speed */ + settings_t *settings = config_get_ptr(); + float speed_factor = settings->floats.menu_ticker_speed > 0.0001f ? settings->floats.menu_ticker_speed : 1.0f; + unsigned ticker_speed = (unsigned)(((float)TICKER_SPEED / speed_factor) + 0.5); + unsigned ticker_slow_speed = (unsigned)(((float)TICKER_SLOW_SPEED / speed_factor) + 0.5); + cur_time = cpu_features_get_time_usec() / 1000; delta_time = old_time == 0 ? 0 : cur_time - old_time; @@ -579,14 +585,14 @@ static void menu_animation_update_time(bool timedate_enable) } if (ticker_is_active - && cur_time - last_ticker_update >= TICKER_SPEED) + && cur_time - last_ticker_update >= ticker_speed) { ticker_idx++; last_ticker_update = cur_time; } if (ticker_is_active - && cur_time - last_ticker_slow_update >= TICKER_SLOW_SPEED) + && cur_time - last_ticker_slow_update >= ticker_slow_speed) { ticker_slow_idx++; last_ticker_slow_update = cur_time; @@ -899,4 +905,4 @@ uint64_t menu_animation_get_ticker_idx(void) uint64_t menu_animation_get_ticker_slow_idx(void) { return ticker_slow_idx; -} \ No newline at end of file +} diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index b72c017ad7..e711424915 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -6136,6 +6136,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist MENU_ENUM_LABEL_MENU_TICKER_TYPE, PARSE_ONLY_UINT, false) == 0) count++; + if (menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_MENU_TICKER_SPEED, + PARSE_ONLY_FLOAT, false) == 0) + count++; if (count == 0) menu_entries_append_enum(info->list, diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 59a1f7980e..9af2f3bd5f 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -8205,6 +8205,21 @@ static bool setting_append_list( &setting_get_string_representation_uint_menu_ticker_type; menu_settings_list_current_add_range(list, list_info, 0, TICKER_TYPE_LAST-1, 1, true, true); + CONFIG_FLOAT( + list, list_info, + &settings->floats.menu_ticker_speed, + MENU_ENUM_LABEL_MENU_TICKER_SPEED, + MENU_ENUM_LABEL_VALUE_MENU_TICKER_SPEED, + menu_ticker_speed, + "%.1fx", + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; + menu_settings_list_current_add_range(list, list_info, 0.2, 6.0, 0.1, true, true); + END_SUB_GROUP(list, list_info, parent_group); START_SUB_GROUP(list, list_info, "Navigation", &group_info, &subgroup_info, parent_group); diff --git a/msg_hash.h b/msg_hash.h index 6863aef0ec..12c6a6ff4b 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -921,6 +921,7 @@ enum msg_hash_enums MENU_LABEL(QUICK_MENU_START_STREAMING), MENU_LABEL(QUICK_MENU_STOP_STREAMING), MENU_LABEL(MENU_TICKER_TYPE), + MENU_LABEL(MENU_TICKER_SPEED), MENU_ENUM_LABEL_VALUE_MENU_TICKER_TYPE_BOUNCE, MENU_ENUM_LABEL_VALUE_MENU_TICKER_TYPE_LOOP,