diff options
Diffstat (limited to 'platform/qt/src/timer.cpp')
-rw-r--r-- | platform/qt/src/timer.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/platform/qt/src/timer.cpp b/platform/qt/src/timer.cpp new file mode 100644 index 0000000000..6d0ccb41d7 --- /dev/null +++ b/platform/qt/src/timer.cpp @@ -0,0 +1,57 @@ +#include <mbgl/util/timer.hpp> + +#include <mbgl/util/run_loop.hpp> + +#include <memory> + +#include "timer_impl.hpp" + +namespace mbgl { +namespace util { + +Timer::Impl::Impl() { +#if QT_VERSION >= 0x050000 + timer.setTimerType(Qt::PreciseTimer); +#endif + connect(&timer, SIGNAL(timeout()), this, SLOT(timerFired())); +} + +void Timer::Impl::start(uint64_t timeout, uint64_t repeat_, std::function<void ()>&& cb) { + repeat = repeat_; + callback = std::move(cb); + + timer.setSingleShot(true); + timer.start(timeout); +} + +void Timer::Impl::stop() { + timer.stop(); +} + +void Timer::Impl::timerFired() { + if (repeat) { + timer.setSingleShot(false); + timer.start(repeat); + } + + callback(); +} + +Timer::Timer() + : impl(std::make_unique<Impl>()) { +} + +Timer::~Timer() = default; + +void Timer::start(Duration timeout, Duration repeat, std::function<void()>&& cb) { + impl->start(std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count(), + std::chrono::duration_cast<std::chrono::milliseconds>(repeat).count(), + std::move(cb)); +} + +void Timer::stop() { + impl->stop(); +} + +} +} |