aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2016-07-14 17:37:23 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2016-07-15 13:26:35 +0000
commit882f83f8f58a8f2635b1f38425f5fe13e6ddd1ec (patch)
treecc03267bc7112c20b66317de2e4cedefc8d7cb64
parent30e30b98669bc51c77416f8c1ba68e348848be23 (diff)
QQuickEventPoint: keep the timestamps, remember when pressed
Some handlers will care for how long the point has been held so far. Change-Id: I390d92988619054918fcdecd4b092ca9b4cfdea0 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
-rw-r--r--src/quick/items/qquickevents.cpp4
-rw-r--r--src/quick/items/qquickevents_p_p.h18
2 files changed, 15 insertions, 7 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp
index 68284843b6..4f677e841c 100644
--- a/src/quick/items/qquickevents.cpp
+++ b/src/quick/items/qquickevents.cpp
@@ -494,7 +494,7 @@ void QQuickPointerEvent::initFromMouse(QMouseEvent *ev) {
if (!m_mousePoint)
m_mousePoint = new QQuickEventPoint;
m_pointCount = 1;
- m_mousePoint->reset(state, ev->windowPos(), 0); // mouse is 0
+ m_mousePoint->reset(state, ev->windowPos(), 0, ev->timestamp()); // mouse is 0
}
void QQuickPointerEvent::initFromTouch(QTouchEvent *ev) {
@@ -510,7 +510,7 @@ void QQuickPointerEvent::initFromTouch(QTouchEvent *ev) {
m_touchPoints.insert(i, new QQuickEventTouchPoint);
for (int i = 0; i < m_pointCount; ++i)
- m_touchPoints.at(i)->reset(tps.at(i));
+ m_touchPoints.at(i)->reset(tps.at(i), ev->timestamp());
}
/*!
diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h
index 303b14b5cf..38c333d2a4 100644
--- a/src/quick/items/qquickevents_p_p.h
+++ b/src/quick/items/qquickevents_p_p.h
@@ -314,21 +314,27 @@ class Q_QUICK_PRIVATE_EXPORT QQuickEventPoint : public QObject
Q_PROPERTY(QPointF scenePos READ scenePos)
Q_PROPERTY(Qt::TouchPointState state READ state)
Q_PROPERTY(quint64 pointId READ pointId)
+ Q_PROPERTY(qreal timeHeld READ timeHeld)
Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted)
public:
- QQuickEventPoint() : QObject(), m_pointId(0), m_state(Qt::TouchPointReleased), m_valid(false), m_accept(false)
+ QQuickEventPoint() : QObject(), m_pointId(0), m_timestamp(0), m_pressTimestamp(0),
+ m_state(Qt::TouchPointReleased), m_valid(false), m_accept(false)
{
Q_UNUSED(m_reserved);
}
- void reset(Qt::TouchPointState state, QPointF scenePos, quint64 pointId)
+ void reset(Qt::TouchPointState state, QPointF scenePos, quint64 pointId, ulong timestamp)
{
m_scenePos = scenePos;
m_pointId = pointId;
m_valid = true;
m_accept = false;
m_state = state;
+ m_timestamp = timestamp;
+ if (state == Qt::TouchPointPressed)
+ m_pressTimestamp = timestamp;
+ // TODO calculate velocity
}
void invalidate() { m_valid = false; }
@@ -337,12 +343,15 @@ public:
Qt::TouchPointState state() const { return m_state; }
quint64 pointId() const { return m_pointId; }
bool isValid() const { return m_valid; }
+ qreal timeHeld() const { return (m_timestamp - m_pressTimestamp) / 1000.0; }
bool isAccepted() const { return m_accept; }
void setAccepted(bool accepted = true) { m_accept = accepted; }
private:
QPointF m_scenePos;
quint64 m_pointId;
+ ulong m_timestamp;
+ ulong m_pressTimestamp;
Qt::TouchPointState m_state;
bool m_valid : 1;
bool m_accept : 1;
@@ -359,10 +368,9 @@ class Q_QUICK_PRIVATE_EXPORT QQuickEventTouchPoint : public QQuickEventPoint
public:
QQuickEventTouchPoint() : QQuickEventPoint(), m_rotation(0), m_pressure(0) { }
- void reset(const QTouchEvent::TouchPoint &tp)
+ void reset(const QTouchEvent::TouchPoint &tp, ulong timestamp)
{
- QQuickEventPoint::reset(tp.state(), tp.scenePos(), tp.id());
- // TODO times and velocity
+ QQuickEventPoint::reset(tp.state(), tp.scenePos(), tp.id(), timestamp);
m_rotation = tp.rotation();
m_pressure = tp.pressure();
m_uniqueId = tp.uniqueId();