From f287a2bce91b3ee78e87b2784e747e3992e56be8 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 1 Dec 2009 12:08:34 +0000 Subject: [PATCH] The window positions are relative to the origin of the windowing system (upper left of the primary display). Fixed the mouse positions for windowed mouse movement. --- src/video/cocoa/SDL_cocoawindow.m | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index fa18821a1..8c37c546b 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -98,11 +98,10 @@ - (void)windowDidExpose:(NSNotification *)aNotification - (void)windowDidMove:(NSNotification *)aNotification { int x, y; - NSRect disp = CGDisplayBounds(_data->display); NSRect rect = [_data->window contentRectForFrameRect:[_data->window frame]]; ConvertNSRect(&rect); - x = (int)rect.origin.x - disp.origin.x; - y = (int)rect.origin.y - disp.origin.y; + x = (int)rect.origin.x; + y = (int)rect.origin.y; SDL_SendWindowEvent(_data->windowID, SDL_WINDOWEVENT_MOVED, x, y); } @@ -245,11 +244,11 @@ - (void)mouseMoved:(NSEvent *)theEvent point.x = point.x - rect.origin.x; point.y = rect.size.height - point.y; } else { - rect = [_data->window contentRectForFrameRect:[_data->window frame]]; - point.y = rect.size.height - (point.y - rect.origin.y); + point.x -= window->x; + point.y = CGDisplayPixelsHigh(kCGDirectMainDisplay) - point.y - window->y; } - if ( point.x < 0 || point.x >= rect.size.width || - point.y < 0 || point.y >= rect.size.height ) { + if ( point.x < 0 || point.x >= window->w || + point.y < 0 || point.y >= window->h ) { if (mouse->focus != 0) { SDL_SetMouseFocus(index, 0); } @@ -332,11 +331,10 @@ - (BOOL)canBecomeMainWindow /* Fill in the SDL window with the window data */ { - NSRect disp = CGDisplayBounds(data->display); NSRect rect = [nswindow contentRectForFrameRect:[nswindow frame]]; ConvertNSRect(&rect); - window->x = (int)rect.origin.x - disp.origin.x; - window->y = (int)rect.origin.y - disp.origin.y; + window->x = (int)rect.origin.x; + window->y = (int)rect.origin.y; window->w = (int)rect.size.width; window->h = (int)rect.size.height; } @@ -401,13 +399,13 @@ - (BOOL)canBecomeMainWindow || window->x == SDL_WINDOWPOS_CENTERED) { rect.origin.x += (rect.size.width - window->w) / 2; } else if (window->x != SDL_WINDOWPOS_UNDEFINED) { - rect.origin.x += window->x; + rect.origin.x = window->x; } if ((window->flags & SDL_WINDOW_FULLSCREEN) || window->y == SDL_WINDOWPOS_CENTERED) { rect.origin.y += (rect.size.height - window->h) / 2; } else if (window->x != SDL_WINDOWPOS_UNDEFINED) { - rect.origin.y += window->y; + rect.origin.y = window->y; } rect.size.width = window->w; rect.size.height = window->h; @@ -500,13 +498,13 @@ - (BOOL)canBecomeMainWindow || window->x == SDL_WINDOWPOS_CENTERED) { rect.origin.x += (rect.size.width - window->w) / 2; } else { - rect.origin.x += window->x; + rect.origin.x = window->x; } if ((window->flags & SDL_WINDOW_FULLSCREEN) || window->y == SDL_WINDOWPOS_CENTERED) { rect.origin.y += (rect.size.height - window->h) / 2; } else { - rect.origin.y += window->y; + rect.origin.y = window->y; } rect.size.width = window->w; rect.size.height = window->h;