forked from bartvdbraak/blender
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?
This commit is contained in:
parent
022d12a721
commit
97df6dab2f
@ -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.
|
||||
|
@ -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)
|
||||
{
|
||||
@ -1433,6 +1450,8 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr)
|
||||
return GHOST_kFailure;
|
||||
}
|
||||
|
||||
bool is_tablet = false;
|
||||
|
||||
switch ([event type])
|
||||
{
|
||||
case NSLeftMouseDown:
|
||||
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user