From 472028c1d43ec5fc9c8f054f24d286aa7873ad26 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 13 Oct 2011 08:55:56 +0300 Subject: [PATCH] Calculate an area in the touchscreen qpa plugin. Instead of ignoring the touch major/minor and returning a rectangle with width and height of 1, the size of the area is now calculated based on the major. This is incomplete and far from perfect but at least it makes visualizers, like the fingerpaint example app, work out of the box. Change-Id: I3bb70b4d7247f289e5cae4e7de2460ecf2c9d009 Reviewed-on: http://codereview.qt-project.org/6566 Reviewed-by: Paul Olav Tvete --- src/plugins/generic/touchscreen/qtoucheventsenderqpa.cpp | 3 ++- src/plugins/generic/touchscreen/qtouchscreen.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/generic/touchscreen/qtoucheventsenderqpa.cpp b/src/plugins/generic/touchscreen/qtoucheventsenderqpa.cpp index 341d387..284330f 100644 --- a/src/plugins/generic/touchscreen/qtoucheventsenderqpa.cpp +++ b/src/plugins/generic/touchscreen/qtoucheventsenderqpa.cpp @@ -102,7 +102,8 @@ void QTouchEventSenderQPA::touch_point(QEvent::Type state, // Generate a screen position that is always inside the active window or the default screen. const int wx = winRect.left() + int(nx * winRect.width()); const int wy = winRect.top() + int(ny * winRect.height()); - tp.area.moveTopLeft(QPoint(wx, wy)); + const qreal sizeRatio = (winRect.width() + winRect.height()) / qreal(hw_w + hw_h); + tp.area = QRect(wx, wy, tp.area.width() * sizeRatio, tp.area.height() * sizeRatio); #ifdef POINT_DEBUG qDebug() << " " << i << tp.area << tp.state << tp.id << tp.isPrimary << tp.pressure; diff --git a/src/plugins/generic/touchscreen/qtouchscreen.cpp b/src/plugins/generic/touchscreen/qtouchscreen.cpp index 2a56ac3..8ab320a 100644 --- a/src/plugins/generic/touchscreen/qtouchscreen.cpp +++ b/src/plugins/generic/touchscreen/qtouchscreen.cpp @@ -72,9 +72,10 @@ public: int trackingId; int x; int y; + int maj; Qt::TouchPointState state; bool primary; - Slot() : trackingId(0), x(0), y(0), state(Qt::TouchPointPressed), primary(false) { } + Slot() : trackingId(0), x(0), y(0), maj(1), state(Qt::TouchPointPressed), primary(false) { } }; QMap m_slots; QMap m_lastReport; @@ -254,6 +255,7 @@ void QTouchScreenData::processInputEvent(input_event *data) m_slots[m_currentSlot].primary = m_slots.count() == 1; } } else if (data->code == ABS_MT_TOUCH_MAJOR) { + m_slots[m_currentSlot].maj = data->value; if (data->value == 0) m_slots[m_currentSlot].state = Qt::TouchPointReleased; } @@ -273,7 +275,7 @@ void QTouchScreenData::processInputEvent(input_event *data) tp.id = slot.trackingId; tp.isPrimary = slot.primary; tp.pressure = slot.state == Qt::TouchPointReleased ? 0 : 1; - tp.area = QRectF(slot.x, slot.y, 1, 1); + tp.area = QRectF(slot.x, slot.y, slot.maj, slot.maj); tp.state = slot.state; if (slot.state == Qt::TouchPointMoved && m_lastReport.contains(slot.trackingId)) { QPoint lastPos = m_lastReport.value(slot.trackingId); -- 2.7.4