diff --git a/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.cpp b/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.cpp index 67dc7e7cb7..4f5c213f03 100644 --- a/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.cpp +++ b/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.cpp @@ -135,13 +135,24 @@ void VerticalDrumPicker::handleWheelEvent(not_null e) { if (direction) { _animation.jumpToOffset(direction); } else { - const auto delta = e->pixelDelta().y() - ? e->pixelDelta().y() - : e->angleDelta().y(); - increaseShift(delta / float64(_itemHeight)); - if (e->phase() == Qt::ScrollEnd) { + if (const auto delta = e->pixelDelta().y(); delta) { + increaseShift(delta / float64(_itemHeight)); + } else if (e->phase() == Qt::ScrollEnd) { animationDataFromIndex(); _animation.jumpToOffset(0); + } else { + constexpr auto step = int(QWheelEvent::DefaultDeltasPerStep); + + _touch.verticalDelta += e->angleDelta().y(); + while (std::abs(_touch.verticalDelta) >= step) { + if (_touch.verticalDelta < 0) { + _touch.verticalDelta += step; + _animation.jumpToOffset(1); + } else { + _touch.verticalDelta -= step; + _animation.jumpToOffset(-1); + } + } } } } diff --git a/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.h b/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.h index a1c4048cd8..4cccd43b3d 100644 --- a/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.h +++ b/Telegram/SourceFiles/ui/widgets/vertical_drum_picker.h @@ -99,6 +99,10 @@ private: bool clickDisabled = false; } _mouse; + struct { + int verticalDelta = 0; + } _touch; + }; } // namespace Ui