From 0cf57db9c2aea328f6c29cb4742fdc17c44c0231 Mon Sep 17 00:00:00 2001 From: mantognini Date: Fri, 21 Jan 2011 22:41:22 +0000 Subject: [PATCH] OSX, fixed sf::Window::SetPosition git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1773 4e206d99-4929-0410-ac5d-dfc041789085 --- src/SFML/Window/OSX/SFWindowController.h | 1 + src/SFML/Window/OSX/SFWindowController.mm | 29 ++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) 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]);