summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorFabian Bumberger <fbumberger@rim.com>2013-10-30 15:27:06 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-07 19:12:22 +0100
commit592d79fc83f68401da5cac438667faf1e8bfa014 (patch)
tree17122db2a4a38e6d8e9ee57d262577ea2bb017e2 /src/plugins
parentdcbb16a45212d263496df1e5875da6205e4f5f53 (diff)
QNX: Add some more properties to a touch point
Change-Id: Ic1c889557148f112e357c3ee34199ff6d19b4a6e Reviewed-by: Bernd Weimer <bweimer@blackberry.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp b/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
index 1e33e2b50f..b50e590265 100644
--- a/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
+++ b/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
@@ -428,6 +428,19 @@ void QQnxScreenEventHandler::handleTouchEvent(screen_event_t event, int qnxType)
if (result)
qFatal("QQNX: failed to query event window, errno=%d", errno);
+ errno = 0;
+ int touchArea[2];
+ result = screen_get_event_property_iv(event, SCREEN_PROPERTY_SIZE, touchArea);
+ if (result)
+ qFatal("QQNX: failed to query event touch area, errno=%d", errno);
+
+ errno = 0;
+ int touchPressure;
+ result = screen_get_event_property_iv(event, SCREEN_PROPERTY_TOUCH_PRESSURE, &touchPressure);
+ if (result)
+ qFatal("QQNX: failed to query event touch pressure, errno=%d", errno);
+
+
screen_window_t qnxWindow = static_cast<screen_window_t>(handle);
// check if finger is valid
@@ -462,14 +475,23 @@ void QQnxScreenEventHandler::handleTouchEvent(screen_event_t event, int qnxType)
QPointF(static_cast<qreal>(pos[0]) / screenSize.width(),
static_cast<qreal>(pos[1]) / screenSize.height());
- m_touchPoints[touchId].area = QRectF(w->geometry().left() + windowPos[0],
- w->geometry().top() + windowPos[1], 0.0, 0.0);
+ m_touchPoints[touchId].area = QRectF(w->geometry().left() + windowPos[0] - (touchArea[0]>>1),
+ w->geometry().top() + windowPos[1] - (touchArea[1]>>1),
+ 0.0, 0.0);
QWindow *parent = w->parent();
while (parent) {
m_touchPoints[touchId].area.translate(parent->geometry().topLeft());
parent = parent->parent();
}
+ //Qt expects the pressure between 0 and 1. There is however no definit upper limit for
+ //the integer value of touch event pressure. The 200 was determined by experiment, it
+ //usually does not get higher than that.
+ m_touchPoints[touchId].pressure = static_cast<qreal>(touchPressure)/200.0;
+ // Can happen, because there is no upper limit for pressure
+ if (m_touchPoints[touchId].pressure > 1)
+ m_touchPoints[touchId].pressure = 1;
+
// determine event type and update state of current touch point
QEvent::Type type = QEvent::None;
switch (qnxType) {