From d27e4803a130a262b84a54c915fc83f8c9bbe2f4 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 14 Mar 2022 17:39:02 +0300 Subject: [PATCH] Moved base::Timer to std::unique_ptr in DraggingScrollManager. --- ui/dragging_scroll_manager.cpp | 21 +++++++++++++-------- ui/dragging_scroll_manager.h | 10 +++++----- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/ui/dragging_scroll_manager.cpp b/ui/dragging_scroll_manager.cpp index 5df4ee5..29aecdf 100644 --- a/ui/dragging_scroll_manager.cpp +++ b/ui/dragging_scroll_manager.cpp @@ -7,13 +7,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "ui/dragging_scroll_manager.h" -#include "ui/widgets/scroll_area.h" +#include "base/timer.h" +#include "ui/widgets/scroll_area.h" // kMaxScrollSpeed. namespace Ui { -DraggingScrollManager::DraggingScrollManager() -: _timer([=] { scrollByTimer(); }) { -} +DraggingScrollManager::DraggingScrollManager() = default; void DraggingScrollManager::scrollByTimer() { const auto d = (_delta > 0) @@ -25,9 +24,12 @@ void DraggingScrollManager::scrollByTimer() { void DraggingScrollManager::checkDeltaScroll(int delta) { _delta = delta; if (_delta) { - _timer.callEach(15); + if (!_timer) { + _timer = std::make_unique([=] { scrollByTimer(); }); + } + _timer->callEach(15); } else { - _timer.cancel(); + cancel(); } } @@ -44,10 +46,13 @@ void DraggingScrollManager::checkDeltaScroll( } void DraggingScrollManager::cancel() { - _timer.cancel(); + if (_timer) { + _timer->cancel(); + _timer = nullptr; + } } -rpl::producer DraggingScrollManager::scrolls() { +rpl::producer DraggingScrollManager::scrolls() const { return _scrolls.events(); } diff --git a/ui/dragging_scroll_manager.h b/ui/dragging_scroll_manager.h index 0d73b95..5ae4f1b 100644 --- a/ui/dragging_scroll_manager.h +++ b/ui/dragging_scroll_manager.h @@ -7,12 +7,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once -#include "base/timer.h" +namespace base { +class Timer; +} // namespace base namespace Ui { -class ScrollArea; - class DraggingScrollManager final { public: DraggingScrollManager(); @@ -21,12 +21,12 @@ public: void checkDeltaScroll(const QPoint &point, int top, int bottom); void cancel(); - rpl::producer scrolls(); + [[nodiscard]] rpl::producer scrolls() const; private: void scrollByTimer(); - base::Timer _timer; + std::unique_ptr _timer; int _delta = 0; rpl::event_stream _scrolls;