diff options
-rw-r--r-- | gui/widgets/scrollcontainer.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gui/widgets/scrollcontainer.cpp b/gui/widgets/scrollcontainer.cpp index 5e112b476f..f2fb21302c 100644 --- a/gui/widgets/scrollcontainer.cpp +++ b/gui/widgets/scrollcontainer.cpp @@ -81,7 +81,7 @@ void ScrollContainerWidget::handleCommand(CommandSender *sender, uint32 cmd, uin switch (cmd) { case kSetPositionCmd: _scrolledY = _verticalScroll->_currentPos; - recalc(); + reflowLayout(); draw(); break; } @@ -90,6 +90,16 @@ void ScrollContainerWidget::handleCommand(CommandSender *sender, uint32 cmd, uin void ScrollContainerWidget::reflowLayout() { recalc(); Widget::reflowLayout(); + Widget *ptr = _firstWidget; + while (ptr) { + int y = ptr->getAbsY() - getChildY(); + int h = ptr->getHeight(); + bool visible = true; + if (y + h - _scrolledY < 0) visible = false; + if (y - _scrolledY > _limitH) visible = false; + ptr->setVisible(visible); + ptr = ptr->next(); + } } void ScrollContainerWidget::drawWidget() { |