overlays: Fix bug with list view element count calculation and selection wrap-around

This commit is contained in:
kd-11 2026-03-15 23:51:00 +03:00 committed by kd-11
parent 2fd5b1b4be
commit f9af53f215
4 changed files with 27 additions and 14 deletions

View file

@ -139,16 +139,13 @@ namespace rsx
}
// Center vertically if necessary
if (total_height < h)
if (total_height < h && center_vertically)
{
if (center_vertically)
{
advance_pos = (h - ::narrow<u16>(total_height)) / 2;
}
else
{
advance_pos = menu_entry_margin;
}
advance_pos = (h - ::narrow<u16>(total_height)) / 2;
}
else
{
advance_pos = menu_entry_margin;
}
for (auto& entry : m_entries)
@ -271,9 +268,12 @@ namespace rsx
case pad_button::dpad_up:
case pad_button::ls_up:
{
if (!is_auto_repeat && get_selected_index() <= 0)
if (get_selected_index() <= 0)
{
select_entry(get_elements_count() - 1);
if (!is_auto_repeat)
{
select_entry(get_elements_count() - 1);
}
break;
}
@ -283,9 +283,12 @@ namespace rsx
case pad_button::dpad_down:
case pad_button::ls_down:
{
if (!is_auto_repeat && get_selected_index() >= (get_elements_count() - 1))
if (get_selected_index() >= (get_elements_count() - 1))
{
select_entry(0);
if (!is_auto_repeat)
{
select_entry(0);
}
break;
}

View file

@ -264,7 +264,7 @@ namespace rsx
return add_element(ptr);
}
void clear_items();
virtual void clear_items();
layout_container();

View file

@ -189,6 +189,15 @@ namespace rsx
update_selection();
}
void list_view::clear_items()
{
layout_container::clear_items();
m_elements_height = 0;
m_selected_entry = -1;
m_elements_count = 0;
}
u16 list_view::get_elements_count() const
{
return m_elements_count;

View file

@ -42,6 +42,7 @@ namespace rsx
}
void add_entry(std::unique_ptr<overlay_element>& entry);
void clear_items() override;
u16 get_elements_count() const;
s32 get_selected_index() const;