From 5c77d00a62f131dd624de821c5dfa834e95022ed Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 6 Dec 2009 08:39:01 +0000 Subject: [PATCH] The window position is display relative, at least for now... --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404273 --- src/video/cocoa/SDL_cocoawindow.m | 17 ++++++++++------- src/video/win32/SDL_win32window.c | 15 +++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index a9f44153d..e0a6f76d5 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -298,7 +298,8 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created { 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 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created /* 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 @@ Cocoa_CreateWindow(_THIS, SDL_Window * window) } 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 @@ Cocoa_CreateWindow(_THIS, SDL_Window * window) } 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 @@ Cocoa_SetWindowPosition(_THIS, SDL_Window * window) || 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; diff --git a/src/video/win32/SDL_win32window.c b/src/video/win32/SDL_win32window.c index 3a2be6f10..e42518edc 100644 --- a/src/video/win32/SDL_win32window.c +++ b/src/video/win32/SDL_win32window.c @@ -86,6 +86,7 @@ static int 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 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) 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 @@ WIN_CreateWindow(_THIS, SDL_Window * window) 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 @@ WIN_CreateWindow(_THIS, SDL_Window * window) y = bounds.y; } } else { - y = window->y + rect.top; + y = bounds.y + window->y + rect.top; } hwnd = @@ -459,13 +462,13 @@ WIN_SetWindowPosition(_THIS, SDL_Window * window) || 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));