diff options
Diffstat (limited to 'src/qml/qml/qqmlvaluetype.cpp')
-rw-r--r-- | src/qml/qml/qqmlvaluetype.cpp | 60 |
1 files changed, 27 insertions, 33 deletions
diff --git a/src/qml/qml/qqmlvaluetype.cpp b/src/qml/qml/qqmlvaluetype.cpp index 270414a676..2b21591017 100644 --- a/src/qml/qml/qqmlvaluetype.cpp +++ b/src/qml/qml/qqmlvaluetype.cpp @@ -67,8 +67,7 @@ struct QQmlValueTypeFactoryImpl QQmlValueTypeFactoryImpl::QQmlValueTypeFactoryImpl() { - for (unsigned int ii = 0; ii < QVariant::UserType; ++ii) - valueTypes[ii] = nullptr; + std::fill_n(valueTypes, int(QVariant::UserType), nullptr); // See types wrapped in qqmlmodelindexvaluetype_p.h qRegisterMetaType<QItemSelectionRange>(); @@ -521,38 +520,33 @@ void QQmlEasingValueType::setBezierCurve(const QVariantList &customCurveVariant) if (customCurveVariant.isEmpty()) return; - QVariantList variantList = customCurveVariant; - if ((variantList.count() % 6) == 0) { - bool allRealsOk = true; - QVector<qreal> reals; - const int variantListCount = variantList.count(); - reals.reserve(variantListCount); - for (int i = 0; i < variantListCount; i++) { - bool ok; - const qreal real = variantList.at(i).toReal(&ok); - reals.append(real); - if (!ok) - allRealsOk = false; - } - if (allRealsOk) { - QEasingCurve newEasingCurve(QEasingCurve::BezierSpline); - for (int i = 0; i < reals.count() / 6; i++) { - const qreal c1x = reals.at(i * 6); - const qreal c1y = reals.at(i * 6 + 1); - const qreal c2x = reals.at(i * 6 + 2); - const qreal c2y = reals.at(i * 6 + 3); - const qreal c3x = reals.at(i * 6 + 4); - const qreal c3y = reals.at(i * 6 + 5); - - const QPointF c1(c1x, c1y); - const QPointF c2(c2x, c2y); - const QPointF c3(c3x, c3y); - - newEasingCurve.addCubicBezierSegment(c1, c2, c3); - v = newEasingCurve; - } - } + if ((customCurveVariant.count() % 6) != 0) + return; + + auto convert = [](const QVariant &v, qreal &r) { + bool ok; + r = v.toReal(&ok); + return ok; + }; + + QEasingCurve newEasingCurve(QEasingCurve::BezierSpline); + for (int i = 0, ei = customCurveVariant.size(); i < ei; i += 6) { + qreal c1x, c1y, c2x, c2y, c3x, c3y; + if (!convert(customCurveVariant.at(i ), c1x)) return; + if (!convert(customCurveVariant.at(i + 1), c1y)) return; + if (!convert(customCurveVariant.at(i + 2), c2x)) return; + if (!convert(customCurveVariant.at(i + 3), c2y)) return; + if (!convert(customCurveVariant.at(i + 4), c3x)) return; + if (!convert(customCurveVariant.at(i + 5), c3y)) return; + + const QPointF c1(c1x, c1y); + const QPointF c2(c2x, c2y); + const QPointF c3(c3x, c3y); + + newEasingCurve.addCubicBezierSegment(c1, c2, c3); } + + v = newEasingCurve; } QVariantList QQmlEasingValueType::bezierCurve() const |