diff --git a/src/SFML/Window/OSX/SFWindowController.h b/src/SFML/Window/OSX/SFWindowController.h index 0b2c1852..50d754f3 100644 --- a/src/SFML/Window/OSX/SFWindowController.h +++ b/src/SFML/Window/OSX/SFWindowController.h @@ -65,6 +65,7 @@ namespace sf { -(id)initWithMode:(sf::VideoMode const*)mode andStyle:(unsigned long)style; -(void)dealloc; +-(float)screenHeight; -(float)titlebarHeight; @end diff --git a/src/SFML/Window/OSX/SFWindowController.mm b/src/SFML/Window/OSX/SFWindowController.mm index 0de2dbf1..d2dbc6ab 100644 --- a/src/SFML/Window/OSX/SFWindowController.mm +++ b/src/SFML/Window/OSX/SFWindowController.mm @@ -263,7 +263,7 @@ NSPoint point = NSMakePoint(x, y); // Flip for SFML window coordinate system. - point.y = NSHeight([[myWindow screen] visibleFrame]) - point.y; + point.y = [self screenHeight] - point.y; // Place the window. [myWindow setFrameTopLeftPoint:point]; @@ -421,6 +421,33 @@ #pragma mark #pragma mark Other methods +//////////////////////////////////////////////////////// +-(float)screenHeight { + // We want to recompute it because the user may have moved the window to another screen + // since last time. + static float height = 0.f; + static NSDate* lastTime = [NSDate date]; + if (height > 1.f && // height was set at least once. + [lastTime timeIntervalSinceNow] > -1.f) { // last time was less than one secode ago. + return height; // We don't want to compute it too often because the dock blink. + } + + // Save current settings. + NSApplicationPresentationOptions currentOptions = [NSApp currentSystemPresentationOptions]; + + // Hide dock. + [NSApp setPresentationOptions:currentOptions | NSApplicationPresentationHideDock]; + + // Get the screen height (without apple menu bar if there is one). + height = NSHeight([[myWindow screen] visibleFrame]); + lastTime = [NSDate date]; + + // Set back user's settings. + [NSApp setPresentationOptions:currentOptions]; + + return height; +} + //////////////////////////////////////////////////////// -(float)titlebarHeight { return NSHeight([myWindow frame]) - NSHeight([[myWindow contentView] frame]);