]> git.saurik.com Git - wxWidgets.git/commitdiff
cleanup in wxMGL code
authorVáclav Slavík <vslavik@fastmail.fm>
Tue, 30 Oct 2001 23:30:51 +0000 (23:30 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Tue, 30 Oct 2001 23:30:51 +0000 (23:30 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12223 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mgl/app.h
include/wx/mgl/dialog.h [deleted file]
include/wx/mgl/frame.h [deleted file]
include/wx/mgl/private.h
include/wx/mgl/window.h
src/mgl/app.cpp
src/mgl/toplevel.cpp
src/mgl/utils.cpp
src/mgl/window.cpp

index bc57b0ae9efe97caa879eca94192d0d8b4a2f9bd..526328c674388b2f03a0ac6ed0b9849bd82a6ca5 100644 (file)
@@ -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 (file)
index ec20a3e..0000000
+++ /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 (file)
index 0964f60..0000000
+++ /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__
index 02c174f892229b3e4b766bbdfb7f134a78963951..b4238f08a2695892acc6eb3656c81f6fcfefd398 100644 (file)
@@ -49,7 +49,4 @@ public:
 };
 
 
-extern bool wxCreateMGL_WM();
-extern void wxDestroyMGL_WM();
-
 #endif // _WX_PRIVATE_H_
index 5bf12728de000e9bb2990bba37fb64ed6bd90382..51bc37f24c4b3d97c224314b3cdfffb9805b8c8d 100644 (file)
@@ -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
     // --------------------------
index a5aba35432a1b58358c0a690276568e7d97b5c35..39d708ed0b55d70bf9da404f46e3148a1c0e74cb 100644 (file)
@@ -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();
index f1cbc37ca7a28b9775c920f90266723c570ef6d0..d02dac8c3e8593fbb3859b35b4962a1f814893aa 100644 (file)
@@ -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
index e3c3c53606e80b16d0bcdb4bb1daa35ed27f759d..2b189d5056cc0c0233b1f4441707eff9f7f0e9da 100644 (file)
@@ -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()
index cb44a8ad2666cdda6a500d764633a19b4fe0f04f..08ad332bceaa9fccf834b2fca46142d52493afb2 100644 (file)
@@ -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());
 }
 
 // ---------------------------------------------------------------------------