[Mac] Fixed initial window position
authorthefiddler <stapostol@gmail.com>
Fri, 2 May 2014 13:13:38 +0000 (15:13 +0200)
committerthefiddler <stapostol@gmail.com>
Fri, 2 May 2014 13:13:38 +0000 (15:13 +0200)
Cocoa sets the desktop origin at the bottom-left of the main screen,
with +y going up. OpenTK is setting the origin at the top-left of the
main screen, so we need to invert the y-axis.

Source/OpenTK/Platform/MacOS/CocoaNativeWindow.cs

index 53fb296..fd662e4 100644 (file)
@@ -173,7 +173,17 @@ namespace OpenTK.Platform.MacOS
             Class.RegisterClass(viewClass);
 
             // Create window instance
-            var contentRect = new System.Drawing.RectangleF(x, y, width, height);
+            // Note: The coordinate system of Cocoa places (0,0) at the bottom left.
+            // We need to get the height of the main screen and flip that in order
+            // to place the window at the correct position.
+            // Note: NSWindows are laid out relative to the main screen.
+            var screenRect =
+                Cocoa.SendRect(
+                    Cocoa.SendIntPtr(
+                        Cocoa.SendIntPtr(Class.Get("NSScreen"), Selector.Get("screens")),
+                        Selector.Get("objectAtIndex:"), 0),
+                    Selector.Get("frame"));
+            var contentRect = new System.Drawing.RectangleF(x, screenRect.Height - height - y, width, height);
             var style = GetStyleMask(windowBorder);
             var bufferingType = NSBackingStore.Buffered;