--- a/include/SDL_compat.h Thu Jul 05 06:35:40 2007 +0000
+++ b/include/SDL_compat.h Fri Jul 06 09:22:18 2007 +0000
@@ -63,6 +63,8 @@
#define SDL_BUTTON_WHEELUP 4
#define SDL_BUTTON_WHEELDOWN 5
+#define SDL_BUTTON_WHEELLEFT 6
+#define SDL_BUTTON_WHEELRIGHT 7
#define SDL_DEFAULT_REPEAT_DELAY 500
#define SDL_DEFAULT_REPEAT_INTERVAL 30
--- a/include/SDL_events.h Thu Jul 05 06:35:40 2007 +0000
+++ b/include/SDL_events.h Fri Jul 06 09:22:18 2007 +0000
@@ -199,7 +199,8 @@
{
Uint8 type; /**< SDL_MOUSEWHEEL */
Uint8 which; /**< The mouse device index */
- int motion; /**< The direction and distance scrolled */
+ int x; /**< The amount scrolled horizontally */
+ int y; /**< The amount scrolled vertically */
SDL_WindowID windowID; /**< The window with mouse focus, if any */
} SDL_MouseWheelEvent;
--- a/src/SDL_compat.c Thu Jul 05 06:35:40 2007 +0000
+++ b/src/SDL_compat.c Fri Jul 06 09:22:18 2007 +0000
@@ -256,25 +256,42 @@
SDL_GetMouseState(&x, &y);
SDL_SelectMouse(selected);
- if (event->wheel.motion > 0) {
- button = SDL_BUTTON_WHEELUP;
- } else {
- button = SDL_BUTTON_WHEELDOWN;
- }
-
fake.button.which = event->wheel.windowID;
- fake.button.button = button;
fake.button.x = x;
fake.button.y = y;
fake.button.windowID = event->wheel.windowID;
- fake.type = SDL_MOUSEBUTTONDOWN;
- fake.button.state = SDL_PRESSED;
- SDL_PushEvent(&fake);
+ if (event->wheel.y) {
+ if (event->wheel.y > 0) {
+ fake.button.button = SDL_BUTTON_WHEELUP;
+ } else {
+ fake.button.button = SDL_BUTTON_WHEELDOWN;
+ }
+
+ fake.type = SDL_MOUSEBUTTONDOWN;
+ fake.button.state = SDL_PRESSED;
+ SDL_PushEvent(&fake);
- fake.type = SDL_MOUSEBUTTONUP;
- fake.button.state = SDL_RELEASED;
- SDL_PushEvent(&fake);
+ fake.type = SDL_MOUSEBUTTONUP;
+ fake.button.state = SDL_RELEASED;
+ SDL_PushEvent(&fake);
+ }
+ if (event->wheel.x) {
+ if (event->wheel.y > 0) {
+ fake.button.button = SDL_BUTTON_WHEELLEFT;
+ } else {
+ fake.button.button = SDL_BUTTON_WHEELRIGHT;
+ }
+
+ fake.type = SDL_MOUSEBUTTONDOWN;
+ fake.button.state = SDL_PRESSED;
+ SDL_PushEvent(&fake);
+
+ fake.type = SDL_MOUSEBUTTONUP;
+ fake.button.state = SDL_RELEASED;
+ SDL_PushEvent(&fake);
+ }
+
break;
}
--- a/src/events/SDL_mouse.c Thu Jul 05 06:35:40 2007 +0000
+++ b/src/events/SDL_mouse.c Fri Jul 06 09:22:18 2007 +0000
@@ -427,12 +427,12 @@
}
int
-SDL_SendMouseWheel(int index, int motion)
+SDL_SendMouseWheel(int index, int x, int y)
{
SDL_Mouse *mouse = SDL_GetMouse(index);
int posted;
- if (!mouse || !motion) {
+ if (!mouse || (!x && !y)) {
return 0;
}
@@ -442,7 +442,8 @@
SDL_Event event;
event.type = SDL_MOUSEWHEEL;
event.wheel.which = (Uint8) index;
- event.wheel.motion = motion;
+ event.wheel.x = x;
+ event.wheel.y = y;
event.wheel.windowID = mouse->focus;
posted = (SDL_PushEvent(&event) > 0);
}
--- a/src/events/SDL_mouse_c.h Thu Jul 05 06:35:40 2007 +0000
+++ b/src/events/SDL_mouse_c.h Fri Jul 06 09:22:18 2007 +0000
@@ -102,7 +102,7 @@
extern int SDL_SendMouseButton(int index, Uint8 state, Uint8 button);
/* Send a mouse wheel event for a mouse at an index */
-extern int SDL_SendMouseWheel(int index, int motion);
+extern int SDL_SendMouseWheel(int index, int x, int y);
/* Shutdown the mouse subsystem */
extern void SDL_MouseQuit(void);
--- a/src/video/cocoa/SDL_cocoawindow.m Thu Jul 05 06:35:40 2007 +0000
+++ b/src/video/cocoa/SDL_cocoawindow.m Fri Jul 06 09:22:18 2007 +0000
@@ -274,7 +274,7 @@
int index;
index = _data->videodata->mouse;
- SDL_SendMouseWheel(index, (int)([theEvent deltaY]+0.9f));
+ SDL_SendMouseWheel(index, (int)([theEvent deltaX]+0.9f), (int)([theEvent deltaY]+0.9f));
}
@end
--- a/src/video/win32/SDL_win32events.c Thu Jul 05 06:35:40 2007 +0000
+++ b/src/video/win32/SDL_win32events.c Fri Jul 06 09:22:18 2007 +0000
@@ -645,7 +645,7 @@
int motion = (short) HIWORD(wParam);
index = data->videodata->mouse;
- SDL_SendMouseWheel(index, motion);
+ SDL_SendMouseWheel(index, 0, motion);
}
return (0);