void EnvelopeGraphicsItem::onChangedParameterValue(int index) { // update the interpolator if the slope or sustain index have been changed: if (index <= 1) { updateInterpolator(); } }
void QVariantAnimationPrivate::convertValues(int t) { //this ensures that all the keyValues are of type t for (int i = 0; i < keyValues.count(); ++i) { QVariantAnimation::KeyValue &pair = keyValues[i]; pair.second.convert(static_cast<QVariant::Type>(t)); } //we also need update to the current interval if needed currentInterval.start.second.convert(static_cast<QVariant::Type>(t)); currentInterval.end.second.convert(static_cast<QVariant::Type>(t)); //... and the interpolator updateInterpolator(); }
/*! \internal The goal of this function is to update the currentInterval member. As a consequence, we also need to update the currentValue. Set \a force to true to always recalculate the interval. */ 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) return; const qreal endProgress = (direction == QAbstractAnimation::Forward) ? qreal(1) : qreal(0); const qreal progress = easing.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) || (currentInterval.end.first < 1 && progress > currentInterval.end.first)) { //let's update currentInterval QVariantAnimation::KeyValues::const_iterator it = qLowerBound(keyValues.constBegin(), keyValues.constEnd(), qMakePair(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) { currentInterval.start = *it; currentInterval.end = *(it+1); } else { currentInterval.start = qMakePair(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) { //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); } } else { currentInterval.start = *(it-1); currentInterval.end = *it; } // update all the values of the currentInterval updateInterpolator(); } setCurrentValueForProgress(progress); }