]> 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 f1cbc37ca7a28b9775c920f90266723c570ef6d0..8abe18411ce1e7d8d1e5edd747c910eaf826af0b 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:
 // Author:      Vaclav Slavik
 // Id:          $Id$
-// Copyright:   (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
+// Copyright:   (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
-    #pragma implementation "toplevel.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -29,6 +25,7 @@
 #include "wx/defs.h"
 #include "wx/toplevel.h"
 #include "wx/app.h"
+#include "wx/mgl/private.h"
 
 // ----------------------------------------------------------------------------
 // idle system
@@ -61,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)
@@ -71,20 +68,39 @@ 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);
 
     wxTopLevelWindows.Append(this);
-
     m_title = title;
 
     return TRUE;
@@ -160,16 +176,19 @@ bool wxTopLevelWindowMGL::Show(bool show)
 
 void wxTopLevelWindowMGL::Maximize(bool maximize)
 {
+    int x, y, w, h;
+    wxClientDisplayRect(&x, &y, &w, &h);
+
+    rect_t screenRect = MGL_defRect(x, y, w, h);
+    MGL_wmInvalidateRect(g_winMng, &screenRect);
+
     if ( maximize && !m_isMaximized )
     {
-        int x, y, w, h;
-        
         m_isMaximized = TRUE;
 
         GetPosition(&m_savedFrame.x, &m_savedFrame.y);
         GetSize(&m_savedFrame.width, &m_savedFrame.height);
 
-        wxClientDisplayRect(&x, &y, &w, &h);
         SetSize(x, y, w, h);
     }
     else if ( !maximize && m_isMaximized )
@@ -197,9 +216,11 @@ void wxTopLevelWindowMGL::Restore()
     }
 }
 
-void wxTopLevelWindowMGL::Iconize(bool iconize)
+void wxTopLevelWindowMGL::Iconize(bool WXUNUSED(iconize))
 {
-    // FIXME_MGL - use wxDesktop for this
+    wxFAIL_MSG(wxT("Iconize not supported under wxMGL"));
+    // FIXME_MGL - Iconize is not supported in fullscreen mode.
+    //             It will be supported in windowed mode (if ever implemented in MGL...)
 }
 
 bool wxTopLevelWindowMGL::IsIconized() const