2
* Copyright 2015 Canonical Ltd.
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation; version 3.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
19
namespace UbuntuGestures {
21
Timer::Timer(QObject *parent) : AbstractTimer(parent)
23
m_timer.setSingleShot(false);
24
connect(&m_timer, &QTimer::timeout, this, &AbstractTimer::timeout);
27
int Timer::interval() const
29
return m_timer.interval();
32
void Timer::setInterval(int msecs)
34
m_timer.setInterval(msecs);
40
AbstractTimer::start();
46
AbstractTimer::stop();
49
bool Timer::isSingleShot() const
51
return m_timer.isSingleShot();
54
void Timer::setSingleShot(bool value)
56
m_timer.setSingleShot(value);
59
/////////////////////////////////// FakeTimer //////////////////////////////////
61
FakeTimer::FakeTimer(const SharedTimeSource &timeSource, QObject *parent)
62
: UbuntuGestures::AbstractTimer(parent)
65
, m_timeSource(timeSource)
69
void FakeTimer::update()
75
if (m_nextTimeoutTime <= m_timeSource->msecsSinceReference()) {
79
m_nextTimeoutTime += interval();
85
void FakeTimer::start()
87
AbstractTimer::start();
88
m_nextTimeoutTime = m_timeSource->msecsSinceReference() + (qint64)interval();
91
int FakeTimer::interval() const
96
void FakeTimer::setInterval(int msecs)
101
bool FakeTimer::isSingleShot() const
106
void FakeTimer::setSingleShot(bool value)
108
m_singleShot = value;
111
/////////////////////////////////// FakeTimerFactory //////////////////////////////////
113
FakeTimerFactory::FakeTimerFactory()
115
m_timeSource.reset(new FakeTimeSource);
118
void FakeTimerFactory::updateTime(qint64 targetTime)
120
qint64 minTimeoutTime = targetTime;
122
for (int i = 0; i < timers.count(); ++i) {
123
FakeTimer *timer = timers[i].data();
124
if (timer && timer->isRunning() && timer->nextTimeoutTime() < minTimeoutTime) {
125
minTimeoutTime = timer->nextTimeoutTime();
129
m_timeSource->m_msecsSinceReference = minTimeoutTime;
131
for (int i = 0; i < timers.count(); ++i) {
132
FakeTimer *timer = timers[i].data();
138
if (m_timeSource->msecsSinceReference() < targetTime) {
139
updateTime(targetTime);
143
AbstractTimer *FakeTimerFactory::createTimer(QObject *parent)
145
FakeTimer *fakeTimer = new FakeTimer(m_timeSource, parent);
147
timers.append(fakeTimer);
152
} // namespace UbuntuGestures