From dc91f2f29b110e29f7915e7074a85fb8e44a889a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Mon, 19 Sep 2011 15:07:15 +0200 Subject: [PATCH] Cocoa platform plugin: Implement multitouch support. Change-Id: Ic4b5bc4e48bd1e70cffedf15530b8a933037de66 Reviewed-on: http://codereview.qt-project.org/5153 Reviewed-by: Qt Sanity Bot Reviewed-by: Richard Moe Gustavsen --- src/plugins/platforms/cocoa/cocoa.pro | 2 ++ src/plugins/platforms/cocoa/qcocoawindow.mm | 3 +++ src/plugins/platforms/cocoa/qnsview.mm | 29 +++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index d6801e0..40d3323 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -18,6 +18,7 @@ OBJECTIVE_SOURCES += main.mm \ qcocoamenu.mm \ qmenu_mac.mm \ qcocoahelpers.mm \ + qmultitouch_mac.mm \ HEADERS += qcocoaintegration.h \ qcocoabackingstore.h \ @@ -34,6 +35,7 @@ HEADERS += qcocoaintegration.h \ qcocoamenu.h \ qmenu_mac.h \ qcocoahelpers.h \ + qmultitouch_mac_p.h \ RESOURCES += qcocoaresources.qrc diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 7e4d421..00016cb 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -90,6 +90,9 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) m_contentView = [[QNSView alloc] initWithQWindow:tlw]; + // Accept touch events by default. + [m_contentView setAcceptsTouchEvents:YES]; + setGeometry(tlw->geometry()); [m_nsWindow setContentView:m_contentView]; diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index f3c71d9..f215c9d 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -43,6 +43,7 @@ #include "qnsview.h" #include "qcocoahelpers.h" +#include "qmultitouch_mac_p.h" #include #include @@ -229,6 +230,34 @@ [self handleMouseEvent:theEvent]; } +- (void)touchesBeganWithEvent:(NSEvent *)event; +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, QEvent::TouchBegin, QTouchEvent::TouchPad, points); +} + +- (void)touchesMovedWithEvent:(NSEvent *)event; +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, QEvent::TouchUpdate, QTouchEvent::TouchPad, points); +} + +- (void)touchesEndedWithEvent:(NSEvent *)event; +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, QEvent::TouchEnd, QTouchEvent::TouchPad, points); +} + +- (void)touchesCancelledWithEvent:(NSEvent *)event; +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, QEvent::TouchEnd, QTouchEvent::TouchPad, points); +} + #ifndef QT_NO_WHEELEVENT - (void)scrollWheel:(NSEvent *)theEvent { -- 2.7.4