diff --git a/Source/DiabloUI/selhero.cpp b/Source/DiabloUI/selhero.cpp index a33bf4416..e2f1d65bc 100644 --- a/Source/DiabloUI/selhero.cpp +++ b/Source/DiabloUI/selhero.cpp @@ -484,7 +484,7 @@ void selhero_List_Init() } vecSelHeroDlgItems.push_back(std::make_unique(_("New Hero").c_str(), static_cast(selhero_SaveCount))); - vecSelDlgItems.push_back(std::make_unique(vecSelHeroDlgItems, std::min(6, selhero_SaveCount + 1), PANEL_LEFT + 265, (UI_OFFSET_Y + 256), 320, 26, UiFlags::AlignCenter | UiFlags::FontSize24 | UiFlags::ColorUiGold)); + vecSelDlgItems.push_back(std::make_unique(vecSelHeroDlgItems, 6, PANEL_LEFT + 265, (UI_OFFSET_Y + 256), 320, 26, UiFlags::AlignCenter | UiFlags::FontSize24 | UiFlags::ColorUiGold)); SDL_Rect rect2 = { (Sint16)(PANEL_LEFT + 585), (Sint16)(UI_OFFSET_Y + 244), 25, 178 }; vecSelDlgItems.push_back(std::make_unique(&ArtScrollBarBackground, &ArtScrollBarThumb, &ArtScrollBarArrow, rect2)); diff --git a/Source/DiabloUI/ui_item.h b/Source/DiabloUI/ui_item.h index b04c79776..7ccff17e8 100644 --- a/Source/DiabloUI/ui_item.h +++ b/Source/DiabloUI/ui_item.h @@ -370,19 +370,9 @@ class UiList : public UiItemBase { public: using vUiListItem = std::vector>; - UiList(const vUiListItem &vItems, size_t viewportSize, Sint16 x, Sint16 y, Uint16 item_width, Uint16 item_height, UiFlags flags = UiFlags::None, int spacing = 1) - : UiItemBase(UiType::List, { x, y, item_width, static_cast(item_height * viewportSize) }, flags) - , viewportSize(viewportSize) - , m_x(x) - , m_y(y) - , m_width(item_width) - , m_height(item_height) - , spacing_(spacing) + UiList(const vUiListItem &vItems, size_t viewportMaxSize, Sint16 x, Sint16 y, Uint16 item_width, Uint16 item_height, UiFlags flags = UiFlags::None, int spacing = 1) + : UiList(PrivateConstructor {}, vItems, std::min(viewportMaxSize, vItems.size()), x, y, item_width, item_height, flags, spacing) { - for (const auto &item : vItems) - m_vecItems.push_back(item.get()); - - pressed_item_index_ = -1; } [[nodiscard]] SDL_Rect itemRect(int i) const @@ -436,6 +426,24 @@ public: std::vector m_vecItems; private: + struct PrivateConstructor final { + }; + + UiList(PrivateConstructor tag, const vUiListItem &vItems, size_t viewportSize, Sint16 x, Sint16 y, Uint16 item_width, Uint16 item_height, UiFlags flags, int spacing) + : UiItemBase(UiType::List, { x, y, item_width, static_cast(item_height * viewportSize) }, flags) + , viewportSize(viewportSize) + , m_x(x) + , m_y(y) + , m_width(item_width) + , m_height(item_height) + , spacing_(spacing) + { + for (const auto &item : vItems) + m_vecItems.push_back(item.get()); + + pressed_item_index_ = -1; + } + int spacing_; // State