# HG changeset patch # User Sam Lantinga # Date 1183713738 0 # Node ID 003c1b5b07da76fce8d7a1d842ddb11f2da2be58 # Parent 1e0692271600de0e08f041ab0dc842a1641fe6bd Fixed bug #382 Added horizontal scrolling support diff -r 1e0692271600 -r 003c1b5b07da include/SDL_compat.h --- 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 diff -r 1e0692271600 -r 003c1b5b07da include/SDL_events.h --- 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; diff -r 1e0692271600 -r 003c1b5b07da src/SDL_compat.c --- 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; } diff -r 1e0692271600 -r 003c1b5b07da src/events/SDL_mouse.c --- 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); } diff -r 1e0692271600 -r 003c1b5b07da src/events/SDL_mouse_c.h --- 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); diff -r 1e0692271600 -r 003c1b5b07da src/video/cocoa/SDL_cocoawindow.m --- 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 diff -r 1e0692271600 -r 003c1b5b07da src/video/win32/SDL_win32events.c --- 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);