Add basic custom easing curve docs and test
authorMartin Jones <martin.jones@nokia.com>
Thu, 8 Dec 2011 00:36:44 +0000 (10:36 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 13 Dec 2011 01:40:04 +0000 (02:40 +0100)
Change-Id: Id38434cb71417276635b501d13d0145759de9864
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>

src/quick/util/qdeclarativeanimation.cpp
tests/auto/qtquick2/qdeclarativeanimations/tst_qdeclarativeanimations.cpp

index 8c21d11..0c31806 100644 (file)
@@ -1916,6 +1916,7 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t)
     \qmlproperty real QtQuick2::PropertyAnimation::easing.amplitude
     \qmlproperty real QtQuick2::PropertyAnimation::easing.overshoot
     \qmlproperty real QtQuick2::PropertyAnimation::easing.period
+    \qmlproperty list<real> QtQuick2::PropertyAnimation::easing.bezierCurve
     \brief the easing curve used for the animation.
 
     To specify an easing curve you need to specify at least the type. For some curves you can also specify
@@ -2095,6 +2096,10 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t)
         \o \c Easing.OutInBounce
         \o Easing curve for a bounce (exponentially decaying parabolic bounce) function easing out/in: deceleration until halfway, then acceleration.
         \o \inlineimage qeasingcurve-outinbounce.png
+    \row
+        \o \c Easing.Bezier
+        \o Custom easing curve defined by the easing.bezierCurve property.
+        \o
     \endtable
 
     \c easing.amplitude is only applicable for bounce and elastic curves (curves of type
@@ -2107,6 +2112,10 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t)
     \c easing.period is only applicable if easing.type is: \c Easing.InElastic, \c Easing.OutElastic,
     \c Easing.InOutElastic or \c Easing.OutInElastic.
 
+    \c easing.bezierCurve is only applicable if easing.type is: \c Easing.Bezier.  This property is a list<real> containing
+    groups of three points defining a curve from 0,0 to 1,1 - control1, control2,
+    end point: [cx1, cy1, cx2, cy2, endx, endy, ...].  The last point must be 1,1.
+
     See the \l {declarative/animation/easing}{easing} example for a demonstration of
     the different easing settings.
 */
index ca32926..2a2055e 100644 (file)
@@ -938,6 +938,22 @@ void tst_qdeclarativeanimations::easingProperties()
         QCOMPARE(animObject->easing().type(), QEasingCurve::InOutBack);
         QCOMPARE(animObject->easing().overshoot(), 2.0);
     }
+
+    {
+        QDeclarativeEngine engine;
+        QString componentStr = "import QtQuick 2.0\nPropertyAnimation { easing.type: \"Bezier\"; easing.bezierCurve: [0.5, 0.2, 0.13, 0.65, 1.0, 1.0] }";
+        QDeclarativeComponent animationComponent(&engine);
+        animationComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+        QDeclarativePropertyAnimation *animObject = qobject_cast<QDeclarativePropertyAnimation*>(animationComponent.create());
+
+        QVERIFY(animObject != 0);
+        QCOMPARE(animObject->easing().type(), QEasingCurve::BezierSpline);
+        QList<QPointF> points = animObject->easing().cubicBezierSpline();
+        QCOMPARE(points.count(), 3);
+        QCOMPARE(points.at(0), QPointF(0.5, 0.2));
+        QCOMPARE(points.at(1), QPointF(0.13, 0.65));
+        QCOMPARE(points.at(2), QPointF(1.0, 1.0));
+    }
 }
 
 void tst_qdeclarativeanimations::rotation()