Fix mouse wheel events in fullscreen mode for OS X
authorJjgod Jiang <gzjjgod@gmail.com>
Fri, 21 Jan 2011 00:15:18 +0100
changeset 5057 bdff53ed6c8b
parent 5056 8b7988f42fcb
child 5058 03db7d4b02b4
Fix mouse wheel events in fullscreen mode for OS X With proposed patch by vernier.
src/video/cocoa/SDL_cocoaevents.m
src/video/cocoa/SDL_cocoamouse.h
src/video/cocoa/SDL_cocoamouse.m
src/video/cocoa/SDL_cocoawindow.m
--- a/src/video/cocoa/SDL_cocoaevents.m	Thu Jan 20 16:05:59 2011 -0800
+++ b/src/video/cocoa/SDL_cocoaevents.m	Fri Jan 21 00:15:18 2011 +0100
@@ -201,6 +201,7 @@
         case NSLeftMouseDragged:
         case NSRightMouseDragged:
         case NSOtherMouseDragged: /* usually middle mouse dragged */
+        case NSScrollWheel:
         case NSMouseMoved:
             Cocoa_HandleMouseEvent(_this, event);
             /* Pass through to NSApp to make sure everything stays in sync */
--- a/src/video/cocoa/SDL_cocoamouse.h	Thu Jan 20 16:05:59 2011 -0800
+++ b/src/video/cocoa/SDL_cocoamouse.h	Fri Jan 21 00:15:18 2011 +0100
@@ -27,6 +27,7 @@
 extern void Cocoa_InitMouse(_THIS);
 extern void Cocoa_HandleMouseEvent(_THIS, NSEvent * event);
 extern void Cocoa_QuitMouse(_THIS);
+extern void Cocoa_HandleMouseWheel(SDL_Window *window, NSEvent * event);
 
 #endif /* _SDL_cocoamouse_h */
 
--- a/src/video/cocoa/SDL_cocoamouse.m	Thu Jan 20 16:05:59 2011 -0800
+++ b/src/video/cocoa/SDL_cocoamouse.m	Fri Jan 21 00:15:18 2011 +0100
@@ -93,6 +93,9 @@
     case NSRightMouseUp:
         SDL_SendMouseButton(window, SDL_RELEASED, ConvertMouseButtonToSDL([event buttonNumber]));
         break;
+    case NSScrollWheel:
+        Cocoa_HandleMouseWheel(window, event);
+        break;
     case NSLeftMouseDragged:
     case NSRightMouseDragged:
     case NSOtherMouseDragged: /* usually middle mouse dragged */
@@ -109,4 +112,23 @@
 {
 }
 
+void
+Cocoa_HandleMouseWheel(SDL_Window *window, NSEvent *event)
+{
+    float x = [event deltaX];
+    float y = [event deltaY];
+
+    if (x > 0) {
+        x += 0.9f;
+    } else if (x < 0) {
+        x -= 0.9f;
+    }
+    if (y > 0) {
+        y += 0.9f;
+    } else if (y < 0) {
+        y -= 0.9f;
+    }
+    SDL_SendMouseWheel(window, (int)x, (int)y);
+}
+
 /* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cocoa/SDL_cocoawindow.m	Thu Jan 20 16:05:59 2011 -0800
+++ b/src/video/cocoa/SDL_cocoawindow.m	Fri Jan 21 00:15:18 2011 +0100
@@ -29,6 +29,7 @@
 #include "../../events/SDL_windowevents_c.h"
 #include "SDL_cocoavideo.h"
 #include "SDL_cocoashape.h"
+#include "SDL_cocoamouse.h"
 
 static __inline__ void ConvertNSRect(NSRect *r)
 {
@@ -260,20 +261,7 @@
 
 - (void)scrollWheel:(NSEvent *)theEvent
 {
-    float x = [theEvent deltaX];
-    float y = [theEvent deltaY];
-
-    if (x > 0) {
-        x += 0.9f;
-    } else if (x < 0) {
-        x -= 0.9f;
-    }
-    if (y > 0) {
-        y += 0.9f;
-    } else if (y < 0) {
-        y -= 0.9f;
-    }
-    SDL_SendMouseWheel(_data->window, (int)x, (int)y);
+    Cocoa_HandleMouseWheel(_data->window, theEvent);
 }
 
 - (void)touchesBeganWithEvent:(NSEvent *) theEvent