summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChip Collier <gregory.collier@kdab.com>2017-07-24 17:06:44 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-08-02 14:34:52 +0000
commit4392fa4df4a8f4623dd3ff881f2dd03c94b50c30 (patch)
tree7435dcc724b6c93c5cb0524cfce541e83c480c51
parent2dcc0f8fdd118acdb00b3958b6c230415fd28ca5 (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--.gitignore1
-rw-r--r--src/animation/backend/clock.cpp2
-rw-r--r--src/animation/backend/clock_p.h10
-rw-r--r--src/animation/frontend/qclock.cpp30
-rw-r--r--src/animation/frontend/qclock.h9
-rw-r--r--src/animation/frontend/qclock_p.h6
-rw-r--r--tests/auto/animation/clock/tst_clock.cpp8
-rw-r--r--tests/auto/animation/qclock/tst_qclock.cpp12
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