diff options
author | Chip Collier <gregory.collier@kdab.com> | 2017-07-24 17:06:44 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-08-02 14:34:52 +0000 |
commit | 4392fa4df4a8f4623dd3ff881f2dd03c94b50c30 (patch) | |
tree | 7435dcc724b6c93c5cb0524cfce541e83c480c51 | |
parent | 2dcc0f8fdd118acdb00b3958b6c230415fd28ca5 (diff) |
Fix Qt3DAnimation::Animation::Clock::playbackRate
Fixes a small bug, removes unused properties from the clock
node (`startTime`) and changes the type of the `playbackRate` property
from `float` to `double` to match the rest of the animation aspect.
QClockPrivate is no longer responsible for emitting the
playbackRateChanged signal. Tests updated to account for this.
[ChangeLog][Qt3DAnimation][Bugfix] The backend node
(`Qt3DAnimation::Animation::Clock`) had an incorrect return type
specified (`int` instead of `float`) which was narrowing the actual
value during the evaluation of associated animation clips.
Change-Id: I53ec78ba289cafcd2055582bee23ff1fc3481317
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | src/animation/backend/clock.cpp | 2 | ||||
-rw-r--r-- | src/animation/backend/clock_p.h | 10 | ||||
-rw-r--r-- | src/animation/frontend/qclock.cpp | 30 | ||||
-rw-r--r-- | src/animation/frontend/qclock.h | 9 | ||||
-rw-r--r-- | src/animation/frontend/qclock_p.h | 6 | ||||
-rw-r--r-- | tests/auto/animation/clock/tst_clock.cpp | 8 | ||||
-rw-r--r-- | tests/auto/animation/qclock/tst_qclock.cpp | 12 |
8 files changed, 26 insertions, 52 deletions
diff --git a/.gitignore b/.gitignore index 17ab804c9..2f8201bc2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ doc/qt3d *~ *.user *.user.* +.dir-locals.el src/quick3d/qt3dquickversion.h src/threed/qt3dversion.h tmp diff --git a/src/animation/backend/clock.cpp b/src/animation/backend/clock.cpp index 13d82f2e5..84dc88ea1 100644 --- a/src/animation/backend/clock.cpp +++ b/src/animation/backend/clock.cpp @@ -48,7 +48,6 @@ namespace Animation { Clock::Clock() : BackendNode(ReadOnly) - , m_startGlobalTime(0) , m_playbackRate(1.f) { } @@ -62,7 +61,6 @@ void Clock::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change void Clock::cleanup() { - m_startGlobalTime = 0; m_playbackRate = 1.f; } diff --git a/src/animation/backend/clock_p.h b/src/animation/backend/clock_p.h index 9ae8c60a9..d5b6b86da 100644 --- a/src/animation/backend/clock_p.h +++ b/src/animation/backend/clock_p.h @@ -63,17 +63,13 @@ public: void cleanup(); - void setPlaybackRate(float playbackRate) { m_playbackRate = playbackRate; } - int playbackRate() const { return m_playbackRate; } - - void setStartTime(qint64 globalTime) { m_startGlobalTime = globalTime; } - qint64 startTime() const { return m_startGlobalTime; } + void setPlaybackRate(double playbackRate) { m_playbackRate = playbackRate; } + double playbackRate() const { return m_playbackRate; } private: void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL; - qint64 m_startGlobalTime; - float m_playbackRate; + double m_playbackRate; }; } // namespace Animation diff --git a/src/animation/frontend/qclock.cpp b/src/animation/frontend/qclock.cpp index 1a3649900..6dd851b88 100644 --- a/src/animation/frontend/qclock.cpp +++ b/src/animation/frontend/qclock.cpp @@ -48,16 +48,6 @@ QClockPrivate::QClockPrivate() { } -void QClockPrivate::setPlaybackRate(float playbackRate) -{ - if (qFuzzyCompare(playbackRate, m_playbackRate)) - return; - - Q_Q(QClock); - m_playbackRate = playbackRate; - emit q->playbackRateChanged(playbackRate); -} - QClock::QClock(Qt3DCore::QNode* parent) : Qt3DCore::QNode(*new QClockPrivate, parent) { @@ -72,27 +62,19 @@ QClock::~QClock() { } -float QClock::playbackRate() const +double QClock::playbackRate() const { Q_D(const QClock); return d->m_playbackRate; } -void QClock::setPlaybackRate(float playbackRate) +void QClock::setPlaybackRate(double playbackRate) { Q_D(QClock); - d->setPlaybackRate(playbackRate); -} - -void QClock::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) -{ - if (change->type() == Qt3DCore::PropertyUpdated) { - Qt3DCore::QPropertyUpdatedChangePtr e = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(change); - if (e->propertyName() == QByteArrayLiteral("playbackRate")) { - Q_D(QClock); - d->setPlaybackRate(e->value().toFloat()); - } - } + if (qFuzzyCompare(playbackRate, d->m_playbackRate)) + return; + d->m_playbackRate = playbackRate; + emit playbackRateChanged(playbackRate); } Qt3DCore::QNodeCreatedChangeBasePtr QClock::createNodeCreationChange() const diff --git a/src/animation/frontend/qclock.h b/src/animation/frontend/qclock.h index 5b6790362..d2bf91103 100644 --- a/src/animation/frontend/qclock.h +++ b/src/animation/frontend/qclock.h @@ -49,21 +49,20 @@ class QClockPrivate; class QT3DANIMATIONSHARED_EXPORT QClock : public Qt3DCore::QNode { Q_OBJECT - Q_PROPERTY(float playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged) + Q_PROPERTY(double playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged) public: explicit QClock(Qt3DCore::QNode *parent = nullptr); ~QClock(); - float playbackRate() const; - void setPlaybackRate(float playbackRate); + double playbackRate() const; + void setPlaybackRate(double playbackRate); Q_SIGNALS: - void playbackRateChanged(float playbackRate); + void playbackRateChanged(double playbackRate); protected: QClock(QClockPrivate &dd, Qt3DCore::QNode *parent = nullptr); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) Q_DECL_OVERRIDE; private: Q_DECLARE_PRIVATE(QClock) diff --git a/src/animation/frontend/qclock_p.h b/src/animation/frontend/qclock_p.h index d633d071e..c862d9082 100644 --- a/src/animation/frontend/qclock_p.h +++ b/src/animation/frontend/qclock_p.h @@ -62,14 +62,12 @@ public: Q_DECLARE_PUBLIC(QClock) - void setPlaybackRate(float playbackRate); - - float m_playbackRate; + double m_playbackRate; }; struct QClockData { - float playbackRate; + double playbackRate; }; } // namespace Qt3DAnimation diff --git a/tests/auto/animation/clock/tst_clock.cpp b/tests/auto/animation/clock/tst_clock.cpp index fa9b5892f..547ec6a12 100644 --- a/tests/auto/animation/clock/tst_clock.cpp +++ b/tests/auto/animation/clock/tst_clock.cpp @@ -47,7 +47,7 @@ private Q_SLOTS: Qt3DAnimation::Animation::Clock backendClock; Qt3DAnimation::QClock clock; - clock.setPlaybackRate(10.f); + clock.setPlaybackRate(10.5); // WHEN simulateInitialization(&clock, &backendClock); @@ -62,18 +62,18 @@ private Q_SLOTS: Qt3DAnimation::Animation::Clock backendClock; // THEN - QCOMPARE(backendClock.playbackRate(), 1.f); + QCOMPARE(backendClock.playbackRate(), 1.0); // GIVEN Qt3DAnimation::QClock clock; - clock.setPlaybackRate(10.f); + clock.setPlaybackRate(10.5); // WHEN simulateInitialization(&clock, &backendClock); backendClock.cleanup(); // THEN - QCOMPARE(backendClock.playbackRate(), 1.f); + QCOMPARE(backendClock.playbackRate(), 1.0); } }; diff --git a/tests/auto/animation/qclock/tst_qclock.cpp b/tests/auto/animation/qclock/tst_qclock.cpp index 048073066..34c70da7b 100644 --- a/tests/auto/animation/qclock/tst_qclock.cpp +++ b/tests/auto/animation/qclock/tst_qclock.cpp @@ -53,7 +53,7 @@ private Q_SLOTS: Qt3DAnimation::QClock clock; // THEN - QCOMPARE(clock.playbackRate(), 1.f); + QCOMPARE(clock.playbackRate(), 1.0); } void checkPropertyChanges() @@ -62,8 +62,8 @@ private Q_SLOTS: Qt3DAnimation::QClock clock; // WHEN - QSignalSpy spy(&clock, SIGNAL(playbackRateChanged(float))); - const float newValue = 5.f; + QSignalSpy spy(&clock, SIGNAL(playbackRateChanged(double))); + const double newValue = 5.5; clock.setPlaybackRate(newValue); // THEN @@ -136,7 +136,7 @@ private Q_SLOTS: { // WHEN - clock.setPlaybackRate(10.f); + clock.setPlaybackRate(10.5); QCoreApplication::processEvents(); // THEN @@ -144,14 +144,14 @@ private Q_SLOTS: auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); QCOMPARE(change->propertyName(), "playbackRate"); QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - QCOMPARE(change->value().value<float>(), clock.playbackRate()); + QCOMPARE(change->value().value<double>(), clock.playbackRate()); arbiter.events.clear(); } { // WHEN - clock.setPlaybackRate(10.f); + clock.setPlaybackRate(10.5f); QCoreApplication::processEvents(); // THEN |