reworked display mode stuff once again
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 4 Nov 2001 23:32:52 +0000 (23:32 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 4 Nov 2001 23:32:52 +0000 (23:32 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12320 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mgl/app.cpp
src/mgl/utils.cpp
src/mgl/window.cpp

index 164860cf2a581a3582b38d015ee869ad3ccabf30..d4903a2af29190f2ca6e431984a6c5f6d2caac0a 100644 (file)
@@ -170,11 +170,11 @@ static bool wxCreateMGL_WM(const wxDisplayModeInfo& displayMode)
                         displayMode.GetDepth());
     if ( mode == -1 )
     {
-        wxLogWarning(_("Mode %ix%i-%i not available, falling back to default mode."), 
+        wxLogError(_("Mode %ix%i-%i not available."), 
                      displayMode.GetScreenSize().x, 
                      displayMode.GetScreenSize().y, 
                      displayMode.GetDepth());
-        mode = 0; // always available
+        return FALSE;
     }
     g_displayDC = new MGLDisplayDC(mode, 1, refresh);
     if ( !g_displayDC->isValid() )
@@ -187,7 +187,7 @@ static bool wxCreateMGL_WM(const wxDisplayModeInfo& displayMode)
     g_winMng = MGL_wmCreate(g_displayDC->getDC());
     if (!g_winMng)
         return FALSE;
-    
+
     return TRUE;
 }
 
@@ -218,7 +218,6 @@ END_EVENT_TABLE()
 
 wxApp::wxApp() : m_mainLoop(NULL)
 {
-    m_displayMode = wxDisplayModeInfo(wxSize(640, 480), 16);
 }
 
 wxApp::~wxApp()
@@ -234,26 +233,24 @@ bool wxApp::SetDisplayMode(const wxDisplayModeInfo& mode)
     if ( g_displayDC != NULL )
     {
         // FIXME_MGL -- we currently don't allow to switch video mode
-        // at runtime. This can hopefully be changed...
+        // more than once. This can hopefully be changed...
         wxFAIL_MSG(wxT("Can't change display mode after intialization!"));
         return FALSE;
     }
+
+    if ( !wxCreateMGL_WM(mode) )
+        return FALSE;
+    gs_rootWindow = new wxRootWindow;
+
     m_displayMode = mode;
+
     return TRUE;
 }
 
 bool wxApp::OnInitGui()
 {
-    if ( !wxCreateMGL_WM(m_displayMode) )
-        return FALSE;
-
-    // This has to be done *after* wxCreateMGL_WM() because it initializes 
-    // wxUniv's themes
     if ( !wxAppBase::OnInitGui() )
         return FALSE;
-        
-    // ...and this has to be done after wxUniv themes were initialized
-    gs_rootWindow = new wxRootWindow;
 
 #ifdef MGL_DEBUG
     // That damn MGL redirects stdin and stdout to physical console
index 2b189d5056cc0c0233b1f4441707eff9f7f0e9da..6459d48004dab77f1b7c4d9e84c4e004f1594912 100644 (file)
@@ -42,14 +42,14 @@ void wxBell()
 
 void wxDisplaySize(int *width, int *height)
 {
-    wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
+    wxASSERT_MSG( g_displayDC, wxT("You must call wxApp::SetDisplayMode before using this function") );
     if (width) *width = g_displayDC->sizex()+1;
     if (height) *height = g_displayDC->sizey()+1;
 }
 
 void wxDisplaySizeMM(int *width, int *height)
 {
-    wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
+    wxASSERT_MSG( g_displayDC, wxT("You must call wxApp::SetDisplayMode before using this function") );
     if ( width ) 
         *width = (g_displayDC->sizex()+1) * 25/72;
     if ( height ) 
@@ -67,14 +67,14 @@ void wxClientDisplayRect(int *x, int *y, int *width, int *height)
 
 bool wxColourDisplay()
 {
-    wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
+    wxASSERT_MSG( g_displayDC, wxT("You must call wxApp::SetDisplayMode before using this function") );
     
     return (wxDisplayDepth() > 1);
 }
 
 int wxDisplayDepth()
 {
-    wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
+    wxASSERT_MSG( g_displayDC, wxT("You must call wxApp::SetDisplayMode before using this function") );
 
     return g_displayDC->getBitsPerPixel();
 }
index 6b6c5df6e5d57126fa7b17fdf836993f518356b0..3f98b46db10feafcc3834dc5b433d0984cf7c569 100644 (file)
@@ -466,6 +466,11 @@ END_EVENT_TABLE()
 
 void wxWindowMGL::Init()
 {
+    // First of all, make sure window manager is up and running. If it is
+    // not the case, initialize it in default display mode
+    if ( !g_winMng )
+        wxTheApp->SetDisplayMode(wxDisplayModeInfo(wxSize(640, 480), 16));
+
     // generic:
     InitBase();