Browse Source

Horizontal wheel support in windows

Lorenzo Pistone

this patch adds support for the horizontal wheel in Windows. It is shamelessly copied off the vertical wheel code, but I guess that that is a value added in consistency.
Sam Lantinga 11 years ago
parent
commit
3b050fc953
1 changed files with 22 additions and 0 deletions
  1. 22 0
      src/video/windows/SDL_windowsevents.c

+ 22 - 0
src/video/windows/SDL_windowsevents.c

@@ -67,6 +67,9 @@
 #ifndef WM_TOUCH
 #define WM_TOUCH 0x0240
 #endif
+#ifndef WM_MOUSEHWHEEL
+#define WM_MOUSEHWHEEL 0x020E
+#endif
 
 static SDL_Scancode
 WindowsScanCodeToSDLScanCode( LPARAM lParam, WPARAM wParam )
@@ -481,6 +484,25 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
             break;
         }
 
+    case WM_MOUSEHWHEEL:
+        {
+            static short s_AccumulatedMotion;
+
+            s_AccumulatedMotion += GET_WHEEL_DELTA_WPARAM(wParam);
+            if (s_AccumulatedMotion > 0) {
+                while (s_AccumulatedMotion >= WHEEL_DELTA) {
+                    SDL_SendMouseWheel(data->window, 0, 1, 0, timestamp);
+                    s_AccumulatedMotion -= WHEEL_DELTA;
+                }
+            } else {
+                while (s_AccumulatedMotion <= -WHEEL_DELTA) {
+                    SDL_SendMouseWheel(data->window, 0, -1, 0, timestamp);
+                    s_AccumulatedMotion += WHEEL_DELTA;
+                }
+            }
+            break;
+        }
+
 #ifdef WM_MOUSELEAVE
     case WM_MOUSELEAVE:
         if (SDL_GetMouseFocus() == data->window && !SDL_GetMouse()->relative_mode) {