1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef QT3DANIMATION_QKEYFRAME_H
#define QT3DANIMATION_QKEYFRAME_H
#include <QtGui/qvector2d.h>
#include <Qt3DAnimation/qt3danimation_global.h>
QT_BEGIN_NAMESPACE
namespace Qt3DAnimation {
class QKeyFrame
{
public:
enum InterpolationType : quint8 {
ConstantInterpolation,
LinearInterpolation,
BezierInterpolation
};
constexpr QKeyFrame() noexcept
: m_coordinates()
, m_leftControlPoint()
, m_rightControlPoint()
, m_interpolationType(BezierInterpolation)
{
}
constexpr explicit QKeyFrame(QVector2D coords) noexcept
: m_coordinates(coords)
, m_leftControlPoint()
, m_rightControlPoint()
, m_interpolationType(LinearInterpolation)
{
}
constexpr explicit QKeyFrame(QVector2D coords,
QVector2D lh,
QVector2D rh) noexcept
: m_coordinates(coords)
, m_leftControlPoint(lh)
, m_rightControlPoint(rh)
, m_interpolationType(BezierInterpolation)
{
}
void setCoordinates(QVector2D coords) noexcept
{
m_coordinates = coords;
}
constexpr QVector2D coordinates() const noexcept
{
return m_coordinates;
}
void setLeftControlPoint(QVector2D lh) noexcept
{
m_leftControlPoint = lh;
}
constexpr QVector2D leftControlPoint() const noexcept
{
return m_leftControlPoint;
}
void setRightControlPoint(QVector2D rh) noexcept
{
m_rightControlPoint = rh;
}
constexpr QVector2D rightControlPoint() const noexcept
{
return m_rightControlPoint;
}
void setInterpolationType(InterpolationType interp) noexcept
{
m_interpolationType = interp;
}
constexpr InterpolationType interpolationType() const noexcept
{
return m_interpolationType;
}
friend inline bool operator==(const QKeyFrame &, const QKeyFrame &) noexcept;
friend inline bool operator!=(const QKeyFrame &, const QKeyFrame &) noexcept;
private:
QVector2D m_coordinates;
QVector2D m_leftControlPoint;
QVector2D m_rightControlPoint;
InterpolationType m_interpolationType;
};
QT3D_DECLARE_TYPEINFO(Qt3DAnimation, QKeyFrame, Q_PRIMITIVE_TYPE)
inline bool operator==(const QKeyFrame &lhs, const QKeyFrame &rhs) noexcept
{
if (lhs.m_interpolationType != rhs.m_interpolationType)
return false;
if (lhs.m_interpolationType == QKeyFrame::BezierInterpolation) {
return lhs.m_coordinates == rhs.m_coordinates &&
lhs.m_leftControlPoint == rhs.m_leftControlPoint &&
lhs.m_rightControlPoint == rhs.m_rightControlPoint;
}
return lhs.m_coordinates == rhs.m_coordinates;
}
inline bool operator!=(const QKeyFrame &lhs, const QKeyFrame &rhs) noexcept
{
return !(lhs == rhs);
}
} // namespace Qt3DAnimation
QT_END_NAMESPACE
#endif // QT3DANIMATION_QKEYFRAME_H
|