diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_components.h b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_components.h index c3e9adf73f..5202e1056c 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_components.h +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_components.h @@ -120,9 +120,10 @@ namespace rsx struct home_menu_slider : public home_menu_setting { public: - home_menu_slider(C* setting, const std::string& text, const std::string& suffix, T minimum = C::min, T maximum = C::max) + home_menu_slider(C* setting, const std::string& text, const std::string& suffix, std::map special_labels = {}, T minimum = C::min, T maximum = C::max) : home_menu_setting(setting, text) , m_suffix(suffix) + , m_special_labels(std::move(special_labels)) , m_minimum(minimum) , m_maximum(maximum) { @@ -148,15 +149,25 @@ namespace rsx m_slider.set_pos(m_slider.x, this->y + (this->h - m_slider.h) / 2); m_handle.set_pos(m_slider.x + static_cast(percentage * (m_slider.w - m_handle.w)), this->y + (this->h - m_handle.h) / 2); - if constexpr (std::is_floating_point::value) + const auto set_label_text = [this]() -> void { - m_value_label.set_text(fmt::format("%.2f%s", this->m_last_value, m_suffix)); - } - else - { - m_value_label.set_text(fmt::format("%d%s", this->m_last_value, m_suffix)); - } + if (const auto it = m_special_labels.find(this->m_last_value); it != m_special_labels.cend()) + { + m_value_label.set_text(it->second); + return; + } + if constexpr (std::is_floating_point::value) + { + m_value_label.set_text(fmt::format("%.2f%s", this->m_last_value, m_suffix)); + } + else + { + m_value_label.set_text(fmt::format("%d%s", this->m_last_value, m_suffix)); + } + }; + + set_label_text(); m_value_label.auto_resize(); constexpr u16 handle_margin = 10; @@ -184,6 +195,7 @@ namespace rsx overlay_element m_handle; label m_value_label; std::string m_suffix; + std::map m_special_labels; T m_minimum{}; T m_maximum{}; }; diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp index 902c0ecdd2..64671f60da 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp @@ -43,7 +43,7 @@ namespace rsx : home_menu_settings_page(x, y, width, height, use_separators, parent, get_localized_string(localized_string_id::HOME_MENU_SETTINGS_VIDEO)) { add_dropdown(&g_cfg.video.frame_limit, "Frame Limit"); - add_unsigned_slider(&g_cfg.video.anisotropic_level_override, "Anisotropic Filter Override", "", 2); + add_unsigned_slider(&g_cfg.video.anisotropic_level_override, "Anisotropic Filter Override", "", 2, {{0, "Auto"}}); add_dropdown(&g_cfg.video.output_scaling, "Output Scaling"); if (g_cfg.video.renderer == video_renderer::vulkan && g_cfg.video.output_scaling == output_scaling_mode::fsr) @@ -65,7 +65,7 @@ namespace rsx add_checkbox(&g_cfg.core.rsx_accurate_res_access, "Accurate RSX reservation access"); add_dropdown(&g_cfg.core.sleep_timers_accuracy, "Sleep Timers Accuracy"); - add_unsigned_slider(&g_cfg.video.driver_wakeup_delay, "Driver Wake-Up Delay", " µs", 20, g_cfg.video.driver_wakeup_delay.min, 800); + add_unsigned_slider(&g_cfg.video.driver_wakeup_delay, "Driver Wake-Up Delay", " µs", 20, {}, g_cfg.video.driver_wakeup_delay.min, 800); add_signed_slider(&g_cfg.video.vblank_rate, "VBlank Frequency", " Hz", 30); add_checkbox(&g_cfg.video.vblank_ntsc, "VBlank NTSC Fixup"); diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h index 1b7419fb78..3ee345d479 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h @@ -88,10 +88,10 @@ namespace rsx } template - void add_signed_slider(cfg::_int* setting, const std::string& text, const std::string& suffix, s64 step_size, s64 minimum = Min, s64 maximum = Max) + void add_signed_slider(cfg::_int* setting, const std::string& text, const std::string& suffix, s64 step_size, std::map special_labels = {}, s64 minimum = Min, s64 maximum = Max) { ensure(setting && setting->get_is_dynamic()); - std::unique_ptr elem = std::make_unique>(setting, text, suffix, minimum, maximum); + std::unique_ptr elem = std::make_unique>(setting, text, suffix, special_labels, minimum, maximum); add_item(elem, [this, setting, text, step_size, minimum, maximum](pad_button btn) -> page_navigation { @@ -127,10 +127,10 @@ namespace rsx } template - void add_unsigned_slider(cfg::uint* setting, const std::string& text, const std::string& suffix, u64 step_size, u64 minimum = Min, u64 maximum = Max) + void add_unsigned_slider(cfg::uint* setting, const std::string& text, const std::string& suffix, u64 step_size, std::map special_labels = {}, u64 minimum = Min, u64 maximum = Max) { ensure(setting && setting->get_is_dynamic()); - std::unique_ptr elem = std::make_unique>(setting, text, suffix, minimum, maximum); + std::unique_ptr elem = std::make_unique>(setting, text, suffix, special_labels, minimum, maximum); add_item(elem, [this, setting, text, step_size, minimum, maximum](pad_button btn) -> page_navigation { @@ -166,10 +166,10 @@ namespace rsx } template - void add_float_slider(cfg::_float* setting, const std::string& text, const std::string& suffix, f32 step_size, s32 minimum = Min, s32 maximum = Max) + void add_float_slider(cfg::_float* setting, const std::string& text, const std::string& suffix, f32 step_size, std::map special_labels = {}, s32 minimum = Min, s32 maximum = Max) { ensure(setting && setting->get_is_dynamic()); - std::unique_ptr elem = std::make_unique>(setting, text, suffix, minimum, maximum); + std::unique_ptr elem = std::make_unique>(setting, text, suffix, special_labels, minimum, maximum); add_item(elem, [this, setting, text, step_size, minimum, maximum](pad_button btn) -> page_navigation {