summaryrefslogtreecommitdiffstats
path: root/src/corelib/animation
diff options
context:
space:
mode:
authorSona Kurazyan <sona.kurazyan@qt.io>2020-12-11 16:06:56 +0100
committerSona Kurazyan <sona.kurazyan@qt.io>2021-04-30 18:59:50 +0200
commit7a1fdcedfce0a67345dc74cd77be4a8ecf0cbc1e (patch)
tree658e46a7599def0162c9165b8bbce36c3f461cbb /src/corelib/animation
parent0d76a5cd2cdc37f9fb4cbd62af4ab6102a0acd7d (diff)
Port QVariantAnimation to the new property system
Skipped startValue/endValue properties, since they are computed and writable, which is not supported at the moment. Skipped currentValue, since its setter might be called inside the getter, which is not recommended. Task-number: QTBUG-85520 Change-Id: I1f872b4fcc7227ed91b6915891bbc66019151826 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Andreas Buhr <andreas.buhr@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/corelib/animation')
-rw-r--r--src/corelib/animation/qvariantanimation.cpp23
-rw-r--r--src/corelib/animation/qvariantanimation.h7
-rw-r--r--src/corelib/animation/qvariantanimation_p.h11
3 files changed, 35 insertions, 6 deletions
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp
index efe1675fe5..dec81abd8b 100644
--- a/src/corelib/animation/qvariantanimation.cpp
+++ b/src/corelib/animation/qvariantanimation.cpp
@@ -230,7 +230,8 @@ void QVariantAnimationPrivate::recalculateCurrentInterval(bool force/*=false*/)
return;
const qreal endProgress = (direction == QAbstractAnimation::Forward) ? qreal(1) : qreal(0);
- const qreal progress = easing.valueForProgress(((duration == 0) ? endProgress : qreal(currentTime) / qreal(duration)));
+ const qreal progress = easing.value().valueForProgress(
+ duration == 0 ? endProgress : qreal(currentTime) / qreal(duration));
//0 and 1 are still the boundaries
if (force || (currentInterval.start.first > 0 && progress < currentInterval.start.first)
@@ -386,8 +387,17 @@ QEasingCurve QVariantAnimation::easingCurve() const
void QVariantAnimation::setEasingCurve(const QEasingCurve &easing)
{
Q_D(QVariantAnimation);
+ const bool valueChanged = easing != d->easing;
d->easing = easing;
d->recalculateCurrentInterval();
+ if (valueChanged)
+ d->easing.notify();
+}
+
+QBindable<QEasingCurve> QVariantAnimation::bindableEasingCurve()
+{
+ Q_D(QVariantAnimation);
+ return &d->easing;
}
typedef QList<QVariantAnimation::Interpolator> QInterpolatorVector;
@@ -506,10 +516,19 @@ void QVariantAnimation::setDuration(int msecs)
qWarning("QVariantAnimation::setDuration: cannot set a negative duration");
return;
}
- if (d->duration == msecs)
+ if (d->duration == msecs) {
+ d->duration.removeBindingUnlessInWrapper();
return;
+ }
d->duration = msecs;
d->recalculateCurrentInterval();
+ d->duration.notify();
+}
+
+QBindable<int> QVariantAnimation::bindableDuration()
+{
+ Q_D(QVariantAnimation);
+ return &d->duration;
}
/*!
diff --git a/src/corelib/animation/qvariantanimation.h b/src/corelib/animation/qvariantanimation.h
index f1721b8a65..a639a0b1f3 100644
--- a/src/corelib/animation/qvariantanimation.h
+++ b/src/corelib/animation/qvariantanimation.h
@@ -57,8 +57,9 @@ class Q_CORE_EXPORT QVariantAnimation : public QAbstractAnimation
Q_PROPERTY(QVariant startValue READ startValue WRITE setStartValue)
Q_PROPERTY(QVariant endValue READ endValue WRITE setEndValue)
Q_PROPERTY(QVariant currentValue READ currentValue NOTIFY valueChanged)
- Q_PROPERTY(int duration READ duration WRITE setDuration)
- Q_PROPERTY(QEasingCurve easingCurve READ easingCurve WRITE setEasingCurve)
+ Q_PROPERTY(int duration READ duration WRITE setDuration BINDABLE bindableDuration)
+ Q_PROPERTY(QEasingCurve easingCurve READ easingCurve WRITE setEasingCurve
+ BINDABLE bindableEasingCurve)
public:
typedef QPair<qreal, QVariant> KeyValue;
@@ -83,9 +84,11 @@ public:
int duration() const override;
void setDuration(int msecs);
+ QBindable<int> bindableDuration();
QEasingCurve easingCurve() const;
void setEasingCurve(const QEasingCurve &easing);
+ QBindable<QEasingCurve> bindableEasingCurve();
typedef QVariant (*Interpolator)(const void *from, const void *to, qreal progress);
diff --git a/src/corelib/animation/qvariantanimation_p.h b/src/corelib/animation/qvariantanimation_p.h
index 3425777ba5..a5013d97ad 100644
--- a/src/corelib/animation/qvariantanimation_p.h
+++ b/src/corelib/animation/qvariantanimation_p.h
@@ -56,6 +56,7 @@
#include <QtCore/qmetaobject.h>
#include "private/qabstractanimation_p.h"
+#include "private/qproperty_p.h"
#include <type_traits>
@@ -87,8 +88,14 @@ public:
QVariantAnimation::KeyValue start, end;
} currentInterval;
- QEasingCurve easing;
- int duration;
+ void setEasingCurve(const QEasingCurve &easing) { q_func()->setEasingCurve(easing); }
+ Q_OBJECT_COMPAT_PROPERTY(QVariantAnimationPrivate, QEasingCurve, easing,
+ &QVariantAnimationPrivate::setEasingCurve)
+
+ void setDuration(int msecs) { q_func()->setDuration(msecs); }
+ Q_OBJECT_COMPAT_PROPERTY(QVariantAnimationPrivate, int, duration,
+ &QVariantAnimationPrivate::setDuration)
+
QVariantAnimation::KeyValues keyValues;
QVariantAnimation::Interpolator interpolator;