From 6a32ca7a3919fa6cb2956bd09bcde39f4f313741 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Wed, 9 Sep 2015 13:55:11 -0300 Subject: [PATCH] Mac: Fixed SDL_SetWindowSize to set the size of the content area of the window, rather than the total size including decorations. --- src/video/cocoa/SDL_cocoawindow.m | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index b2521123f..258c67733 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -1288,13 +1288,23 @@ Cocoa_SetWindowSize(_THIS, SDL_Window * window) { SDL_WindowData *windata = (SDL_WindowData *) window->driverdata; NSWindow *nswindow = windata->nswindow; + NSRect rect; + Uint32 moveHack; - NSRect frame = [nswindow frame]; - frame.origin.y = (frame.origin.y + frame.size.height) - ((float) window->h); - frame.size.width = window->w; - frame.size.height = window->h; + /* Cocoa will resize the window from the bottom-left rather than the + * top-left when -[nswindow setContentSize:] is used, so we must set the + * entire frame based on the new size, in order to preserve the position. + */ + rect.origin.x = window->x; + rect.origin.y = window->y; + rect.size.width = window->w; + rect.size.height = window->h; + ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); - [nswindow setFrame:frame display:YES]; + moveHack = s_moveHack; + s_moveHack = 0; + [nswindow setFrame:[nswindow frameRectForContentRect:rect] display:YES]; + s_moveHack = moveHack; ScheduleContextUpdates(windata); }}