17 #ifndef UBUNTU_GESTURES_DAMPER_H
18 #define UBUNTU_GESTURES_DAMPER_H
20 #include <QtCore/QPointF>
25 template <
class Type>
class Damper {
27 Damper() : m_value(0), m_maxDelta(0) { }
30 void setMaxDelta(Type maxDelta) {
31 if (maxDelta < 0) qFatal(
"Damper::maxDelta must be a positive number.");
32 m_maxDelta = maxDelta;
34 Type maxDelta()
const {
return m_maxDelta; }
36 void reset(Type value) {
40 Type update(Type value) {
41 Type delta = value - m_value;
42 if (delta > 0 && delta > m_maxDelta) {
43 m_value += delta - m_maxDelta;
44 }
else if (delta < 0 && delta < -m_maxDelta) {
45 m_value += delta + m_maxDelta;
51 Type value()
const {
return m_value; }
63 void setMaxDelta(qreal maxDelta) {
64 m_x.setMaxDelta(maxDelta);
65 m_y.setMaxDelta(maxDelta);
68 qreal maxDelta()
const {
return m_x.maxDelta(); }
70 void reset(
const QPointF &point) {
75 void update(
const QPointF &point) {
76 m_x.update(point.x());
77 m_y.update(point.y());
80 qreal x()
const {
return m_x.value(); }
81 qreal y()
const {
return m_y.value(); }
87 QDebug operator<<(QDebug dbg,
const DampedPointF &p);
89 #endif // UBUNTU_GESTURES_DAMPER_H