Fix build in GCC.

GCC doesn't allow using scoped enums in bitfields without warnings.
So we use "unsigned" bitfield and a couple of get/set methods.
This commit is contained in:
John Preston 2017-04-08 14:25:54 +03:00
parent 38f94c63e9
commit cd3c5e4ade
2 changed files with 15 additions and 8 deletions

View file

@ -33,8 +33,8 @@ QObject *TimersAdjuster() {
Timer::Timer(base::lambda<void()> callback) : QObject(nullptr)
, _callback(std::move(callback))
, _type(Qt::PreciseTimer)
, _adjusted(false)
, _repeat(Repeat::Interval) {
, _adjusted(false) {
setRepeat(Repeat::Interval);
connect(TimersAdjuster(), &QObject::destroyed, this, [this] { adjust(); }, Qt::QueuedConnection);
}
@ -42,7 +42,7 @@ void Timer::start(TimeMs timeout, Qt::TimerType type, Repeat repeat) {
cancel();
_type = type;
_repeat = repeat;
setRepeat(repeat);
_adjusted = false;
setTimeout(timeout);
_timerId = startTimer(_timeout, _type);
@ -91,9 +91,9 @@ int Timer::timeout() const {
}
void Timer::timerEvent(QTimerEvent *e) {
if (_repeat == Repeat::Interval) {
if (repeat() == Repeat::Interval) {
if (_adjusted) {
start(_timeout, _type, _repeat);
start(_timeout, _type, repeat());
} else {
_next = getms(true) + _timeout;
}

View file

@ -67,7 +67,7 @@ protected:
void timerEvent(QTimerEvent *e) override;
private:
enum class Repeat {
enum class Repeat : unsigned {
Interval = 0,
SingleShot = 1,
};
@ -77,6 +77,13 @@ private:
void setTimeout(TimeMs timeout);
int timeout() const;
void setRepeat(Repeat repeat) {
_repeat = static_cast<unsigned>(repeat);
}
Repeat repeat() const {
return static_cast<Repeat>(_repeat);
}
base::lambda<void()> _callback;
TimeMs _next = 0;
int _timeout = 0;
@ -84,7 +91,7 @@ private:
Qt::TimerType _type : 2;
bool _adjusted : 1;
Repeat _repeat : 1;
unsigned _repeat : 1;
};
@ -105,4 +112,4 @@ private:
};
} // namespace base
} // namespace base