diff --git a/src/dlangui/widgets/lists.d b/src/dlangui/widgets/lists.d index d91730d2..540b5f4b 100644 --- a/src/dlangui/widgets/lists.d +++ b/src/dlangui/widgets/lists.d @@ -1171,9 +1171,15 @@ class ListWidget : WidgetGroup, OnScrollHandler, OnAdapterChangeHandler { if (_lastMeasureWidth != rc.width || _lastMeasureHeight != rc.height) measure(parentrc.width, parentrc.height); - // hide scrollbar or update rc for scrollbar - Rect sbrect = rc; + // layout scrollbar if (_needScrollbar) { + _scrollbar.visibility = Visibility.Visible; + Rect sbrect = rc; + if (_orientation == Orientation.Vertical) + sbrect.left = sbrect.right - _sbsz.x; + else + sbrect.top = sbrect.bottom - _sbsz.y; + _scrollbar.layout(sbrect); rc.right -= _sbsz.x; rc.bottom -= _sbsz.y; } else { @@ -1185,16 +1191,6 @@ class ListWidget : WidgetGroup, OnScrollHandler, OnAdapterChangeHandler { // calc item rectangles updateItemPositions(); - // layout scrollbar - must be under updateItemPositions() - if (_needScrollbar) { - _scrollbar.visibility = Visibility.Visible; - if (_orientation == Orientation.Vertical) - sbrect.left = sbrect.right - _sbsz.x; - else - sbrect.top = sbrect.bottom - _sbsz.y; - _scrollbar.layout(sbrect); - } - if (_makeSelectionVisibleOnNextLayout) { makeSelectionVisible(); _makeSelectionVisibleOnNextLayout = false; diff --git a/src/dlangui/widgets/scrollbar.d b/src/dlangui/widgets/scrollbar.d index dbb24647..0b02b9f9 100644 --- a/src/dlangui/widgets/scrollbar.d +++ b/src/dlangui/widgets/scrollbar.d @@ -418,8 +418,10 @@ class ScrollBar : AbstractSlider, OnClickHandler { _btnBack.setState(State.Enabled); _btnForward.setState(State.Enabled); _indicator.visibility = Visibility.Visible; - _pageUp.visibility = Visibility.Visible; - _pageDown.visibility = Visibility.Visible; + if (_position > _minValue) + _pageUp.visibility = Visibility.Visible; + if (_position < _maxValue) + _pageDown.visibility = Visibility.Visible; } else { _btnBack.resetState(State.Enabled); _btnForward.resetState(State.Enabled);