From 32bc723745393e63b68408d6d905a0a999f0f932 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 24 Feb 2019 20:19:16 +0300 Subject: [PATCH] Added scroll animation in dialogs list when it scrolls to top. --- .../SourceFiles/dialogs/dialogs_widget.cpp | 20 ++++++++++++++++++- Telegram/SourceFiles/dialogs/dialogs_widget.h | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 884b8a055..161a4eb3b 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -333,7 +333,25 @@ void DialogsWidget::dialogsToUp() { return; } if (_filter->getLastText().trimmed().isEmpty() && !_searchInChat) { - _scroll->scrollToY(0); + _scrollToAnimation.finish(); + auto scrollTop = _scroll->scrollTop(); + const auto scrollTo = 0; + const auto maxAnimatedDelta = _scroll->height(); + if (scrollTo + maxAnimatedDelta < scrollTop) { + scrollTop = scrollTo + maxAnimatedDelta; + _scroll->scrollToY(scrollTop); + } + + const auto scroll = [&] { + _scroll->scrollToY(qRound(_scrollToAnimation.current())); + }; + + _scrollToAnimation.start( + scroll, + scrollTop, + scrollTo, + st::slideDuration, + anim::sineInOut); } } diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.h b/Telegram/SourceFiles/dialogs/dialogs_widget.h index df43b2bfc..faad0637c 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.h @@ -199,6 +199,7 @@ private: object_ptr _loadMoreChats = { nullptr }; std::unique_ptr _connecting; + Animation _scrollToAnimation; Animation _a_show; Window::SlideDirection _showDirection; QPixmap _cacheUnder, _cacheOver;