diff options
Diffstat (limited to 'src/corelib/tools/qeasingcurve.cpp')
-rw-r--r-- | src/corelib/tools/qeasingcurve.cpp | 105 |
1 files changed, 43 insertions, 62 deletions
diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index a3dd4d9a60..e6fb531d7d 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -347,9 +347,7 @@ typedef QVector<TCBPoint> TCBPoints; class QEasingCurveFunction { public: - enum Type { In, Out, InOut, OutIn }; - - QEasingCurveFunction(QEasingCurveFunction::Type type = In, qreal period = 0.3, qreal amplitude = 1.0, + QEasingCurveFunction(QEasingCurve::Type type, qreal period = 0.3, qreal amplitude = 1.0, qreal overshoot = 1.70158) : _t(type), _p(period), _a(amplitude), _o(overshoot) { } @@ -358,7 +356,7 @@ public: virtual QEasingCurveFunction *copy() const; bool operator==(const QEasingCurveFunction &other) const; - Type _t; + QEasingCurve::Type _t; qreal _p; qreal _a; qreal _o; @@ -367,9 +365,12 @@ public: }; +static QEasingCurve::EasingFunction curveToFunc(QEasingCurve::Type curve); + qreal QEasingCurveFunction::value(qreal t) { - return t; + QEasingCurve::EasingFunction func = curveToFunc(_t); + return func(t); } QEasingCurveFunction *QEasingCurveFunction::copy() const @@ -430,8 +431,8 @@ struct BezierEase : public QEasingCurveFunction bool _init; bool _valid; - BezierEase() - : QEasingCurveFunction(InOut), _curves(10), _intervals(10), _init(false), _valid(false) + BezierEase(QEasingCurve::Type type = QEasingCurve::BezierSpline) + : QEasingCurveFunction(type), _curves(10), _intervals(10), _init(false), _valid(false) { } void init() @@ -488,7 +489,7 @@ struct BezierEase : public QEasingCurveFunction } } - QEasingCurveFunction *copy() const + QEasingCurveFunction *copy() const Q_DECL_OVERRIDE { BezierEase *rv = new BezierEase(); rv->_t = _t; @@ -524,7 +525,7 @@ struct BezierEase : public QEasingCurveFunction return newT; } - qreal value(qreal x) + qreal value(qreal x) Q_DECL_OVERRIDE { Q_ASSERT(_bezierCurves.count() % 3 == 0); @@ -814,7 +815,11 @@ struct BezierEase : public QEasingCurveFunction struct TCBEase : public BezierEase { - qreal value(qreal x) + TCBEase() + : BezierEase(QEasingCurve::TCBSpline) + { } + + qreal value(qreal x) Q_DECL_OVERRIDE { Q_ASSERT(_bezierCurves.count() % 3 == 0); @@ -830,11 +835,11 @@ struct TCBEase : public BezierEase struct ElasticEase : public QEasingCurveFunction { - ElasticEase(Type type) + ElasticEase(QEasingCurve::Type type) : QEasingCurveFunction(type, qreal(0.3), qreal(1.0)) { } - QEasingCurveFunction *copy() const + QEasingCurveFunction *copy() const Q_DECL_OVERRIDE { ElasticEase *rv = new ElasticEase(_t); rv->_p = _p; @@ -844,18 +849,18 @@ struct ElasticEase : public QEasingCurveFunction return rv; } - qreal value(qreal t) + qreal value(qreal t) Q_DECL_OVERRIDE { qreal p = (_p < 0) ? qreal(0.3) : _p; qreal a = (_a < 0) ? qreal(1.0) : _a; switch(_t) { - case In: + case QEasingCurve::InElastic: return easeInElastic(t, a, p); - case Out: + case QEasingCurve::OutElastic: return easeOutElastic(t, a, p); - case InOut: + case QEasingCurve::InOutElastic: return easeInOutElastic(t, a, p); - case OutIn: + case QEasingCurve::OutInElastic: return easeOutInElastic(t, a, p); default: return t; @@ -865,11 +870,11 @@ struct ElasticEase : public QEasingCurveFunction struct BounceEase : public QEasingCurveFunction { - BounceEase(Type type) + BounceEase(QEasingCurve::Type type) : QEasingCurveFunction(type, qreal(0.3), qreal(1.0)) { } - QEasingCurveFunction *copy() const + QEasingCurveFunction *copy() const Q_DECL_OVERRIDE { BounceEase *rv = new BounceEase(_t); rv->_a = _a; @@ -878,17 +883,17 @@ struct BounceEase : public QEasingCurveFunction return rv; } - qreal value(qreal t) + qreal value(qreal t) Q_DECL_OVERRIDE { qreal a = (_a < 0) ? qreal(1.0) : _a; switch(_t) { - case In: + case QEasingCurve::InBounce: return easeInBounce(t, a); - case Out: + case QEasingCurve::OutBounce: return easeOutBounce(t, a); - case InOut: + case QEasingCurve::InOutBounce: return easeInOutBounce(t, a); - case OutIn: + case QEasingCurve::OutInBounce: return easeOutInBounce(t, a); default: return t; @@ -898,11 +903,11 @@ struct BounceEase : public QEasingCurveFunction struct BackEase : public QEasingCurveFunction { - BackEase(Type type) + BackEase(QEasingCurve::Type type) : QEasingCurveFunction(type, qreal(0.3), qreal(1.0), qreal(1.70158)) { } - QEasingCurveFunction *copy() const + QEasingCurveFunction *copy() const Q_DECL_OVERRIDE { BackEase *rv = new BackEase(_t); rv->_o = _o; @@ -911,17 +916,17 @@ struct BackEase : public QEasingCurveFunction return rv; } - qreal value(qreal t) + qreal value(qreal t) Q_DECL_OVERRIDE { qreal o = (_o < 0) ? qreal(1.70158) : _o; switch(_t) { - case In: + case QEasingCurve::InBack: return easeInBack(t, o); - case Out: + case QEasingCurve::OutBack: return easeOutBack(t, o); - case InOut: + case QEasingCurve::InOutBack: return easeInOutBack(t, o); - case OutIn: + case QEasingCurve::OutInBack: return easeOutInBack(t, o); default: return t; @@ -1006,55 +1011,31 @@ static QEasingCurve::EasingFunction curveToFunc(QEasingCurve::Type curve) static QEasingCurveFunction *curveToFunctionObject(QEasingCurve::Type type) { - QEasingCurveFunction *curveFunc = 0; switch(type) { case QEasingCurve::InElastic: - curveFunc = new ElasticEase(ElasticEase::In); - break; case QEasingCurve::OutElastic: - curveFunc = new ElasticEase(ElasticEase::Out); - break; case QEasingCurve::InOutElastic: - curveFunc = new ElasticEase(ElasticEase::InOut); - break; case QEasingCurve::OutInElastic: - curveFunc = new ElasticEase(ElasticEase::OutIn); - break; + return new ElasticEase(type); case QEasingCurve::OutBounce: - curveFunc = new BounceEase(BounceEase::Out); - break; case QEasingCurve::InBounce: - curveFunc = new BounceEase(BounceEase::In); - break; case QEasingCurve::OutInBounce: - curveFunc = new BounceEase(BounceEase::OutIn); - break; case QEasingCurve::InOutBounce: - curveFunc = new BounceEase(BounceEase::InOut); - break; + return new BounceEase(type); case QEasingCurve::InBack: - curveFunc = new BackEase(BackEase::In); - break; case QEasingCurve::OutBack: - curveFunc = new BackEase(BackEase::Out); - break; case QEasingCurve::InOutBack: - curveFunc = new BackEase(BackEase::InOut); - break; case QEasingCurve::OutInBack: - curveFunc = new BackEase(BackEase::OutIn); - break; + return new BackEase(type); case QEasingCurve::BezierSpline: - curveFunc = new BezierEase(); - break; + return new BezierEase; case QEasingCurve::TCBSpline: - curveFunc = new TCBEase(); - break; + return new TCBEase; default: - curveFunc = new QEasingCurveFunction(QEasingCurveFunction::In, qreal(0.3), qreal(1.0), qreal(1.70158)); + return new QEasingCurveFunction(type, qreal(0.3), qreal(1.0), qreal(1.70158)); } - return curveFunc; + return 0; } /*! |