From 751490d82c634e94c811dae84cd13d4503614b10 Mon Sep 17 00:00:00 2001 From: av-dx Date: Fri, 6 Aug 2021 18:00:43 +0530 Subject: [PATCH] GUI: Invalidate visible grid when toggling groups --- gui/widgets/grid.cpp | 7 ++++--- gui/widgets/grid.h | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gui/widgets/grid.cpp b/gui/widgets/grid.cpp index db4b25300a9..98ff127a664 100644 --- a/gui/widgets/grid.cpp +++ b/gui/widgets/grid.cpp @@ -75,7 +75,7 @@ void GridItemWidget::move(int x, int y) { void GridItemWidget::drawWidget() { if (_activeEntry->isHeader) { - const int indicatorSize = MIN(MIN((int)_h, _grid->_gridXSpacing), (int)_w - 1); + const int indicatorSize = MIN(MIN((int)_h, _grid->_gridXSpacing), (int)_w); g_gui.theme()->drawFoldIndicator(Common::Rect(_x, _y, _x + indicatorSize, _y + indicatorSize), _grid->groupExpanded(_activeEntry->entryID)); g_gui.theme()->drawText(Common::Rect(_x + indicatorSize, _y, _x + _w, _y + _h), Common::U32String(_activeEntry->title), ThemeEngine::kStateEnabled, Graphics::kTextAlignLeft, ThemeEngine::kTextInversionFocus, _h, false); @@ -196,6 +196,7 @@ void GridWidget::toggleGroup(int groupID) { _groupExpanded[groupID] = true; sortGroups(); } + markGridAsInvalid(); // TODO: Replace reflowLayout with only the necessary sequence of steps reflowLayout(); } @@ -558,8 +559,9 @@ bool GridWidget::calcVisibleEntries() { nLastVisibleItem = lastItemBeforeY(_sortedEntryList, _scrollPos + _scrollWindowHeight); nLastVisibleItem = (nLastVisibleItem < 0) ? 0 : nLastVisibleItem; - if ((nFirstVisibleItem != _firstVisibleItem) || (nLastVisibleItem != _lastVisibleItem)) { + if ((nFirstVisibleItem != _firstVisibleItem) || (nLastVisibleItem != _lastVisibleItem) || (_isGridInvalid)) { needsReload = true; + _isGridInvalid = false; _lastVisibleItem = nLastVisibleItem; _firstVisibleItem = nFirstVisibleItem; @@ -680,7 +682,6 @@ void GridWidget::assignEntriesToItems() { // and move them out of view to keep them from registering mouse events. item->setPos(_scrollWindowWidth, _scrollWindowHeight); item->setVisible(false); - item->markAsDirty(); } else { // Assign entry and update item->setVisible(true); diff --git a/gui/widgets/grid.h b/gui/widgets/grid.h index 0937d9826ec..d64285d1fc7 100644 --- a/gui/widgets/grid.h +++ b/gui/widgets/grid.h @@ -145,6 +145,7 @@ protected: int _lastVisibleItem; GridItemTray *_tray; String _iconDir; + bool _isGridInvalid; public: int _scrollWindowPaddingX; @@ -174,6 +175,7 @@ public: void setEntryList(Common::Array *list); void setAttributeValues(const Common::Array &attrs); void setTitlesVisible(bool vis); + void markGridAsInvalid() { _isGridInvalid = true; } void setGroupHeaderFormat(const U32String &prefix, const U32String &suffix); void groupEntries();