From c3b90aa49250a08cbb73d29074a1f86a034269e6 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 20 Nov 2025 00:58:38 +0300 Subject: [PATCH] Improved calculation of filler height for flexible scroll. --- Telegram/SourceFiles/info/info_flexible_scroll.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/info/info_flexible_scroll.cpp b/Telegram/SourceFiles/info/info_flexible_scroll.cpp index a55a65e45b..20828322fc 100644 --- a/Telegram/SourceFiles/info/info_flexible_scroll.cpp +++ b/Telegram/SourceFiles/info/info_flexible_scroll.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "info/info_flexible_scroll.h" +#include "ui/effects/animation_value.h" #include "ui/widgets/scroll_area.h" #include "base/event_filter.h" #include "base/options.h" @@ -218,7 +219,17 @@ void FlexibleScrollHelper::setupScrollHandlingWithFilter() { _pinnedToTop->heightValue(), _inner->heightValue() ) | rpl::start_with_next([=](int, int h) { - _data.contentHeightValue.fire(h + heightDiff()); + const auto max = _pinnedToTop->maximumHeight(); + const auto min = _pinnedToTop->minimumHeight(); + const auto diff = max - min; + const auto progress = (diff > 0) + ? std::clamp( + (_pinnedToTop->height() - min) / float64(diff), + 0., + 1.) + : 1.; + _data.contentHeightValue.fire(h + + anim::interpolate(diff, 0, progress)); }, _pinnedToTop->lifetime()); const auto singleStep = _scroll->verticalScrollBar()->singleStep()