summaryrefslogtreecommitdiffstats
path: root/src/runtime/q3dsanimationmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/q3dsanimationmanager.cpp')
-rw-r--r--src/runtime/q3dsanimationmanager.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/runtime/q3dsanimationmanager.cpp b/src/runtime/q3dsanimationmanager.cpp
index 396e325..6a33cae 100644
--- a/src/runtime/q3dsanimationmanager.cpp
+++ b/src/runtime/q3dsanimationmanager.cpp
@@ -57,9 +57,10 @@ public:
: m_target(target),
m_animationManager(manager),
m_property(property),
- m_propertyName(propertyName),
m_type(type),
- m_changeFlag(target->mapChangeFlags({{propertyName}})) { }
+ m_changeFlag(target->mapChangeFlags({{propertyName}})),
+ m_propertyName(propertyName),
+ m_key(::qHash(Q3DSAnimationManager::AnimationValueChange{this}, uint(qGlobalQHashSeed()), true)) { }
void valueChanged(const QVariant &value) override;
@@ -67,24 +68,21 @@ private:
static QVariant stabilizeAnimatedValue(const QVariant &value, QVariant::Type type);
friend class Q3DSAnimationManager;
- friend uint qHash(const Q3DSAnimationManager::AnimationValueChange &, uint);
+ friend uint qHash(const Q3DSAnimationManager::AnimationValueChange &, uint, bool);
friend bool operator==(const Q3DSAnimationManager::AnimationValueChange &, const Q3DSAnimationManager::AnimationValueChange &);
Q3DSGraphObject *m_target;
Q3DSAnimationManager *m_animationManager;
QMetaProperty m_property;
- QString m_propertyName;
QVariant m_value;
QVariant::Type m_type;
int m_changeFlag;
- int m_key = -1;
+ const QString m_propertyName;
+ const uint m_key;
};
void Q3DSAnimationCallback::valueChanged(const QVariant &value)
{
- if (m_key < 0)
- m_key = int(::qHash(Q3DSAnimationManager::AnimationValueChange{this}, uint(qGlobalQHashSeed())));
-
// Do not directly change the value and trigger change notifications.
// Instead, queue up (and compress), and defer to applyChanges() which is
// invoked once per frame.
@@ -583,10 +581,10 @@ void Q3DSAnimationManager::queueChange(const AnimationValueChange &change)
m_changes.insert(change);
}
-uint qHash(const Q3DSAnimationManager::AnimationValueChange &key, uint seed)
+uint qHash(const Q3DSAnimationManager::AnimationValueChange &key, uint seed, bool init)
{
- return (key.cb->m_key < 0) ? ::qHash(QStringLiteral("%1%2").arg(key.cb->m_propertyName).arg(quintptr(key.cb->m_target)), seed)
- : uint(key.cb->m_key);
+ return init ? ::qHash(QStringLiteral("%1%2").arg(key.cb->m_propertyName).arg(quintptr(key.cb->m_target)), seed)
+ : uint(key.cb->m_key);
}
bool operator==(const Q3DSAnimationManager::AnimationValueChange &cl, const Q3DSAnimationManager::AnimationValueChange &cr)