Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Home menu: settings improvements #14152

Merged
merged 4 commits into from Jul 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 21 additions & 9 deletions rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_components.h
Expand Up @@ -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)
{
Expand All @@ -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;
Expand Down Expand Up @@ -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{};
};
Expand Down
10 changes: 5 additions & 5 deletions rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp
Expand Up @@ -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", "x", 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)
Expand All @@ -53,10 +53,6 @@ namespace rsx

add_checkbox(&g_cfg.video.stretch_to_display_area, "Stretch To Display Area");

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", 1);
add_checkbox(&g_cfg.video.vblank_ntsc, "VBlank NTSC Fixup");

apply_layout();
}

Expand All @@ -69,6 +65,10 @@ 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_signed_slider(&g_cfg.video.vblank_rate, "VBlank Frequency", " Hz", 30);
add_checkbox(&g_cfg.video.vblank_ntsc, "VBlank NTSC Fixup");

apply_layout();
}

Expand Down
12 changes: 6 additions & 6 deletions rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h
Expand Up @@ -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
{
Expand Down Expand Up @@ -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
{
Expand Down Expand Up @@ -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
{
Expand Down