From 97df6dab2fa2da856ee4c096ed94a9569a9e5abc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 7 May 2012 10:53:12 +0000 Subject: GHOST/Cocoa: detect tablet event to disable continuous grab. Don't have tablet to test it though, can someone with Mac + tablet confirm if continuous grab gets automatically disabled when using the tablet? --- intern/ghost/intern/GHOST_SystemCocoa.h | 1 + intern/ghost/intern/GHOST_SystemCocoa.mm | 61 ++++++++++++-------------------- 2 files changed, 24 insertions(+), 38 deletions(-) (limited to 'intern/ghost') diff --git a/intern/ghost/intern/GHOST_SystemCocoa.h b/intern/ghost/intern/GHOST_SystemCocoa.h index 2220955c270..ce7677aee7a 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.h +++ b/intern/ghost/intern/GHOST_SystemCocoa.h @@ -247,6 +247,7 @@ protected: * @return Indication whether the event was handled. */ GHOST_TSuccess handleTabletEvent(void *eventPtr, short eventType); + bool handleTabletEvent(void *eventPtr); /** * Handles a mouse event. diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm index d95f7727747..8baf3a12c16 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.mm +++ b/intern/ghost/intern/GHOST_SystemCocoa.mm @@ -1421,6 +1421,23 @@ GHOST_TSuccess GHOST_SystemCocoa::handleTabletEvent(void *eventPtr, short eventT return GHOST_kSuccess; } +bool GHOST_SystemCocoa::handleTabletEvent(void *eventPtr) +{ + NSEvent *event = (NSEvent *)eventPtr; + + switch ([event subtype]) { + case NX_SUBTYPE_TABLET_POINT: + handleTabletEvent(eventPtr, NSTabletPoint); + return true; + case NX_SUBTYPE_TABLET_PROXIMITY: + handleTabletEvent(eventPtr, NSTabletProximity); + return true; + default: + //No tablet event included : do nothing + return false; + } + +} GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr) { @@ -1432,6 +1449,8 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr) //printf("\nW failure for event 0x%x",[event type]); return GHOST_kFailure; } + + bool is_tablet = false; switch ([event type]) { @@ -1440,17 +1459,7 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr) case NSOtherMouseDown: pushEvent(new GHOST_EventButton([event timestamp]*1000, GHOST_kEventButtonDown, window, convertButton([event buttonNumber]))); //Handle tablet events combined with mouse events - switch ([event subtype]) { - case NX_SUBTYPE_TABLET_POINT: - handleTabletEvent(eventPtr, NSTabletPoint); - break; - case NX_SUBTYPE_TABLET_PROXIMITY: - handleTabletEvent(eventPtr, NSTabletProximity); - break; - default: - //No tablet event included : do nothing - break; - } + is_tablet = handleTabletEvent(event); break; case NSLeftMouseUp: @@ -1458,45 +1467,21 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr) case NSOtherMouseUp: pushEvent(new GHOST_EventButton([event timestamp]*1000, GHOST_kEventButtonUp, window, convertButton([event buttonNumber]))); //Handle tablet events combined with mouse events - switch ([event subtype]) { - case NX_SUBTYPE_TABLET_POINT: - handleTabletEvent(eventPtr, NSTabletPoint); - break; - case NX_SUBTYPE_TABLET_PROXIMITY: - handleTabletEvent(eventPtr, NSTabletProximity); - break; - default: - //No tablet event included : do nothing - break; - } + is_tablet = handleTabletEvent(event); break; case NSLeftMouseDragged: case NSRightMouseDragged: case NSOtherMouseDragged: //Handle tablet events combined with mouse events - switch ([event subtype]) { - case NX_SUBTYPE_TABLET_POINT: - handleTabletEvent(eventPtr, NSTabletPoint); - break; - case NX_SUBTYPE_TABLET_PROXIMITY: - handleTabletEvent(eventPtr, NSTabletProximity); - break; - default: - //No tablet event included : do nothing - break; - } + is_tablet = handleTabletEvent(event); case NSMouseMoved: { GHOST_TGrabCursorMode grab_mode = window->getCursorGrabMode(); - /* TODO: CHECK IF THIS IS A TABLET EVENT */ - bool is_tablet = false; - - if (is_tablet && window->getCursorGrabModeIsWarp()) { + if (is_tablet && window->getCursorGrabModeIsWarp()) grab_mode = GHOST_kGrabDisable; - } switch (grab_mode) { case GHOST_kGrabHide: //Cursor hidden grab operation : no cursor move -- cgit v1.2.3