mirror of https://github.com/qt/qt3d.git
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>
This commit is contained in:
parent
2dcc0f8fdd
commit
4392fa4df4
|
|
@ -4,6 +4,7 @@ doc/qt3d
|
|||
*~
|
||||
*.user
|
||||
*.user.*
|
||||
.dir-locals.el
|
||||
src/quick3d/qt3dquickversion.h
|
||||
src/threed/qt3dversion.h
|
||||
tmp
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue