Implemented Cocoa GetAbsoluteMouseState().
authorRyan C. Gordon <icculus@icculus.org>
Wed, 11 Jun 2014 00:40:19 -0400
changeset 8951 692ba71b9c04
parent 8950 66b11e777d54
child 8952 4bb098814ec4
Implemented Cocoa GetAbsoluteMouseState().
src/video/cocoa/SDL_cocoamouse.m
--- a/src/video/cocoa/SDL_cocoamouse.m	Wed Jun 11 00:12:19 2014 -0400
+++ b/src/video/cocoa/SDL_cocoamouse.m	Wed Jun 11 00:40:19 2014 -0400
@@ -282,6 +282,31 @@
     return 0;
 }
 
+static Uint32
+Cocoa_GetAbsoluteMouseState(int *x, int *y)
+{
+    const NSUInteger cocoaButtons = [NSEvent pressedMouseButtons];
+    const NSPoint cocoaLocation = [NSEvent mouseLocation];
+    Uint32 retval = 0;
+
+    for (NSScreen *screen in [NSScreen screens]) {
+        NSRect frame = [screen frame];
+        if (NSPointInRect(cocoaLocation, frame)) {
+            *x = (int) cocoaLocation.x;
+            *y = (int) ((frame.origin.y + frame.size.height) - cocoaLocation.y);
+            break;
+        }
+    }
+
+    retval |= (cocoaButtons & (1 << 0)) ? SDL_BUTTON_LMASK : 0;
+    retval |= (cocoaButtons & (1 << 1)) ? SDL_BUTTON_RMASK : 0;
+    retval |= (cocoaButtons & (1 << 2)) ? SDL_BUTTON_MMASK : 0;
+    retval |= (cocoaButtons & (1 << 3)) ? SDL_BUTTON_X1MASK : 0;
+    retval |= (cocoaButtons & (1 << 4)) ? SDL_BUTTON_X2MASK : 0;
+
+    return retval;
+}
+
 void
 Cocoa_InitMouse(_THIS)
 {
@@ -296,6 +321,7 @@
     mouse->WarpMouse = Cocoa_WarpMouse;
     mouse->SetRelativeMouseMode = Cocoa_SetRelativeMouseMode;
     mouse->CaptureMouse = Cocoa_CaptureMouse;
+    mouse->GetAbsoluteMouseState = Cocoa_GetAbsoluteMouseState;
 
     SDL_SetDefaultCursor(Cocoa_CreateDefaultCursor());