From ae75c0cdc2b40f3572f6293c2ec0a2370a675bd0 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Fri, 5 Mar 2021 08:28:24 +0000 Subject: [PATCH] DiabloUI: Consider ListOffset for focus selector The original version of this had a min/max range, so `SelectedItem` could be compared to `m_value` With the recent changes, `SelectedItem` now refers to an index in the array. This unfortunately means the function that draws the list must now know about the potential existence of the scrollbar and consider its `ListOffset` into account. Fixes #1006 --- SourceX/DiabloUI/diabloui.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SourceX/DiabloUI/diabloui.cpp b/SourceX/DiabloUI/diabloui.cpp index c6c37ce11..8d2f054b1 100644 --- a/SourceX/DiabloUI/diabloui.cpp +++ b/SourceX/DiabloUI/diabloui.cpp @@ -85,6 +85,7 @@ void UiInitList(int count, void (*fnFocus)(int value), void (*fnSelect)(int valu gfnListYesNo = fnYesNo; gUiItems = items; UiItemsWraps = itemsWraps; + ListOffset = NULL; if (fnFocus) fnFocus(0); @@ -662,7 +663,7 @@ void Render(const UiList *ui_list) for (std::size_t i = 0; i < ui_list->m_vecItems.size(); ++i) { SDL_Rect rect = ui_list->itemRect(i); const UiListItem *item = ui_list->GetItem(i); - if (i == SelectedItem) + if (i + (ListOffset == NULL ? 0 : *ListOffset) == SelectedItem) DrawSelector(rect); DrawArtStr(item->m_text, rect, ui_list->m_iFlags); }