void WidgetGridBox::subActive(Widget &widget) { if (widget.getTag().endsWith("#Up")) { scrollUp(1); return; } if (widget.getTag().endsWith("#Down")) { scrollDown(1); return; } if (widget.getTag().endsWith("#Bar")) { if (_itemsByRow == 0) return; // Round up const size_t rowCount = (_items.size() + (_itemsByRow - 1)) / _itemsByRow; const size_t visibleRow = (_visibleItems.size() + (_itemsByRow - 1)) / _itemsByRow; const ptrdiff_t maxStartRow = rowCount - visibleRow; if (maxStartRow <= 0) return; const size_t startRow = _scrollbar->getState() * maxStartRow; const size_t startItem = startRow * _itemsByRow; if (startItem == _startItem) return; _startItem = startItem; updateVisible(); return; } WidgetListItem *listItem = dynamic_cast<WidgetListItem *>(&widget); if (listItem) { if (_selectedItem != listItem->getItemNumber()) { _selectedItem = listItem->getItemNumber(); setActive(true); playSound("gui_button", Sound::kSoundTypeSFX); } } }
void WidgetGridBox::subActive(Widget &widget) { if (widget.getTag().endsWith("#Up")) { scrollUp(1); return; } if (widget.getTag().endsWith("#Down")) { scrollDown(1); return; } if (widget.getTag().endsWith("#Bar")) { if (_items.size() - _visibleItems.size() == 0) return; uint maxIfFilled = _items.size() + _itemsByRow - _items.size() % _itemsByRow; uint maxVisible = floor(_contentHeight / _items.front()->getHeight()) * _itemsByRow; uint startItem = floor(_scrollbar->getState() * (maxIfFilled - maxVisible) / _itemsByRow) * _itemsByRow; if (startItem == _startItem) return; _startItem = startItem; updateVisible(); return; } WidgetListItem *listItem = dynamic_cast<WidgetListItem *>(&widget); if (listItem) { if (_selectedItem != listItem->getItemNumber()) { _selectedItem = listItem->getItemNumber(); setActive(true); playSound("gui_button", Sound::kSoundTypeSFX); } } }