From 580616706f52835ee5ee48e6ef2ad15b822df971 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 30 Oct 2001 23:30:51 +0000 Subject: [PATCH] cleanup in wxMGL code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12223 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mgl/app.h | 1 + include/wx/mgl/dialog.h | 120 ----------------------------------- include/wx/mgl/frame.h | 132 --------------------------------------- include/wx/mgl/private.h | 3 - include/wx/mgl/window.h | 2 + src/mgl/app.cpp | 79 +++++++++++++++++++++++ src/mgl/toplevel.cpp | 7 ++- src/mgl/utils.cpp | 10 +-- src/mgl/window.cpp | 105 +++++++------------------------ 9 files changed, 113 insertions(+), 346 deletions(-) delete mode 100644 include/wx/mgl/dialog.h delete mode 100644 include/wx/mgl/frame.h diff --git a/include/wx/mgl/app.h b/include/wx/mgl/app.h index bc57b0ae9e..526328c674 100644 --- a/include/wx/mgl/app.h +++ b/include/wx/mgl/app.h @@ -24,6 +24,7 @@ class WXDLLEXPORT wxApp; class WXDLLEXPORT wxLog; class WXDLLEXPORT wxEventLoop; +class WXDLLEXPORT wxDesktopWindow; //----------------------------------------------------------------------------- // wxApp diff --git a/include/wx/mgl/dialog.h b/include/wx/mgl/dialog.h deleted file mode 100644 index ec20a3eb08..0000000000 --- a/include/wx/mgl/dialog.h +++ /dev/null @@ -1,120 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dialog.h -// Purpose: -// Author: Robert Roebling -// Created: -// Id: $Id$ -// Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __GTKDIALOGH__ -#define __GTKDIALOGH__ - -#ifdef __GNUG__ -#pragma interface "dialog.h" -#endif - -#include "wx/defs.h" -#include "wx/panel.h" -#include "wx/icon.h" - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class wxDialog; - -//----------------------------------------------------------------------------- -// global data -//----------------------------------------------------------------------------- - -//FIXME_MGL - belongs to wXUniv - -extern const wxChar *wxDialogNameStr; - -//----------------------------------------------------------------------------- -// wxDialog -//----------------------------------------------------------------------------- - -class wxDialog: public wxDialogBase -{ -public: - wxDialog() { Init(); } - wxDialog( wxWindow *parent, wxWindowID id, - const wxString &title, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString &name = wxDialogNameStr ) {} - bool Create( wxWindow *parent, wxWindowID id, - const wxString &title, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString &name = wxDialogNameStr ) {} - ~wxDialog() {} - - void SetTitle(const wxString& title){} - wxString GetTitle() const {} - - void OnApply( wxCommandEvent &event ) {} - void OnCancel( wxCommandEvent &event ) {} - void OnOK( wxCommandEvent &event ) {} - void OnPaint( wxPaintEvent& event ) {} - void OnSize( wxSizeEvent &event ) {} - void OnCloseWindow( wxCloseEvent& event ) {} - /* - void OnCharHook( wxKeyEvent& event ); - */ - - bool Destroy() {} - - virtual bool Show( bool show ) {} - virtual int ShowModal() {} - virtual void EndModal( int retCode ) {} - virtual bool IsModal() const {} - void SetModal( bool modal ) {} - - virtual void InitDialog(void) {} - - virtual void SetIcon( const wxIcon &icon ) {} - virtual void Iconize( bool WXUNUSED(iconize)) { } - virtual bool IsIconized() const { return FALSE; } - bool Iconized() const { return IsIconized(); } - virtual void Maximize() { } - virtual void Restore() { } - - virtual bool IsTopLevel() const { return TRUE; } - - // implementation - // -------------- - - // move the window to the specified location and resize it: this is called - // from both DoSetSize() and DoSetClientSize() - virtual void DoMoveWindow(int x, int y, int width, int height) {} - - virtual void GtkOnSize( int x, int y, int width, int height ) {} - virtual void OnInternalIdle() {} - - bool m_modalShowing; - wxString m_title; - wxIcon m_icon; - -protected: - // common part of all ctors - void Init() {} - - // common part of Destroy() and ~wxDialog - void CleanUp() {} - - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO) {} - -private: -// DECLARE_EVENT_TABLE() FIXME_MGL - DECLARE_DYNAMIC_CLASS(wxDialog) -}; - -#endif // __GTKDIALOGH__ diff --git a/include/wx/mgl/frame.h b/include/wx/mgl/frame.h deleted file mode 100644 index 0964f60afc..0000000000 --- a/include/wx/mgl/frame.h +++ /dev/null @@ -1,132 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/gtk/frame.h -// Purpose: -// Author: Vaclav Slavik -// Id: $Id$ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - - -#ifndef __MGL_FRAME_H__ -#define __MGL_FRAME_H__ - -#ifdef __GNUG__ - #pragma interface "frame.h" -#endif - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxMDIChildFrame; -class WXDLLEXPORT wxMDIClientWindow; -class WXDLLEXPORT wxMenu; -class WXDLLEXPORT wxMenuBar; -class WXDLLEXPORT wxToolBar; -class WXDLLEXPORT wxStatusBar; - -class WXDLLEXPORT wxFrameMGL; - -//----------------------------------------------------------------------------- -// wxFrame -//----------------------------------------------------------------------------- - -//FIXME_MGL -class WXDLLEXPORT wxFrameMGL : public wxFrameBase -{ -public: - // construction - wxFrameMGL() { Init(); } - wxFrameMGL(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) - { - Init(); - - Create(parent, id, title, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) {} - - virtual ~wxFrameMGL() {} - - // implement base class pure virtuals - virtual void Maximize(bool maximize = TRUE) {} - virtual bool IsMaximized() const {} - virtual void Iconize(bool iconize = TRUE) {} - virtual bool IsIconized() const {} - virtual void SetIcon(const wxIcon& icon) {} - virtual void MakeModal(bool modal = TRUE) {} - virtual void Restore() {} - -#if wxUSE_MENUS - virtual void SetMenuBar( wxMenuBar *menuBar ) {} -#endif // wxUSE_MENUS - -#if wxUSE_STATUSBAR - virtual void PositionStatusBar() {} - - virtual wxStatusBar* CreateStatusBar(int number = 1, - long style = wxST_SIZEGRIP, - wxWindowID id = 0, - const wxString& name = wxStatusLineNameStr) {} -#endif // wxUSE_STATUSBAR - -#if wxUSE_TOOLBAR - virtual wxToolBar* CreateToolBar(long style = wxNO_BORDER | wxTB_HORIZONTAL | wxTB_FLAT, - wxWindowID id = -1, - const wxString& name = wxToolBarNameStr) {} - void SetToolBar(wxToolBar *toolbar) {} -#endif // wxUSE_TOOLBAR - - virtual bool Show(bool show = TRUE) {} - - virtual void SetTitle( const wxString &title ) {} - virtual wxString GetTitle() const { return m_title; } - - // implementation from now on - // -------------------------- - - // move the window to the specified location and resize it: this is called - // from both DoSetSize() and DoSetClientSize() - virtual void DoMoveWindow(int x, int y, int width, int height) {} - - // GTK callbacks - virtual void GtkOnSize( int x, int y, int width, int height ) {} - virtual void OnInternalIdle() {} - - wxString m_title; - int m_miniEdge, - m_miniTitle; - bool m_menuBarDetached; - bool m_toolBarDetached; - bool m_insertInClientArea; /* not from within OnCreateXXX */ - -protected: - // common part of all ctors - void Init() {} - - // override wxWindow methods to take into account tool/menu/statusbars - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO) {} - - virtual void DoSetClientSize(int width, int height) {} - virtual void DoGetClientSize( int *width, int *height ) const {} - -private: - DECLARE_DYNAMIC_CLASS(wxFrameMGL) -}; - -#endif // __WX_FRAME_H__ diff --git a/include/wx/mgl/private.h b/include/wx/mgl/private.h index 02c174f892..b4238f08a2 100644 --- a/include/wx/mgl/private.h +++ b/include/wx/mgl/private.h @@ -49,7 +49,4 @@ public: }; -extern bool wxCreateMGL_WM(); -extern void wxDestroyMGL_WM(); - #endif // _WX_PRIVATE_H_ diff --git a/include/wx/mgl/window.h b/include/wx/mgl/window.h index 5bf12728de..51bc37f24c 100644 --- a/include/wx/mgl/window.h +++ b/include/wx/mgl/window.h @@ -102,6 +102,8 @@ public: #endif // WXWIN_COMPATIBILITY virtual WXWidget GetHandle() const { return m_wnd; } + + void SetMGLwindow_t(struct window_t *wnd); // implementation from now on // -------------------------- diff --git a/src/mgl/app.cpp b/src/mgl/app.cpp index a5aba35432..39d708ed0b 100644 --- a/src/mgl/app.cpp +++ b/src/mgl/app.cpp @@ -33,6 +33,7 @@ #include "wx/fontutil.h" #include "wx/univ/theme.h" #include "wx/univ/renderer.h" +#include "wx/univ/colschem.h" #include "wx/mgl/private.h" #define MGL_DEBUG @@ -127,6 +128,79 @@ void wxWakeUpIdle() #endif } +//----------------------------------------------------------------------------- +// Root window +//----------------------------------------------------------------------------- + +class wxRootWindow : public wxWindow +{ + public: + wxRootWindow() : wxWindow(NULL, -1) + { + SetMGLwindow_t(MGL_wmGetRootWindow(g_winMng)); + SetBackgroundColour(wxTHEME_COLOUR(DESKTOP)); + } + ~wxRootWindow() + { + // we don't want to delete MGL_WM's rootWnd + m_wnd = NULL; + } + + virtual bool AcceptsFocus() { return FALSE; } +}; + +static wxRootWindow *gs_rootWindow = NULL; + +//----------------------------------------------------------------------------- +// MGL initialization +//----------------------------------------------------------------------------- + +static bool wxCreateMGL_WM() +{ + int mode; + int width = 640, height = 480, depth = 16; + int refresh = MGL_DEFAULT_REFRESH; + +#if wxUSE_SYSTEM_OPTIONS + if ( wxSystemOptions::HasOption(wxT("mgl.screen-refresh") ) + refresh = wxSystemOptions::GetOptionInt(wxT("mgl.screen-refresh")); +#endif + + mode = MGL_findMode(width, height, depth); + if ( mode == -1 ) + { + wxLogWarning(_("Mode %ix%i-%i not available, falling back to default mode."), width, height, depth); + mode = 0; // always available + } + g_displayDC = new MGLDisplayDC(mode, 1, refresh); + if ( !g_displayDC->isValid() ) + { + delete g_displayDC; + g_displayDC = NULL; + return FALSE; + } + + g_winMng = MGL_wmCreate(g_displayDC->getDC()); + if (!g_winMng) + return FALSE; + + return TRUE; +} + +static void wxDestroyMGL_WM() +{ + if ( g_winMng ) + { + MGL_wmDestroy(g_winMng); + g_winMng = NULL; + } + if ( g_displayDC ) + { + delete g_displayDC; + g_displayDC = NULL; + } +} + //----------------------------------------------------------------------------- // wxApp //----------------------------------------------------------------------------- @@ -155,6 +229,9 @@ bool wxApp::OnInitGui() // 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 @@ -335,6 +412,8 @@ wxIcon wxApp::GetStdIcon(int which) const void wxApp::CleanUp() { + delete gs_rootWindow; + #if wxUSE_LOG // flush the logged messages if any wxLog *log = wxLog::GetActiveTarget(); diff --git a/src/mgl/toplevel.cpp b/src/mgl/toplevel.cpp index f1cbc37ca7..d02dac8c3e 100644 --- a/src/mgl/toplevel.cpp +++ b/src/mgl/toplevel.cpp @@ -84,7 +84,6 @@ bool wxTopLevelWindowMGL::Create(wxWindow *parent, parent->AddChild(this); wxTopLevelWindows.Append(this); - m_title = title; return TRUE; @@ -197,9 +196,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 diff --git a/src/mgl/utils.cpp b/src/mgl/utils.cpp index e3c3c53606..2b189d5056 100644 --- a/src/mgl/utils.cpp +++ b/src/mgl/utils.cpp @@ -59,14 +59,10 @@ void wxDisplaySizeMM(int *width, int *height) void wxClientDisplayRect(int *x, int *y, int *width, int *height) { - // This is supposed to return desktop dimensions minus any window - // manager panels, menus, taskbars, etc. If there is a way to do that - // for this platform please fix this function, otherwise it defaults - // to the entire desktop. - if (x) *x = 0; - if (y) *y = 0; + if ( x ) *x = 0; + if ( y ) *y = 0; wxDisplaySize(width, height); - // FIXME_MGL -- make it use wxDesktop class when there's one + // FIXME_MGL - windowed version needs different handling } bool wxColourDisplay() diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index cb44a8ad26..08ad332bce 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -90,80 +90,6 @@ enum // private functions // --------------------------------------------------------------------------- -// wxCreateMGL_WM creates MGL display DC and associates it with winmng_t -// structure. Dimensions and depth of the DC are fetched from wxSystemOptions -// object. -// This function is *not* called from wxApp's initialization but rather at -// the time when WM is needed, i.e. when first wxWindow is created. This -// has two important effects: -// a) it is possible to write windowless wxMGL apps -// b) the app has plenty of time in wxApp::OnInit to feed wxSystemOptions -// with desired settings - -// FIXME_MGL -- move to app.cpp?? -static void wxDesktopPainter(window_t *wnd, MGLDC *dc) -{ - // FIXME_MGL - for now... - MGL_setColorRGB(0x63, 0x63, 0x96); - MGL_fillRectCoord(0, 0, wnd->width, wnd->height); -} - - -bool wxCreateMGL_WM() -{ - int mode; - int width = 640, height = 480, depth = 16; - int refresh = MGL_DEFAULT_REFRESH; - -#if wxUSE_SYSTEM_OPTIONS - // FIXME_MGL -- so what is The Proper Way? - if ( wxSystemOptions::HasOption(wxT("mgl.screen-width") ) - width = wxSystemOptions::GetOptionInt(wxT("mgl.screen-width")); - if ( wxSystemOptions::HasOption(wxT("mgl.screen-height") ) - height = wxSystemOptions::GetOptionInt(wxT("mgl.screen-height")); - if ( wxSystemOptions::HasOption(wxT("mgl.screen-depth") ) - depth = wxSystemOptions::GetOptionInt(wxT("mgl.screen-depth")); - if ( wxSystemOptions::HasOption(wxT("mgl.screen-refresh") ) - refresh = wxSystemOptions::GetOptionInt(wxT("mgl.screen-refresh")); -#endif - - mode = MGL_findMode(width, height, depth); - if ( mode == -1 ) - { - wxLogWarning(_("Mode %ix%i-%i not available, falling back to default mode."), width, height, depth); - mode = 0; // always available - } - g_displayDC = new MGLDisplayDC(mode, 1, refresh); - if ( !g_displayDC->isValid() ) - { - delete g_displayDC; - g_displayDC = NULL; - return FALSE; - } - - g_winMng = MGL_wmCreate(g_displayDC->getDC()); - if (!g_winMng) - return FALSE; - - MGL_wmSetWindowPainter(MGL_wmGetRootWindow(g_winMng), wxDesktopPainter); - - return TRUE; -} - -void wxDestroyMGL_WM() -{ - if ( g_winMng ) - { - MGL_wmDestroy(g_winMng); - g_winMng = NULL; - } - if ( g_displayDC ) - { - delete g_displayDC; - g_displayDC = NULL; - } -} - // Returns toplevel grandparent of given window: static wxWindowMGL* wxGetTopLevelParent(wxWindowMGL *win) { @@ -634,18 +560,35 @@ bool wxWindowMGL::Create(wxWindow *parent, wnd_parent = NULL; } - m_wnd = MGL_wmCreateWindow(g_winMng, wnd_parent, x, y, w, h); + window_t *wnd = MGL_wmCreateWindow(g_winMng, wnd_parent, x, y, w, h); + + MGL_wmSetWindowFlags(wnd, mgl_style); + MGL_wmShowWindow(wnd, m_isShown); + + SetMGLwindow_t(wnd); + + return TRUE; +} + +void wxWindowMGL::SetMGLwindow_t(struct window_t *wnd) +{ + if ( m_wnd ) + MGL_wmDestroyWindow(m_wnd); + + m_wnd = wnd; + if ( !m_wnd ) return; + + m_isShown = m_wnd->visible; - MGL_wmSetWindowFlags(m_wnd, mgl_style); MGL_wmSetWindowUserData(m_wnd, (void*) this); MGL_wmSetWindowPainter(m_wnd, wxWindowPainter); - MGL_wmShowWindow(m_wnd, m_isShown); - MGL_wmSetWindowCursor(m_wnd, *wxSTANDARD_CURSOR->GetMGLCursor()); - MGL_wmPushWindowEventHandler(m_wnd, wxWindowMouseHandler, EVT_MOUSEEVT, 0); MGL_wmPushWindowEventHandler(m_wnd, wxWindowKeybHandler, EVT_KEYEVT, 0); - - return TRUE; + + if ( m_cursor.Ok() ) + MGL_wmSetWindowCursor(m_wnd, *m_cursor.GetMGLCursor()); + else + MGL_wmSetWindowCursor(m_wnd, *wxSTANDARD_CURSOR->GetMGLCursor()); } // --------------------------------------------------------------------------- -- 2.45.2