aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/declarative/items/qquickcanvas.h3
-rw-r--r--src/declarative/qml/qdeclarativevaluetype.cpp46
-rw-r--r--src/declarative/qml/qdeclarativevaluetype_p.h7
3 files changed, 54 insertions, 2 deletions
diff --git a/src/declarative/items/qquickcanvas.h b/src/declarative/items/qquickcanvas.h
index a5a975785d..bf8693a354 100644
--- a/src/declarative/items/qquickcanvas.h
+++ b/src/declarative/items/qquickcanvas.h
@@ -52,9 +52,10 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
-class QQuickItem;
class QSGEngine;
+class QQuickItem;
class QSGTexture;
+class QInputMethodEvent;
class QQuickCanvasPrivate;
class QOpenGLFramebufferObject;
class QDeclarativeIncubationController;
diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp
index 9a941e63f9..ffd0041f7e 100644
--- a/src/declarative/qml/qdeclarativevaluetype.cpp
+++ b/src/declarative/qml/qdeclarativevaluetype.cpp
@@ -958,6 +958,52 @@ void QDeclarativeEasingValueType::setPeriod(qreal period)
easing.setPeriod(period);
}
+void QDeclarativeEasingValueType::setBezierCurve(const QVariantList &customCurveVariant)
+{
+ if (customCurveVariant.isEmpty())
+ return;
+
+ QVariantList variantList = customCurveVariant;
+ if ((variantList.count() % 6) == 0) {
+ bool allRealsOk = true;
+ QList<qreal> reals;
+ for (int i = 0; i < variantList.count(); 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);
+ easing = newEasingCurve;
+ }
+ }
+ }
+}
+
+QVariantList QDeclarativeEasingValueType::bezierCurve() const
+{
+ QVariantList rv;
+ QList<QPointF> points = easing.cubicBezierSpline();
+ for (int ii = 0; ii < points.count(); ++ii)
+ rv << QVariant(points.at(ii).x()) << QVariant(points.at(ii).y());
+ return rv;
+}
+
QDeclarativeFontValueType::QDeclarativeFontValueType(QObject *parent)
: QDeclarativeValueType(parent), pixelSizeSet(false), pointSizeSet(false)
{
diff --git a/src/declarative/qml/qdeclarativevaluetype_p.h b/src/declarative/qml/qdeclarativevaluetype_p.h
index 1feab4147b..9f00d97800 100644
--- a/src/declarative/qml/qdeclarativevaluetype_p.h
+++ b/src/declarative/qml/qdeclarativevaluetype_p.h
@@ -456,6 +456,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeEasingValueType : public QDeclara
Q_PROPERTY(qreal amplitude READ amplitude WRITE setAmplitude)
Q_PROPERTY(qreal overshoot READ overshoot WRITE setOvershoot)
Q_PROPERTY(qreal period READ period WRITE setPeriod)
+ Q_PROPERTY(QVariantList bezierCurve READ bezierCurve WRITE setBezierCurve)
public:
enum Type {
Linear = QEasingCurve::Linear,
@@ -480,7 +481,8 @@ public:
InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce,
InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce,
InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve,
- SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve
+ SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve,
+ Bezier = QEasingCurve::BezierSpline
};
QDeclarativeEasingValueType(QObject *parent = 0);
@@ -500,6 +502,9 @@ public:
void setAmplitude(qreal);
void setOvershoot(qreal);
void setPeriod(qreal);
+ void setBezierCurve(const QVariantList &);
+ QVariantList bezierCurve() const;
+
private:
QEasingCurve easing;