Browse Source

Fix viewport size of UiList in constructor

pull/4930/head
staphen 4 years ago committed by Anders Jenbo
parent
commit
b90a1307a7
  1. 2
      Source/DiabloUI/selhero.cpp
  2. 32
      Source/DiabloUI/ui_item.h

2
Source/DiabloUI/selhero.cpp

@ -484,7 +484,7 @@ void selhero_List_Init()
}
vecSelHeroDlgItems.push_back(std::make_unique<UiListItem>(_("New Hero").c_str(), static_cast<int>(selhero_SaveCount)));
vecSelDlgItems.push_back(std::make_unique<UiList>(vecSelHeroDlgItems, std::min<int>(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<UiList>(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<UiScrollbar>(&ArtScrollBarBackground, &ArtScrollBarThumb, &ArtScrollBarArrow, rect2));

32
Source/DiabloUI/ui_item.h

@ -370,19 +370,9 @@ class UiList : public UiItemBase {
public:
using vUiListItem = std::vector<std::unique_ptr<UiListItem>>;
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<Uint16>(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<size_t>(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<UiListItem *> 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<Uint16>(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

Loading…
Cancel
Save