Allow to change overscroll from outside.

This commit is contained in:
John Preston 2023-07-11 12:21:33 +04:00
parent 80308cea4f
commit 763b3a37c3
2 changed files with 14 additions and 4 deletions

View file

@ -1118,9 +1118,19 @@ void ElasticScroll::setOverscrollTypes(
}
}
void ElasticScroll::setOverscrollDefaults(int from, int till) {
void ElasticScroll::setOverscrollDefaults(int from, int till, bool shift) {
Expects(from <= 0 && till >= 0);
if (_state.visibleFrom > 0
|| (!_state.visibleFrom
&& _overscrollTypeFrom != OverscrollType::Virtual)) {
from = 0;
}
if (_state.visibleTill < _state.fullSize
|| (_state.visibleTill == _state.fullSize
&& _overscrollTypeTill != OverscrollType::Virtual)) {
till = 0;
}
const auto fromChanged = (_overscrollDefaultFrom != from);
const auto tillChanged = (_overscrollDefaultTill != till);
const auto changed = (fromChanged && _overscroll < 0)
@ -1133,8 +1143,8 @@ void ElasticScroll::setOverscrollDefaults(int from, int till) {
_overscrollDefaultTill = till;
if (changed) {
const auto delta = (_overscroll < 0)
? (_overscroll - _overscrollDefaultFrom)
: (_overscroll - _overscrollDefaultTill);
? (_overscroll - (shift ? 0 : _overscrollDefaultFrom))
: (_overscroll - (shift ? 0 : _overscrollDefaultTill));
_overscrollAccumulated = currentOverscrollDefaultAccumulated()
+ OverscrollToAccumulated(delta);
}

View file

@ -162,7 +162,7 @@ public:
Real,
};
void setOverscrollTypes(OverscrollType from, OverscrollType till);
void setOverscrollDefaults(int from, int till);
void setOverscrollDefaults(int from, int till, bool shift = false);
void setOverscrollBg(QColor bg);
[[nodiscard]] rpl::producer<> scrolls() const;