The window position is display relative, at least for now...
authorSam Lantinga <slouken@libsdl.org>
Sun, 06 Dec 2009 08:39:01 +0000
changeset 3530 e96be66e3673
parent 3529 09155ec3e291
child 3531 61b7f5821576
The window position is display relative, at least for now...
src/video/cocoa/SDL_cocoawindow.m
src/video/win32/SDL_win32window.c
--- a/src/video/cocoa/SDL_cocoawindow.m	Sun Dec 06 08:16:23 2009 +0000
+++ b/src/video/cocoa/SDL_cocoawindow.m	Sun Dec 06 08:39:01 2009 +0000
@@ -298,7 +298,8 @@
 {
     NSAutoreleasePool *pool;
     SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
-    SDL_DisplayData *displaydata = (SDL_DisplayData *) SDL_GetDisplayFromWindow(window)->driverdata;
+    SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
+    SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata;
     SDL_WindowData *data;
 
     /* Allocate the window data */
@@ -321,10 +322,12 @@
 
     /* Fill in the SDL window with the window data */
     {
+        SDL_Rect bounds;
         NSRect rect = [nswindow contentRectForFrameRect:[nswindow frame]];
         ConvertNSRect(&rect);
-        window->x = (int)rect.origin.x;
-        window->y = (int)rect.origin.y;
+        Cocoa_GetDisplayBounds(_this, display, &bounds);
+        window->x = (int)rect.origin.x - bounds.x;
+        window->y = (int)rect.origin.y - bounds.y;
         window->w = (int)rect.size.width;
         window->h = (int)rect.size.height;
     }
@@ -392,7 +395,7 @@
     } else if (window->x == SDL_WINDOWPOS_UNDEFINED) {
         rect.origin.x = bounds.x;
     } else {
-        rect.origin.x = window->x;
+        rect.origin.x = bounds.x + window->x;
     }
     if ((window->flags & SDL_WINDOW_FULLSCREEN)
         || window->y == SDL_WINDOWPOS_CENTERED) {
@@ -400,7 +403,7 @@
     } else if (window->x == SDL_WINDOWPOS_UNDEFINED) {
         rect.origin.y = bounds.y;
     } else {
-        rect.origin.y = window->y;
+        rect.origin.y = bounds.y + window->y;
     }
     rect.size.width = window->w;
     rect.size.height = window->h;
@@ -496,13 +499,13 @@
         || window->x == SDL_WINDOWPOS_CENTERED) {
         rect.origin.x = bounds.x + (bounds.w - window->w) / 2;
     } else {
-        rect.origin.x = window->x;
+        rect.origin.x = bounds.x + window->x;
     }
     if ((window->flags & SDL_WINDOW_FULLSCREEN)
         || window->y == SDL_WINDOWPOS_CENTERED) {
         rect.origin.y = bounds.y + (bounds.h - window->h) / 2;
     } else {
-        rect.origin.y = window->y;
+        rect.origin.y = bounds.y + window->y;
     }
     rect.size.width = window->w;
     rect.size.height = window->h;
--- a/src/video/win32/SDL_win32window.c	Sun Dec 06 08:16:23 2009 +0000
+++ b/src/video/win32/SDL_win32window.c	Sun Dec 06 08:39:01 2009 +0000
@@ -86,6 +86,7 @@
 SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created)
 {
     SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
+    SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
     SDL_WindowData *data;
 
     /* Allocate the window data */
@@ -123,8 +124,10 @@
         point.x = 0;
         point.y = 0;
         if (ClientToScreen(hwnd, &point)) {
-            window->x = point.x;
-            window->y = point.y;
+            SDL_Rect bounds;
+            WIN_GetDisplayBounds(_this, display, &bounds);
+            window->x = point.x - bounds.x;
+            window->y = point.y - bounds.y;
         }
     }
     {
@@ -232,7 +235,7 @@
             x = bounds.x;
         }
     } else {
-        x = window->x + rect.left;
+        x = bounds.x + window->x + rect.left;
     }
     if ((window->flags & SDL_WINDOW_FULLSCREEN)
         || window->y == SDL_WINDOWPOS_CENTERED) {
@@ -244,7 +247,7 @@
             y = bounds.y;
         }
     } else {
-        y = window->y + rect.top;
+        y = bounds.y + window->y + rect.top;
     }
 
     hwnd =
@@ -459,13 +462,13 @@
         || window->x == SDL_WINDOWPOS_CENTERED) {
         x = bounds.x + (bounds.w - window->w) / 2;
     } else {
-        x = window->x + rect.left;
+        x = bounds.x + window->x + rect.left;
     }
     if ((window->flags & SDL_WINDOW_FULLSCREEN)
         || window->y == SDL_WINDOWPOS_CENTERED) {
         y = bounds.y + (bounds.h - window->h) / 2;
     } else {
-        y = window->y + rect.top;
+        y = bounds.y + window->y + rect.top;
     }
 
     SetWindowPos(hwnd, top, x, y, 0, 0, (SWP_NOCOPYBITS | SWP_NOSIZE));