overlays: Fix bug with list view element count calculation and selection wrap-around
This commit is contained in:
@@ -139,16 +139,13 @@ namespace rsx
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Center vertically if necessary
|
// 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;
|
||||||
{
|
}
|
||||||
advance_pos = (h - ::narrow<u16>(total_height)) / 2;
|
else
|
||||||
}
|
{
|
||||||
else
|
advance_pos = menu_entry_margin;
|
||||||
{
|
|
||||||
advance_pos = menu_entry_margin;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& entry : m_entries)
|
for (auto& entry : m_entries)
|
||||||
@@ -271,9 +268,12 @@ namespace rsx
|
|||||||
case pad_button::dpad_up:
|
case pad_button::dpad_up:
|
||||||
case pad_button::ls_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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,9 +283,12 @@ namespace rsx
|
|||||||
case pad_button::dpad_down:
|
case pad_button::dpad_down:
|
||||||
case pad_button::ls_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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ namespace rsx
|
|||||||
return add_element(ptr);
|
return add_element(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_items();
|
virtual void clear_items();
|
||||||
|
|
||||||
layout_container();
|
layout_container();
|
||||||
|
|
||||||
|
|||||||
@@ -189,6 +189,15 @@ namespace rsx
|
|||||||
update_selection();
|
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
|
u16 list_view::get_elements_count() const
|
||||||
{
|
{
|
||||||
return m_elements_count;
|
return m_elements_count;
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ namespace rsx
|
|||||||
}
|
}
|
||||||
|
|
||||||
void add_entry(std::unique_ptr<overlay_element>& entry);
|
void add_entry(std::unique_ptr<overlay_element>& entry);
|
||||||
|
void clear_items() override;
|
||||||
|
|
||||||
u16 get_elements_count() const;
|
u16 get_elements_count() const;
|
||||||
s32 get_selected_index() const;
|
s32 get_selected_index() const;
|
||||||
|
|||||||
Reference in New Issue
Block a user