From 7971d94b84827b0d832ba72a80a19910add885d5 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 23 Jun 2009 15:45:33 +0200 Subject: Multitouch, Cocoa: Implement normalized position --- src/gui/kernel/qmultitouch_mac.mm | 11 ++++++----- src/gui/kernel/qmultitouch_mac_p.h | 1 - 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qmultitouch_mac.mm b/src/gui/kernel/qmultitouch_mac.mm index d3d423c..d9cb8b6 100644 --- a/src/gui/kernel/qmultitouch_mac.mm +++ b/src/gui/kernel/qmultitouch_mac.mm @@ -83,17 +83,18 @@ void QCocoaTouch::updateTouchData(NSTouch *nstouch, NSTouchPhase phase) // where on screen the touchpoint should be according to the // reference position: NSPoint npos = [nstouch normalizedPosition]; - _trackpadPos = QPointF(npos.x, npos.y); + QPointF qnpos = QPointF(npos.x, 1 - npos.y); + _touchPoint.setNormalizedPos(qnpos); if (_touchPoint.id() == 0 && phase == NSTouchPhaseBegan) { - _trackpadReferencePos = _trackpadPos; + _trackpadReferencePos = qnpos; _screenReferencePos = QCursor::pos(); } NSSize dsize = [nstouch deviceSize]; - float ppiX = (_trackpadPos.x() - _trackpadReferencePos.x()) * dsize.width; - float ppiY = (_trackpadPos.y() - _trackpadReferencePos.y()) * dsize.height; - QPointF relativePos = _trackpadReferencePos - QPointF(ppiX, 1 - ppiY); + float ppiX = (qnpos.x() - _trackpadReferencePos.x()) * dsize.width; + float ppiY = (qnpos.y() - _trackpadReferencePos.y()) * dsize.height; + QPointF relativePos = _trackpadReferencePos - QPointF(ppiX, ppiY); _touchPoint.setScreenPos(_screenReferencePos - relativePos); } diff --git a/src/gui/kernel/qmultitouch_mac_p.h b/src/gui/kernel/qmultitouch_mac_p.h index 0c45df4..19d7233 100644 --- a/src/gui/kernel/qmultitouch_mac_p.h +++ b/src/gui/kernel/qmultitouch_mac_p.h @@ -82,7 +82,6 @@ class QCocoaTouch static bool _updateInternalStateOnly; QTouchEvent::TouchPoint _touchPoint; - QPointF _trackpadPos; int _identity; QCocoaTouch(NSTouch *nstouch); -- cgit v0.12 From 0580be5026ec66409259ea546454cbd11666bb75 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Wed, 24 Jun 2009 10:30:32 +0200 Subject: Fix pressure "emulation" Update the auto test for QTouchEvent to make sure the pressure is set to 1 for Pressed/Moved/Stationary, but for 0 for Released. --- src/gui/kernel/qapplication.cpp | 2 +- tests/auto/qtouchevent/tst_qtouchevent.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 9a22fd5..ed6405a 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -5363,7 +5363,7 @@ void QApplicationPrivate::translateRawTouchEvent(QWidget *window, touchPoint.setStartNormalizedPos(previousTouchPoint.startNormalizedPos()); touchPoint.setLastNormalizedPos(previousTouchPoint.normalizedPos()); if (touchPoint.pressure() < qreal(0.)) - touchPoint.setPressure(qreal(0.)); + touchPoint.setPressure(qreal(1.)); d->appCurrentTouchPoints[touchPoint.id()] = touchPoint; break; } diff --git a/tests/auto/qtouchevent/tst_qtouchevent.cpp b/tests/auto/qtouchevent/tst_qtouchevent.cpp index b21ba40..a9206bd 100644 --- a/tests/auto/qtouchevent/tst_qtouchevent.cpp +++ b/tests/auto/qtouchevent/tst_qtouchevent.cpp @@ -284,7 +284,7 @@ void tst_QTouchEvent::basicRawEventTranslation() QCOMPARE(touchBeginPoint.rect(), QRectF(pos, QSizeF(0, 0))); QCOMPARE(touchBeginPoint.screenRect(), QRectF(rawTouchPoint.screenPos(), QSizeF(0, 0))); QCOMPARE(touchBeginPoint.sceneRect(), touchBeginPoint.screenRect()); - QCOMPARE(touchBeginPoint.pressure(), qreal(-1.)); + QCOMPARE(touchBeginPoint.pressure(), qreal(1.)); // moving the point should translate to TouchUpdate rawTouchPoint.setState(Qt::TouchPointMoved); @@ -314,7 +314,7 @@ void tst_QTouchEvent::basicRawEventTranslation() QCOMPARE(touchUpdatePoint.rect(), QRectF(pos + delta, QSizeF(0, 0))); QCOMPARE(touchUpdatePoint.screenRect(), QRectF(rawTouchPoint.screenPos(), QSizeF(0, 0))); QCOMPARE(touchUpdatePoint.sceneRect(), touchUpdatePoint.screenRect()); - QCOMPARE(touchUpdatePoint.pressure(), qreal(-1.)); + QCOMPARE(touchUpdatePoint.pressure(), qreal(1.)); // releasing the point translates to TouchEnd rawTouchPoint.setState(Qt::TouchPointReleased); @@ -344,7 +344,7 @@ void tst_QTouchEvent::basicRawEventTranslation() QCOMPARE(touchEndPoint.rect(), QRectF(pos + delta + delta, QSizeF(0, 0))); QCOMPARE(touchEndPoint.screenRect(), QRectF(rawTouchPoint.screenPos(), QSizeF(0, 0))); QCOMPARE(touchEndPoint.sceneRect(), touchEndPoint.screenRect()); - QCOMPARE(touchEndPoint.pressure(), qreal(-1.)); + QCOMPARE(touchEndPoint.pressure(), qreal(0.)); } QTEST_MAIN(tst_QTouchEvent) -- cgit v0.12