mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-06 00:40:11 +00:00
Home menu: add optional special label overrides
This commit is contained in:
parent
d909bbc297
commit
358735a199
@ -120,9 +120,10 @@ namespace rsx
|
||||
struct home_menu_slider : public home_menu_setting<T, C>
|
||||
{
|
||||
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<T, std::string> special_labels = {}, T minimum = C::min, T maximum = C::max)
|
||||
: home_menu_setting<T, C>(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<u16>(percentage * (m_slider.w - m_handle.w)), this->y + (this->h - m_handle.h) / 2);
|
||||
|
||||
if constexpr (std::is_floating_point<T>::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<T>::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<T, std::string> m_special_labels;
|
||||
T m_minimum{};
|
||||
T m_maximum{};
|
||||
};
|
||||
|
@ -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");
|
||||
|
||||
|
@ -88,10 +88,10 @@ namespace rsx
|
||||
}
|
||||
|
||||
template <s64 Min, s64 Max>
|
||||
void add_signed_slider(cfg::_int<Min, Max>* setting, const std::string& text, const std::string& suffix, s64 step_size, s64 minimum = Min, s64 maximum = Max)
|
||||
void add_signed_slider(cfg::_int<Min, Max>* setting, const std::string& text, const std::string& suffix, s64 step_size, std::map<s64, std::string> special_labels = {}, s64 minimum = Min, s64 maximum = Max)
|
||||
{
|
||||
ensure(setting && setting->get_is_dynamic());
|
||||
std::unique_ptr<overlay_element> elem = std::make_unique<home_menu_signed_slider<Min, Max>>(setting, text, suffix, minimum, maximum);
|
||||
std::unique_ptr<overlay_element> elem = std::make_unique<home_menu_signed_slider<Min, Max>>(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 <u64 Min, u64 Max>
|
||||
void add_unsigned_slider(cfg::uint<Min, Max>* setting, const std::string& text, const std::string& suffix, u64 step_size, u64 minimum = Min, u64 maximum = Max)
|
||||
void add_unsigned_slider(cfg::uint<Min, Max>* setting, const std::string& text, const std::string& suffix, u64 step_size, std::map<u64, std::string> special_labels = {}, u64 minimum = Min, u64 maximum = Max)
|
||||
{
|
||||
ensure(setting && setting->get_is_dynamic());
|
||||
std::unique_ptr<overlay_element> elem = std::make_unique<home_menu_unsigned_slider<Min, Max>>(setting, text, suffix, minimum, maximum);
|
||||
std::unique_ptr<overlay_element> elem = std::make_unique<home_menu_unsigned_slider<Min, Max>>(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 <s32 Min, s32 Max>
|
||||
void add_float_slider(cfg::_float<Min, Max>* setting, const std::string& text, const std::string& suffix, f32 step_size, s32 minimum = Min, s32 maximum = Max)
|
||||
void add_float_slider(cfg::_float<Min, Max>* setting, const std::string& text, const std::string& suffix, f32 step_size, std::map<f64, std::string> special_labels = {}, s32 minimum = Min, s32 maximum = Max)
|
||||
{
|
||||
ensure(setting && setting->get_is_dynamic());
|
||||
std::unique_ptr<overlay_element> elem = std::make_unique<home_menu_float_slider<Min, Max>>(setting, text, suffix, minimum, maximum);
|
||||
std::unique_ptr<overlay_element> elem = std::make_unique<home_menu_float_slider<Min, Max>>(setting, text, suffix, special_labels, minimum, maximum);
|
||||
|
||||
add_item(elem, [this, setting, text, step_size, minimum, maximum](pad_button btn) -> page_navigation
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user