]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mgl/toplevel.cpp
added wxIsSameDouble() which wraps double comparison in a pragmas disabling icc warni...
[wxWidgets.git] / src / mgl / toplevel.cpp
index 2d23ae16d3bd1bff6747965ef0ab2c9088c0e50a..8abe18411ce1e7d8d1e5edd747c910eaf826af0b 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
-    #pragma implementation "toplevel.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -62,7 +58,7 @@ void wxTopLevelWindowMGL::Init()
 bool wxTopLevelWindowMGL::Create(wxWindow *parent,
                                  wxWindowID id,
                                  const wxString& title,
-                                 const wxPoint& pos,
+                                 const wxPoint& posOrig,
                                  const wxSize& sizeOrig,
                                  long style,
                                  const wxString &name)
@@ -72,14 +68,34 @@ bool wxTopLevelWindowMGL::Create(wxWindow *parent,
     wxSize size = sizeOrig;
     if ( size.x == -1 || size.y == -1 )
     {
-        wxSize sizeDpy = wxGetDisplaySize();
+        wxSize sizeDefault = GetDefaultSize();
         if ( size.x == -1 )
-            size.x = sizeDpy.x / 3;
+            size.x = sizeDefault.x;
         if ( size.y == -1 )
-            size.y = sizeDpy.y / 5;
+            size.y = sizeDefault.y;
     }
     
-    wxWindow::Create(NULL, id, pos, sizeOrig, style, name);
+    // for default positioning, centre the first top level window and
+    // cascade any addtional ones from there.
+    wxPoint pos = posOrig;
+    if ( pos.x == -1 || pos.y == -1 )
+    {
+        wxSize sizeDisplay = wxGetDisplaySize();
+        static wxPoint nextPos((sizeDisplay.x - size.x) / 2,
+                               (sizeDisplay.y - size.y) / 2);
+
+        if ( pos.x == -1 )
+            pos.x = nextPos.x;
+        if ( pos.y == -1 )
+            pos.y = nextPos.y;
+        if ( pos.x + size.x > sizeDisplay.x || pos.y + size.y > sizeDisplay.y )
+            pos = wxPoint();
+
+        const wxSize cascadeOffset(16, 20);
+        nextPos = pos + cascadeOffset;
+    }
+
+    wxWindow::Create(NULL, id, pos, size, style, name);
     SetParent(parent);
     if ( parent )
         parent->AddChild(this);