Moved base::Timer to std::unique_ptr in DraggingScrollManager.

This commit is contained in:
23rd 2022-03-14 17:39:02 +03:00
parent 443191045b
commit d27e4803a1
2 changed files with 18 additions and 13 deletions

View file

@ -7,13 +7,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "ui/dragging_scroll_manager.h" #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 { namespace Ui {
DraggingScrollManager::DraggingScrollManager() DraggingScrollManager::DraggingScrollManager() = default;
: _timer([=] { scrollByTimer(); }) {
}
void DraggingScrollManager::scrollByTimer() { void DraggingScrollManager::scrollByTimer() {
const auto d = (_delta > 0) const auto d = (_delta > 0)
@ -25,9 +24,12 @@ void DraggingScrollManager::scrollByTimer() {
void DraggingScrollManager::checkDeltaScroll(int delta) { void DraggingScrollManager::checkDeltaScroll(int delta) {
_delta = delta; _delta = delta;
if (_delta) { if (_delta) {
_timer.callEach(15); if (!_timer) {
_timer = std::make_unique<base::Timer>([=] { scrollByTimer(); });
}
_timer->callEach(15);
} else { } else {
_timer.cancel(); cancel();
} }
} }
@ -44,10 +46,13 @@ void DraggingScrollManager::checkDeltaScroll(
} }
void DraggingScrollManager::cancel() { void DraggingScrollManager::cancel() {
_timer.cancel(); if (_timer) {
_timer->cancel();
_timer = nullptr;
}
} }
rpl::producer<int> DraggingScrollManager::scrolls() { rpl::producer<int> DraggingScrollManager::scrolls() const {
return _scrolls.events(); return _scrolls.events();
} }

View file

@ -7,12 +7,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#pragma once #pragma once
#include "base/timer.h" namespace base {
class Timer;
} // namespace base
namespace Ui { namespace Ui {
class ScrollArea;
class DraggingScrollManager final { class DraggingScrollManager final {
public: public:
DraggingScrollManager(); DraggingScrollManager();
@ -21,12 +21,12 @@ public:
void checkDeltaScroll(const QPoint &point, int top, int bottom); void checkDeltaScroll(const QPoint &point, int top, int bottom);
void cancel(); void cancel();
rpl::producer<int> scrolls(); [[nodiscard]] rpl::producer<int> scrolls() const;
private: private:
void scrollByTimer(); void scrollByTimer();
base::Timer _timer; std::unique_ptr<base::Timer> _timer;
int _delta = 0; int _delta = 0;
rpl::event_stream<int> _scrolls; rpl::event_stream<int> _scrolls;