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 QtDeclarative 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 "qdeclarativepathinterpolator_p.h"
44 #include "qdeclarativepath_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/declarative/pathinterpolator.qml 0
61 QDeclarativePathInterpolator::QDeclarativePathInterpolator(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 QDeclarativePath *QDeclarativePathInterpolator::path() const
77 void QDeclarativePathInterpolator::setPath(QDeclarativePath *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 QDeclarativePathInterpolator::progress() const
103 void QDeclarativePathInterpolator::setProgress(qreal progress)
105 if (progress == _progress)
107 _progress = progress;
108 emit progressChanged();
113 \qmlproperty real QtQuick2::PathInterpolator::x
114 \qmlproperty real QtQuick2::PathInterpolator::y
116 These properties hold the position of the path at \l progress.
118 qreal QDeclarativePathInterpolator::x() const
123 qreal QDeclarativePathInterpolator::y() const
129 \qmlproperty real QtQuick2::PathInterpolator::angle
131 This property holds the angle of the path tangent at \l progress.
133 Angles are reported clockwise, with zero degrees at the 3 o'clock position.
135 qreal QDeclarativePathInterpolator::angle() const
140 void QDeclarativePathInterpolator::_q_pathUpdated()
146 const QPointF pt = _path->sequentialPointAt(_progress, &angle);
158 //convert to clockwise
159 angle = qreal(360) - angle;
160 if (qFuzzyCompare(angle, qreal(360)))
163 if (angle != _angle) {