mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-10 21:40:43 +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>
|
struct home_menu_slider : public home_menu_setting<T, C>
|
||||||
{
|
{
|
||||||
public:
|
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)
|
: home_menu_setting<T, C>(setting, text)
|
||||||
, m_suffix(suffix)
|
, m_suffix(suffix)
|
||||||
|
, m_special_labels(std::move(special_labels))
|
||||||
, m_minimum(minimum)
|
, m_minimum(minimum)
|
||||||
, m_maximum(maximum)
|
, 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_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);
|
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));
|
if (const auto it = m_special_labels.find(this->m_last_value); it != m_special_labels.cend())
|
||||||
}
|
{
|
||||||
else
|
m_value_label.set_text(it->second);
|
||||||
{
|
return;
|
||||||
m_value_label.set_text(fmt::format("%d%s", this->m_last_value, m_suffix));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
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();
|
m_value_label.auto_resize();
|
||||||
|
|
||||||
constexpr u16 handle_margin = 10;
|
constexpr u16 handle_margin = 10;
|
||||||
@ -184,6 +195,7 @@ namespace rsx
|
|||||||
overlay_element m_handle;
|
overlay_element m_handle;
|
||||||
label m_value_label;
|
label m_value_label;
|
||||||
std::string m_suffix;
|
std::string m_suffix;
|
||||||
|
std::map<T, std::string> m_special_labels;
|
||||||
T m_minimum{};
|
T m_minimum{};
|
||||||
T m_maximum{};
|
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))
|
: 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_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");
|
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)
|
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_checkbox(&g_cfg.core.rsx_accurate_res_access, "Accurate RSX reservation access");
|
||||||
add_dropdown(&g_cfg.core.sleep_timers_accuracy, "Sleep Timers Accuracy");
|
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_signed_slider(&g_cfg.video.vblank_rate, "VBlank Frequency", " Hz", 30);
|
||||||
add_checkbox(&g_cfg.video.vblank_ntsc, "VBlank NTSC Fixup");
|
add_checkbox(&g_cfg.video.vblank_ntsc, "VBlank NTSC Fixup");
|
||||||
|
|
||||||
|
@ -88,10 +88,10 @@ namespace rsx
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <s64 Min, s64 Max>
|
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());
|
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
|
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>
|
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());
|
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
|
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>
|
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());
|
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
|
add_item(elem, [this, setting, text, step_size, minimum, maximum](pad_button btn) -> page_navigation
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user