Mac: Fixed SDL_SetWindowSize to set the size of the content area of the window, rather than the total size including decorations.
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index b252112..258c677 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);
}}