diff options
Diffstat (limited to 'src/corelib/animation/qvariantanimation.cpp')
-rw-r--r-- | src/corelib/animation/qvariantanimation.cpp | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp index cd9a01a138..b4d47aae8f 100644 --- a/src/corelib/animation/qvariantanimation.cpp +++ b/src/corelib/animation/qvariantanimation.cpp @@ -156,7 +156,7 @@ void QVariantAnimationPrivate::convertValues(int t) { auto type = QMetaType(t); //this ensures that all the keyValues are of type t - for (int i = 0; i < keyValues.count(); ++i) { + for (int i = 0; i < keyValues.size(); ++i) { QVariantAnimation::KeyValue &pair = keyValues[i]; pair.second.convert(type); } @@ -190,7 +190,7 @@ void QVariantAnimationPrivate::updateInterpolator() void QVariantAnimationPrivate::recalculateCurrentInterval(bool force/*=false*/) { // can't interpolate if we don't have at least 2 values - if ((keyValues.count() + (defaultStartEndValue.isValid() ? 1 : 0)) < 2) + if ((keyValues.size() + (defaultStartEndValue.isValid() ? 1 : 0)) < 2) return; const qreal endProgress = (direction == QAbstractAnimation::Forward) ? qreal(1) : qreal(0); @@ -203,27 +203,27 @@ void QVariantAnimationPrivate::recalculateCurrentInterval(bool force/*=false*/) //let's update currentInterval QVariantAnimation::KeyValues::const_iterator it = std::lower_bound(keyValues.constBegin(), keyValues.constEnd(), - qMakePair(progress, QVariant()), + std::pair{progress, QVariant{}}, animationValueLessThan); if (it == keyValues.constBegin()) { //the item pointed to by it is the start element in the range - if (it->first == 0 && keyValues.count() > 1) { + if (it->first == 0 && keyValues.size() > 1) { currentInterval.start = *it; currentInterval.end = *(it+1); } else { - currentInterval.start = qMakePair(qreal(0), defaultStartEndValue); + currentInterval.start = {qreal(0), defaultStartEndValue}; currentInterval.end = *it; } } else if (it == keyValues.constEnd()) { --it; //position the iterator on the last item - if (it->first == 1 && keyValues.count() > 1) { + if (it->first == 1 && keyValues.size() > 1) { //we have an end value (item with progress = 1) currentInterval.start = *(it-1); currentInterval.end = *it; } else { //we use the default end value here currentInterval.start = *it; - currentInterval.end = qMakePair(qreal(1), defaultStartEndValue); + currentInterval.end = {qreal(1), defaultStartEndValue}; } } else { currentInterval.start = *(it-1); @@ -264,9 +264,10 @@ void QVariantAnimationPrivate::setCurrentValueForProgress(const qreal progress) QVariant QVariantAnimationPrivate::valueAt(qreal step) const { - QVariantAnimation::KeyValues::const_iterator result = - std::lower_bound(keyValues.constBegin(), keyValues.constEnd(), qMakePair(step, QVariant()), animationValueLessThan); - if (result != keyValues.constEnd() && !animationValueLessThan(qMakePair(step, QVariant()), *result)) + const auto sought = std::pair{step, QVariant()}; + const auto result = std::lower_bound(keyValues.cbegin(), keyValues.cend(), sought, + animationValueLessThan); + if (result != keyValues.cend() && !animationValueLessThan(sought, *result)) return result->second; return QVariant(); @@ -353,8 +354,9 @@ QEasingCurve QVariantAnimation::easingCurve() const void QVariantAnimation::setEasingCurve(const QEasingCurve &easing) { Q_D(QVariantAnimation); - const bool valueChanged = easing != d->easing; - d->easing = easing; + d->easing.removeBindingUnlessInWrapper(); + const bool valueChanged = easing != d->easing.valueBypassingBindings(); + d->easing.setValueBypassingBindings(easing); d->recalculateCurrentInterval(); if (valueChanged) d->easing.notify(); @@ -405,7 +407,7 @@ void QVariantAnimation::registerInterpolator(QVariantAnimation::Interpolator fun // to continue causes the app to crash on exit with a SEGV if (interpolators) { const auto locker = qt_scoped_lock(registeredInterpolatorsMutex); - if (interpolationType >= interpolators->count()) + if (interpolationType >= interpolators->size()) interpolators->resize(interpolationType + 1); interpolators->replace(interpolationType, func); } @@ -423,7 +425,7 @@ QVariantAnimation::Interpolator QVariantAnimationPrivate::getInterpolator(int in QInterpolatorVector *interpolators = registeredInterpolators(); const auto locker = qt_scoped_lock(registeredInterpolatorsMutex); QVariantAnimation::Interpolator ret = nullptr; - if (interpolationType < interpolators->count()) { + if (interpolationType < interpolators->size()) { ret = interpolators->at(interpolationType); if (ret) return ret; } @@ -482,13 +484,12 @@ void QVariantAnimation::setDuration(int msecs) qWarning("QVariantAnimation::setDuration: cannot set a negative duration"); return; } - if (d->duration == msecs) { - d->duration.removeBindingUnlessInWrapper(); - return; + d->duration.removeBindingUnlessInWrapper(); + if (d->duration.valueBypassingBindings() != msecs) { + d->duration.setValueBypassingBindings(msecs); + d->recalculateCurrentInterval(); + d->duration.notify(); } - d->duration = msecs; - d->recalculateCurrentInterval(); - d->duration.notify(); } QBindable<int> QVariantAnimation::bindableDuration() @@ -552,7 +553,7 @@ QVariant QVariantAnimation::keyValueAt(qreal step) const /*! \typedef QVariantAnimation::KeyValue - This is a typedef for QPair<qreal, QVariant>. + This is a typedef for std::pair<qreal, QVariant>. */ /*! \typedef QVariantAnimation::KeyValues |