diff src/events/SDL_mouse.c @ 2794:f7872b7a8732

Fixed mouse coordinate range on Mac OS X
author Sam Lantinga <slouken@libsdl.org>
date Thu, 27 Nov 2008 21:53:18 +0000
parents f55c87ae336b
children 97ba0be8b565
line wrap: on
line diff
--- a/src/events/SDL_mouse.c	Thu Nov 27 05:29:12 2008 +0000
+++ b/src/events/SDL_mouse.c	Thu Nov 27 21:53:18 2008 +0000
@@ -34,7 +34,6 @@
 static int *SDL_IdIndex = NULL;
 static int SDL_highestId = -1;
 static int last_x, last_y;      /* the last reported x and y coordinates by the system cursor */
-int x_max, y_max;               /* current window width and height */
 
 
 /* Public functions */
@@ -365,6 +364,21 @@
         if (!focus) {
             SDL_SendWindowEvent(mouse->focus, SDL_WINDOWEVENT_ENTER, 0, 0);
         }
+        SDL_GetWindowSize(windowID, &mouse->x_max, &mouse->y_max);
+    }
+}
+
+void
+SDL_SetMouseFocusSize(SDL_WindowID windowID, int w, int h)
+{
+    int i;
+
+    for (i = 0; i < SDL_num_mice; ++i) {
+        SDL_Mouse *mouse = SDL_GetMouse(i);
+        if (mouse && mouse->focus == windowID) {
+            mouse->x_max = w;
+            mouse->y_max = h;
+        }
     }
 }
 
@@ -407,15 +421,6 @@
     int xrel;
     int yrel;
 
-    /* while using the relative mode and many windows, we have to be sure,
-       that the pointers find themselves inside the windows */
-    if (x > x_max) {
-        x = x_max;
-    }
-    if (y > y_max) {
-        y = y_max;
-    }
-
     if (!mouse || mouse->flush_motion) {
         return 0;
     }
@@ -445,15 +450,17 @@
         mouse->x = x;
         mouse->y = y;
     } else {
-        if (mouse->x + xrel > x_max) {
-            mouse->x = x_max;
+        /* while using the relative mode and many windows, we have to be
+           sure that the pointers find themselves inside the windows */
+        if (mouse->x + xrel > mouse->x_max) {
+            mouse->x = mouse->x_max;
         } else if (mouse->x + xrel < 0) {
             mouse->x = 0;
         } else {
             mouse->x += xrel;
         }
-        if (mouse->y + yrel > y_max) {
-            mouse->y = y_max;
+        if (mouse->y + yrel > mouse->y_max) {
+            mouse->y = mouse->y_max;
         } else if (mouse->y + yrel < 0) {
             mouse->y = 0;
         } else {
@@ -779,13 +786,6 @@
 }
 
 void
-SDL_UpdateCoordinates(int x, int y)
-{
-    x_max = x;
-    y_max = y;
-}
-
-void
 SDL_ChangeEnd(int id, int end)
 {
     int index = SDL_GetMouseIndexId(id);