From 8a0eae0ccdc53a0185e65b25c6472f201fbeb7f7 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Wed, 25 Feb 2026 07:50:26 +0100 Subject: [PATCH] overlays: allow to go to begin/end of list without auto repeat --- .../RSX/Overlays/HomeMenu/overlay_home_menu_page.cpp | 12 ++++++++++++ rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp | 7 ++++++- rpcs3/Emu/RSX/Overlays/overlay_list_view.hpp | 3 ++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_page.cpp b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_page.cpp index 81c1ebecba..edfb932d26 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_page.cpp +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_page.cpp @@ -215,12 +215,24 @@ namespace rsx case pad_button::dpad_up: case pad_button::ls_up: { + if (!is_auto_repeat && get_selected_index() <= 0) + { + select_entry(get_elements_count() - 1); + break; + } + select_previous(); break; } case pad_button::dpad_down: case pad_button::ls_down: { + if (!is_auto_repeat && get_selected_index() >= (get_elements_count() - 1)) + { + select_entry(0); + break; + } + select_next(); break; } diff --git a/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp b/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp index 093902dbe3..1b6f4e8fc6 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp @@ -189,7 +189,12 @@ namespace rsx update_selection(); } - int list_view::get_selected_index() const + u16 list_view::get_elements_count() const + { + return m_elements_count; + } + + s32 list_view::get_selected_index() const { return m_selected_entry; } diff --git a/rpcs3/Emu/RSX/Overlays/overlay_list_view.hpp b/rpcs3/Emu/RSX/Overlays/overlay_list_view.hpp index c2378c5319..8f191dd404 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_list_view.hpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_list_view.hpp @@ -34,7 +34,8 @@ namespace rsx void add_entry(std::unique_ptr& entry); - int get_selected_index() const; + u16 get_elements_count() const; + s32 get_selected_index() const; bool get_cancel_only() const; const overlay_element* get_selected_entry() const;