Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-07 14:53:12 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-07 14:53:12 +0400
commit97df6dab2fa2da856ee4c096ed94a9569a9e5abc (patch)
tree9b91527f4a04f025f58ab0fff77b784560fe2123 /intern/ghost
parent022d12a721b04799423edf646b2a08bd48edfe6a (diff)
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?
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_SystemCocoa.h1
-rw-r--r--intern/ghost/intern/GHOST_SystemCocoa.mm61
2 files changed, 24 insertions, 38 deletions
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