From af0ab490038cc25a802258a32374dd521b0faef9 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 22 Feb 2014 14:57:12 -0800 Subject: [PATCH] Fixed bug 2346 - Mac: mousewheel events have flipped horizontal scroll values Alex Szpakowski On my Mac OS X system (10.9.1), the SDL_MOUSEWHEEL event reports negative X values when my trackpad scrolls to the right, and positive X values when my trackpad scrolls to the left. This is backwards from what I'd expect, and I don't think it matches the Windows wheel events. The vertical scroll values are what I'd expect though, and are consistent what gets reported on Windows (positive Y for scrolling up, negative Y for scrolling down.) This is with "scroll direction: natural" disabled in the OS X trackpad settings (i.e. my scroll direction in non-SDL OS X programs matches what happens in Windows and Linux.) I also tested with the horizontal scroll on a real mouse (Logitech G500 without custom drivers), and the horizontal scroll values in SDL are still flipped. I "solved" the issue for myself by changing this line in the Cocoa_HandleMouseWheel function: float x = [event deltaX]; to this: float x = -[event deltaX]; I believe it should work fine with that change - I found something similar in another codebase while looking online for my issue - but I haven't tested on anything below Mac OS 10.8. --- include/SDL_events.h | 4 ++-- src/video/cocoa/SDL_cocoamouse.m | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/SDL_events.h b/include/SDL_events.h index 0b848b944be2d..fc5a145e75fc0 100644 --- a/include/SDL_events.h +++ b/include/SDL_events.h @@ -257,8 +257,8 @@ typedef struct SDL_MouseWheelEvent Uint32 timestamp; Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ - Sint32 x; /**< The amount scrolled horizontally */ - Sint32 y; /**< The amount scrolled vertically */ + Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ + Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ } SDL_MouseWheelEvent; /** diff --git a/src/video/cocoa/SDL_cocoamouse.m b/src/video/cocoa/SDL_cocoamouse.m index 98b0e6161e8a9..56f67963284d8 100644 --- a/src/video/cocoa/SDL_cocoamouse.m +++ b/src/video/cocoa/SDL_cocoamouse.m @@ -291,7 +291,7 @@ + (NSCursor *)invisibleCursor { SDL_Mouse *mouse = SDL_GetMouse(); - float x = [event deltaX]; + float x = -[event deltaX]; float y = [event deltaY]; if (x > 0) {