QGraphicsItemAnimationPrivate::linearValueForStep(): pass vector by const-&

It's only read from.

Avoids detach attempts in the many uses of front()/back().

Change-Id: I0fd5df77a6d3a9a37872e0ce28f5a2354aa8f957
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
This commit is contained in:
Marc Mutz 2015-06-29 00:34:02 +02:00
parent dcd79eebdb
commit f049546d95

View File

@ -139,35 +139,35 @@ public:
QVector<Pair> xTranslation; QVector<Pair> xTranslation;
QVector<Pair> yTranslation; QVector<Pair> yTranslation;
qreal linearValueForStep(qreal step, QVector<Pair> *source, qreal defaultValue = 0); qreal linearValueForStep(qreal step, const QVector<Pair> &source, qreal defaultValue = 0);
void insertUniquePair(qreal step, qreal value, QVector<Pair> *binList, const char* method); void insertUniquePair(qreal step, qreal value, QVector<Pair> *binList, const char* method);
}; };
Q_DECLARE_TYPEINFO(QGraphicsItemAnimationPrivate::Pair, Q_PRIMITIVE_TYPE); Q_DECLARE_TYPEINFO(QGraphicsItemAnimationPrivate::Pair, Q_PRIMITIVE_TYPE);
qreal QGraphicsItemAnimationPrivate::linearValueForStep(qreal step, QVector<Pair> *source, qreal defaultValue) qreal QGraphicsItemAnimationPrivate::linearValueForStep(qreal step, const QVector<Pair> &source, qreal defaultValue)
{ {
if (source->isEmpty()) if (source.isEmpty())
return defaultValue; return defaultValue;
step = qMin<qreal>(qMax<qreal>(step, 0), 1); step = qMin<qreal>(qMax<qreal>(step, 0), 1);
if (step == 1) if (step == 1)
return source->last().value; return source.back().value;
qreal stepBefore = 0; qreal stepBefore = 0;
qreal stepAfter = 1; qreal stepAfter = 1;
qreal valueBefore = source->first().step == 0 ? source->first().value : defaultValue; qreal valueBefore = source.front().step == 0 ? source.front().value : defaultValue;
qreal valueAfter = source->last().value; qreal valueAfter = source.back().value;
// Find the closest step and value before the given step. // Find the closest step and value before the given step.
for (int i = 0; i < source->size() && step >= source->at(i).step; ++i) { for (int i = 0; i < source.size() && step >= source[i].step; ++i) {
stepBefore = source->at(i).step; stepBefore = source[i].step;
valueBefore = source->at(i).value; valueBefore = source[i].value;
} }
// Find the closest step and value after the given step. // Find the closest step and value after the given step.
for (int j = source->size() - 1; j >= 0 && step < source->at(j).step; --j) { for (int i = source.size() - 1; i >= 0 && step < source[i].step; --i) {
stepAfter = source->at(j).step; stepAfter = source[i].step;
valueAfter = source->at(j).value; valueAfter = source[i].value;
} }
// Do a simple linear interpolation. // Do a simple linear interpolation.
@ -263,8 +263,8 @@ void QGraphicsItemAnimation::setTimeLine(QTimeLine *timeLine)
QPointF QGraphicsItemAnimation::posAt(qreal step) const QPointF QGraphicsItemAnimation::posAt(qreal step) const
{ {
check_step_valid(step, "posAt"); check_step_valid(step, "posAt");
return QPointF(d->linearValueForStep(step, &d->xPosition, d->startPos.x()), return QPointF(d->linearValueForStep(step, d->xPosition, d->startPos.x()),
d->linearValueForStep(step, &d->yPosition, d->startPos.y())); d->linearValueForStep(step, d->yPosition, d->startPos.y()));
} }
/*! /*!
@ -323,7 +323,7 @@ QMatrix QGraphicsItemAnimation::matrixAt(qreal step) const
qreal QGraphicsItemAnimation::rotationAt(qreal step) const qreal QGraphicsItemAnimation::rotationAt(qreal step) const
{ {
check_step_valid(step, "rotationAt"); check_step_valid(step, "rotationAt");
return d->linearValueForStep(step, &d->rotation); return d->linearValueForStep(step, d->rotation);
} }
/*! /*!
@ -360,7 +360,7 @@ QList<QPair<qreal, qreal> > QGraphicsItemAnimation::rotationList() const
qreal QGraphicsItemAnimation::xTranslationAt(qreal step) const qreal QGraphicsItemAnimation::xTranslationAt(qreal step) const
{ {
check_step_valid(step, "xTranslationAt"); check_step_valid(step, "xTranslationAt");
return d->linearValueForStep(step, &d->xTranslation); return d->linearValueForStep(step, d->xTranslation);
} }
/*! /*!
@ -371,7 +371,7 @@ qreal QGraphicsItemAnimation::xTranslationAt(qreal step) const
qreal QGraphicsItemAnimation::yTranslationAt(qreal step) const qreal QGraphicsItemAnimation::yTranslationAt(qreal step) const
{ {
check_step_valid(step, "yTranslationAt"); check_step_valid(step, "yTranslationAt");
return d->linearValueForStep(step, &d->yTranslation); return d->linearValueForStep(step, d->yTranslation);
} }
/*! /*!
@ -411,7 +411,7 @@ qreal QGraphicsItemAnimation::verticalScaleAt(qreal step) const
{ {
check_step_valid(step, "verticalScaleAt"); check_step_valid(step, "verticalScaleAt");
return d->linearValueForStep(step, &d->verticalScale, 1); return d->linearValueForStep(step, d->verticalScale, 1);
} }
/*! /*!
@ -422,7 +422,7 @@ qreal QGraphicsItemAnimation::verticalScaleAt(qreal step) const
qreal QGraphicsItemAnimation::horizontalScaleAt(qreal step) const qreal QGraphicsItemAnimation::horizontalScaleAt(qreal step) const
{ {
check_step_valid(step, "horizontalScaleAt"); check_step_valid(step, "horizontalScaleAt");
return d->linearValueForStep(step, &d->horizontalScale, 1); return d->linearValueForStep(step, d->horizontalScale, 1);
} }
/*! /*!
@ -461,7 +461,7 @@ QList<QPair<qreal, QPointF> > QGraphicsItemAnimation::scaleList() const
qreal QGraphicsItemAnimation::verticalShearAt(qreal step) const qreal QGraphicsItemAnimation::verticalShearAt(qreal step) const
{ {
check_step_valid(step, "verticalShearAt"); check_step_valid(step, "verticalShearAt");
return d->linearValueForStep(step, &d->verticalShear, 0); return d->linearValueForStep(step, d->verticalShear, 0);
} }
/*! /*!
@ -472,7 +472,7 @@ qreal QGraphicsItemAnimation::verticalShearAt(qreal step) const
qreal QGraphicsItemAnimation::horizontalShearAt(qreal step) const qreal QGraphicsItemAnimation::horizontalShearAt(qreal step) const
{ {
check_step_valid(step, "horizontalShearAt"); check_step_valid(step, "horizontalShearAt");
return d->linearValueForStep(step, &d->horizontalShear, 0); return d->linearValueForStep(step, d->horizontalShear, 0);
} }
/*! /*!