Improve overscroll handling.
This commit is contained in:
parent
b6cb6cb770
commit
fd1752a5c2
2 changed files with 11 additions and 11 deletions
|
|
@ -412,7 +412,8 @@ void ElasticScroll::touchDeaccelerate(int32 elapsed) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ElasticScroll::overscrollReturn() {
|
void ElasticScroll::overscrollReturn() {
|
||||||
_ignoreMomentum = _overscrollReturning = true;
|
_overscrollReturning = true;
|
||||||
|
_ignoreMomentumFromOverscroll = _overscroll;
|
||||||
if (overscrollFinish()) {
|
if (overscrollFinish()) {
|
||||||
_overscrollReturnAnimation.stop();
|
_overscrollReturnAnimation.stop();
|
||||||
return;
|
return;
|
||||||
|
|
@ -647,20 +648,19 @@ bool ElasticScroll::handleWheelEvent(not_null<QWheelEvent*> e, bool touch) {
|
||||||
const auto guard = gsl::finally([&] {
|
const auto guard = gsl::finally([&] {
|
||||||
_lastScroll = now;
|
_lastScroll = now;
|
||||||
});
|
});
|
||||||
if (_ignoreMomentum) {
|
|
||||||
if (momentum) {
|
|
||||||
if (!_overscrollReturnAnimation.animating()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_ignoreMomentum = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const auto pixels = ScrollDelta(e);
|
const auto pixels = ScrollDelta(e);
|
||||||
auto delta = _vertical ? -pixels.y() : pixels.x();
|
auto delta = _vertical ? -pixels.y() : pixels.x();
|
||||||
if (std::abs(_vertical ? pixels.x() : pixels.y()) >= std::abs(delta)) {
|
if (std::abs(_vertical ? pixels.x() : pixels.y()) >= std::abs(delta)) {
|
||||||
delta = 0;
|
delta = 0;
|
||||||
}
|
}
|
||||||
|
if (_ignoreMomentumFromOverscroll) {
|
||||||
|
if (!momentum) {
|
||||||
|
_ignoreMomentumFromOverscroll = 0;
|
||||||
|
} else if (!_overscrollReturnAnimation.animating()
|
||||||
|
&& !base::OppositeSigns(_ignoreMomentumFromOverscroll, delta)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (phase == Qt::NoScrollPhase) {
|
if (phase == Qt::NoScrollPhase) {
|
||||||
if (_overscroll == currentOverscrollDefault()) {
|
if (_overscroll == currentOverscrollDefault()) {
|
||||||
tryScrollTo(_state.visibleFrom + delta);
|
tryScrollTo(_state.visibleFrom + delta);
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,7 @@ private:
|
||||||
crl::time _lastScroll = 0;
|
crl::time _lastScroll = 0;
|
||||||
TouchScrollState _touchScrollState = TouchScrollState::Manual;
|
TouchScrollState _touchScrollState = TouchScrollState::Manual;
|
||||||
int _overscrollAccumulated = 0;
|
int _overscrollAccumulated = 0;
|
||||||
|
int _ignoreMomentumFromOverscroll = 0;
|
||||||
bool _touchDisabled : 1 = false;
|
bool _touchDisabled : 1 = false;
|
||||||
bool _touchScroll : 1 = false;
|
bool _touchScroll : 1 = false;
|
||||||
bool _touchPress : 1 = false;
|
bool _touchPress : 1 = false;
|
||||||
|
|
@ -249,7 +250,6 @@ private:
|
||||||
bool _widgetAcceptsTouch : 1 = false;
|
bool _widgetAcceptsTouch : 1 = false;
|
||||||
bool _disabled : 1 = false;
|
bool _disabled : 1 = false;
|
||||||
bool _dirtyState : 1 = false;
|
bool _dirtyState : 1 = false;
|
||||||
bool _ignoreMomentum : 1 = false;
|
|
||||||
bool _overscrollReturning : 1 = false;
|
bool _overscrollReturning : 1 = false;
|
||||||
|
|
||||||
Fn<bool(not_null<QWheelEvent*>)> _customWheelProcess;
|
Fn<bool(not_null<QWheelEvent*>)> _customWheelProcess;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue