From: Václav Slavík Date: Sun, 4 Nov 2001 23:32:52 +0000 (+0000) Subject: reworked display mode stuff once again X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1f43b5c98597734ff951a9e6750fa2860b487d2a?ds=sidebyside reworked display mode stuff once again git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12320 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mgl/app.cpp b/src/mgl/app.cpp index 164860cf2a..d4903a2af2 100644 --- a/src/mgl/app.cpp +++ b/src/mgl/app.cpp @@ -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 diff --git a/src/mgl/utils.cpp b/src/mgl/utils.cpp index 2b189d5056..6459d48004 100644 --- a/src/mgl/utils.cpp +++ b/src/mgl/utils.cpp @@ -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(); } diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index 6b6c5df6e5..3f98b46db1 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -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();