1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the QtQml module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include "qquickpathinterpolator_p.h"
44 #include "qquickpath_p.h"
49 \qmlclass PathInterpolator QQuickPathInterpolator
50 \inqmlmodule QtQuick 2
51 \brief The PathInterpolator element provides a way to manually animate along a path.
53 PathInterpolator provides \c x, \c y, and \c angle information for a particular \c progress
56 In the following example, we animate a green rectangle along a bezier path.
58 \snippet doc/src/snippets/qml/pathinterpolator.qml 0
61 QQuickPathInterpolator::QQuickPathInterpolator(QObject *parent) :
62 QObject(parent), _path(0), _x(0), _y(0), _angle(0), _progress(0)
67 \qmlproperty Path QtQuick2::PathInterpolator::path
68 This property holds the path to interpolate.
70 For more information on defining a path see the \l Path documentation.
72 QQuickPath *QQuickPathInterpolator::path() const
77 void QQuickPathInterpolator::setPath(QQuickPath *path)
82 disconnect(_path, SIGNAL(changed()), this, SLOT(_q_pathUpdated()));
84 connect(_path, SIGNAL(changed()), this, SLOT(_q_pathUpdated()));
89 \qmlproperty real QtQuick2::PathInterpolator::progress
90 This property holds the current progress along the path.
92 Typical usage of PathInterpolator is to set the progress
93 (often via a NumberAnimation), and read the corresponding
94 values for x, y, and angle (often via bindings to these values).
96 Progress ranges from 0.0 to 1.0.
98 qreal QQuickPathInterpolator::progress() const
103 void QQuickPathInterpolator::setProgress(qreal progress)
105 progress = qMin(qMax(progress, (qreal)0.0), (qreal)1.0);
107 if (progress == _progress)
109 _progress = progress;
110 emit progressChanged();
115 \qmlproperty real QtQuick2::PathInterpolator::x
116 \qmlproperty real QtQuick2::PathInterpolator::y
118 These properties hold the position of the path at \l progress.
120 qreal QQuickPathInterpolator::x() const
125 qreal QQuickPathInterpolator::y() const
131 \qmlproperty real QtQuick2::PathInterpolator::angle
133 This property holds the angle of the path tangent at \l progress.
135 Angles are reported clockwise, with zero degrees at the 3 o'clock position.
137 qreal QQuickPathInterpolator::angle() const
142 void QQuickPathInterpolator::_q_pathUpdated()
148 const QPointF pt = _path->sequentialPointAt(_progress, &angle);
160 //convert to clockwise
161 angle = qreal(360) - angle;
162 if (qFuzzyCompare(angle, qreal(360)))
165 if (angle != _angle) {