summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/widgets/itemcontainer.cpp25
-rw-r--r--src/gui/widgets/itemcontainer.h3
2 files changed, 22 insertions, 6 deletions
diff --git a/src/gui/widgets/itemcontainer.cpp b/src/gui/widgets/itemcontainer.cpp
index f53af32a6..5f1cd4b05 100644
--- a/src/gui/widgets/itemcontainer.cpp
+++ b/src/gui/widgets/itemcontainer.cpp
@@ -242,6 +242,7 @@ ItemContainer::ItemContainer(const Widget2 *const widget,
mSelectionListeners(),
mGridColumns(1),
mGridRows(1),
+ mDrawRows(1),
mSelectedIndex(-1),
mLastUsedSlot(-1),
mTag(0),
@@ -1080,14 +1081,26 @@ void ItemContainer::adjustHeight()
mGridRows = maxRows;
}
+ const int num = updateMatrix();
+ if (mShowEmptyRows == ShowEmptyRows_false)
+ {
+ mDrawRows = num / mGridColumns;
+ if (mDrawRows == 0 || num % mGridColumns > 0)
+ ++mDrawRows;
+
+ maxRows = mDrawRows;
+ }
+ else
+ {
+ mDrawRows = mGridRows;
+ }
setHeight(maxRows * mBoxHeight);
- updateMatrix();
}
-void ItemContainer::updateMatrix()
+int ItemContainer::updateMatrix()
{
if (mInventory == nullptr)
- return;
+ return 0;
mRedraw = true;
delete []mShowMatrix;
@@ -1175,8 +1188,10 @@ void ItemContainer::updateMatrix()
for (int idx = j * mGridColumns + i; idx < maxSize; idx ++)
mShowMatrix[idx] = -1;
- for (size_t idx = 0, sz = sortedItems.size(); idx < sz; idx ++)
+ const int num = CAST_S32(sortedItems.size());
+ for (size_t idx = 0, sz = num; idx < sz; idx ++)
delete sortedItems[idx];
+ return num;
}
int ItemContainer::getSlotIndex(int x, int y) const
@@ -1219,7 +1234,7 @@ int ItemContainer::getSlotByXY(int x, int y) const
void ItemContainer::setFilter(const int tag)
{
mTag = tag;
- updateMatrix();
+ adjustHeight();
}
void ItemContainer::setSortType(const int sortType)
diff --git a/src/gui/widgets/itemcontainer.h b/src/gui/widgets/itemcontainer.h
index ba640d374..c992c43f5 100644
--- a/src/gui/widgets/itemcontainer.h
+++ b/src/gui/widgets/itemcontainer.h
@@ -123,7 +123,7 @@ class ItemContainer final : public Widget,
void setName(const std::string &str)
{ mName = str; }
- void updateMatrix();
+ int updateMatrix();
bool getClickCount() const noexcept2 A_WARN_UNUSED
{ return mClicks != 0; }
@@ -202,6 +202,7 @@ class ItemContainer final : public Widget,
SelectionListenerList mSelectionListeners;
int mGridColumns;
int mGridRows;
+ int mDrawRows;
int mSelectedIndex;
int mLastUsedSlot;
int mTag;