1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtCore module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QTIMELINE_H
41#define QTIMELINE_H
42
43#include <QtCore/qeasingcurve.h>
44#include <QtCore/qobject.h>
45
46QT_BEGIN_NAMESPACE
47
48
49class QTimeLinePrivate;
50class Q_CORE_EXPORT QTimeLine : public QObject
51{
52 Q_OBJECT
53 Q_PROPERTY(int duration READ duration WRITE setDuration)
54 Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval)
55 Q_PROPERTY(int currentTime READ currentTime WRITE setCurrentTime)
56 Q_PROPERTY(Direction direction READ direction WRITE setDirection)
57 Q_PROPERTY(int loopCount READ loopCount WRITE setLoopCount)
58 Q_PROPERTY(CurveShape curveShape READ curveShape WRITE setCurveShape)
59 Q_PROPERTY(QEasingCurve easingCurve READ easingCurve WRITE setEasingCurve)
60public:
61 enum State {
62 NotRunning,
63 Paused,
64 Running
65 };
66 enum Direction {
67 Forward,
68 Backward
69 };
70 enum CurveShape {
71 EaseInCurve,
72 EaseOutCurve,
73 EaseInOutCurve,
74 LinearCurve,
75 SineCurve,
76 CosineCurve
77 };
78
79 explicit QTimeLine(int duration = 1000, QObject *parent = nullptr);
80 virtual ~QTimeLine();
81
82 State state() const;
83
84 int loopCount() const;
85 void setLoopCount(int count);
86
87 Direction direction() const;
88 void setDirection(Direction direction);
89
90 int duration() const;
91 void setDuration(int duration);
92
93 int startFrame() const;
94 void setStartFrame(int frame);
95 int endFrame() const;
96 void setEndFrame(int frame);
97 void setFrameRange(int startFrame, int endFrame);
98
99 int updateInterval() const;
100 void setUpdateInterval(int interval);
101
102 CurveShape curveShape() const;
103 void setCurveShape(CurveShape shape);
104
105 QEasingCurve easingCurve() const;
106 void setEasingCurve(const QEasingCurve &curve);
107
108 int currentTime() const;
109 int currentFrame() const;
110 qreal currentValue() const;
111
112 int frameForTime(int msec) const;
113 virtual qreal valueForTime(int msec) const;
114
115public Q_SLOTS:
116 void start();
117 void resume();
118 void stop();
119 void setPaused(bool paused);
120 void setCurrentTime(int msec);
121 void toggleDirection();
122
123Q_SIGNALS:
124 void valueChanged(qreal x, QPrivateSignal);
125 void frameChanged(int, QPrivateSignal);
126 void stateChanged(QTimeLine::State newState, QPrivateSignal);
127 void finished(QPrivateSignal);
128
129protected:
130 void timerEvent(QTimerEvent *event) override;
131
132private:
133 Q_DISABLE_COPY(QTimeLine)
134 Q_DECLARE_PRIVATE(QTimeLine)
135};
136
137QT_END_NAMESPACE
138
139#endif
140
141