/
diev
/
stelegramdesktop-tdesktop
Обзор
Документация
Войти
/
diev
/
stelegramdesktop-tdesktop
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
Telegram/SourceFiles/ui/chat/continuous_scroll.cpp
74 строки
2 KB
23rd
Added new Ui::СontinuousScroll.
07 окт 2021, 10:09
07 окт 2021, 10:09
c2c53df
Код
Авторство
О чём код?
/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "ui/chat/continuous_scroll.h" #include <QScrollBar> #include <QWheelEvent> namespace Ui { void ContinuousScroll::wheelEvent(QWheelEvent *e) { if (_tracking && !e->angleDelta().isNull() && (e->angleDelta().y() < 0) && (scrollTopMax() == scrollTop())) { _addContentRequests.fire({}); if (base::take(_contentAdded)) { viewportEvent(e); } return; } ScrollArea::wheelEvent(e); } void ContinuousScroll::setTrackingContent(bool value) { if (_tracking == value) { return; } _tracking = value; reconnect(); } void ContinuousScroll::reconnect() { if (!_tracking) { _connection.release(); return; } const auto handleAction = [=](int action) { const auto scroll = verticalScrollBar(); const auto step = (action == QAbstractSlider::SliderSingleStepAdd) ? scroll->singleStep() : (action == QAbstractSlider::SliderPageStepAdd) ? scroll->pageStep() : 0; if (!action) { return; } const auto newTop = scrollTop() + step; if (newTop > scrollTopMax()) { _addContentRequests.fire({}); if (base::take(_contentAdded)) { scroll->setSliderPosition(newTop); } } }; _connection = QObject::connect( verticalScrollBar(), &QAbstractSlider::actionTriggered, handleAction); } void ContinuousScroll::contentAdded() { _contentAdded = true; } rpl::producer<> ContinuousScroll::addContentRequests() const { return _addContentRequests.events(); } } // namespace Ui