]> git.saurik.com Git - wxWidgets.git/commitdiff
- removed GDI lists from wxMGL
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 21 Nov 2001 00:00:12 +0000 (00:00 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 21 Nov 2001 00:00:12 +0000 (00:00 +0000)
- friendlier wxApp::SetDisplayMode
- redirects stdout and stderr to files if __WXDEBUG__
- wxLog initialization and flushing fixes

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12546 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mgl/app.cpp
src/mgl/bitmap.cpp
src/mgl/brush.cpp
src/mgl/font.cpp
src/mgl/pen.cpp
src/mgl/window.cpp

index 77a30f02201f2d299e1db977e8c0ff7709fb2039..bcb909fcc82f6cbaac67c73a0d798bd112f2659e 100644 (file)
 #include "wx/univ/colschem.h"
 #include "wx/mgl/private.h"
 
-#define MGL_DEBUG
-
-#if defined(MGL_DEBUG) && !defined(__WXDEBUG__)
-#undef MGL_DEBUG
-#endif
-
 //-----------------------------------------------------------------------------
 // Global data
 //-----------------------------------------------------------------------------
@@ -166,14 +160,14 @@ static bool wxCreateMGL_WM(const wxDisplayModeInfo& displayMode)
         refresh = wxSystemOptions::GetOptionInt(wxT("mgl.screen-refresh"));
 #endif
         
-    mode = MGL_findMode(displayMode.GetScreenSize().x
-                        displayMode.GetScreenSize().y
+    mode = MGL_findMode(displayMode.GetWidth()
+                        displayMode.GetHeight()
                         displayMode.GetDepth());
     if ( mode == -1 )
     {
         wxLogError(_("Mode %ix%i-%i not available."), 
-                     displayMode.GetScreenSize().x, 
-                     displayMode.GetScreenSize().y, 
+                     displayMode.GetWidth(),
+                     displayMode.GetHeight(),
                      displayMode.GetDepth());
         return FALSE;
     }
@@ -253,12 +247,16 @@ bool wxApp::OnInitGui()
     if ( !wxAppBase::OnInitGui() )
         return FALSE;
 
-#ifdef MGL_DEBUG
-    // That damn MGL redirects stdin and stdout to physical console
-    FILE *file = fopen("stderr", "wt");
-    wxLog::SetActiveTarget(new wxLogStderr(file));
+#ifdef __WXDEBUG__
+    // MGL redirects stdout and stderr to physical console, so lets redirect
+    // it to file. Do it only when WXDEBUG environment variable is set
+    if ( wxGetEnv(wxT("WXDEBUG"), NULL) )
+        freopen("output.err", "wt", stderr);
 #endif
 
+    wxLog *oldLog = wxLog::SetActiveTarget(new wxLogGui);
+    if ( oldLog ) delete oldLog;
+
     return TRUE;
 }
 
@@ -288,6 +286,11 @@ void wxApp::OnIdle(wxIdleEvent &event)
     // 'Garbage' collection of windows deleted with Close().
     DeletePendingObjects();
 
+#if wxUSE_LOG
+    // flush the logged messages if any
+    wxLog::FlushActive();
+#endif // wxUSE_LOG
+
     // Send OnIdle events to all windows
     if ( SendIdleEvents() )
         event.RequestMore(TRUE);
@@ -432,14 +435,7 @@ 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();
-    if (log != NULL && log->HasPendingMessages())
-        log->Flush();
-
     // continuing to use user defined log target is unsafe from now on because
     // some resources may be already unavailable, so replace it by something
     // more safe
@@ -448,6 +444,8 @@ void wxApp::CleanUp()
         delete oldlog;
 #endif // wxUSE_LOG
 
+    delete gs_rootWindow;
+
     wxModule::CleanUpModules();
 
 #if wxUSE_WX_RESOURCES
@@ -611,6 +609,12 @@ int wxEntry(int argc, char *argv[])
                 }
             }
 
+#if wxUSE_LOG
+            // flush the logged messages if any
+            wxLog *log = wxLog::GetActiveTarget();
+            if (log != NULL && log->HasPendingMessages())
+                log->Flush();
+#endif // wxUSE_LOG
             retValue = wxTheApp->OnExit();
         }
     }
index 0520051d37d233516b80ca4fa5f3fc21ee890066..12e0bbeac94ad34ac0778fab957e8dc79dae753c 100644 (file)
@@ -191,16 +191,9 @@ wxBitmapRefData::~wxBitmapRefData()
 IMPLEMENT_ABSTRACT_CLASS(wxBitmapHandler,wxObject)
 IMPLEMENT_DYNAMIC_CLASS(wxBitmap,wxBitmapBase)
 
-wxBitmap::wxBitmap()
-{
-    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
-}
-
 wxBitmap::wxBitmap(int width, int height, int depth)
 {
     Create(width, height, depth);
-
-    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 }
 
 
@@ -285,8 +278,6 @@ bool wxBitmap::CreateFromXpm(const char **bits)
     
     *this = wxBitmap(img);
     
-    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
-
     return TRUE;
 }
 
@@ -370,15 +361,11 @@ wxImage wxBitmap::ConvertToImage() const
 wxBitmap::wxBitmap(const wxBitmap& bmp)
 {
     Ref(bmp);
-
-    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 }
 
 wxBitmap::wxBitmap(const wxString &filename, wxBitmapType type)
 {
     LoadFile(filename, type);
-
-    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 }
 
 wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
@@ -393,13 +380,6 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
     bdc->clearDevice();
     bdc->putMonoImage(0, 0, width, (width + 7) / 8, height, (void*)bits);
     delete bdc;
-
-    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
-}
-
-wxBitmap::~wxBitmap()
-{
-    if ( wxTheBitmapList ) wxTheBitmapList->DeleteObject(this);
 }
 
 wxBitmap& wxBitmap::operator = (const wxBitmap& bmp)
index 173c3b2b3c205e418314aab4509e93f39c5775a7..6bddd63b3b2b3e926d972f2ca1b79fe6248a2930 100644 (file)
@@ -121,18 +121,11 @@ wxBrushRefData::wxBrushRefData(const wxBrushRefData& data)
 
 IMPLEMENT_DYNAMIC_CLASS(wxBrush,wxGDIObject)
 
-wxBrush::wxBrush()
-{
-    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
-}
-
 wxBrush::wxBrush(const wxColour &colour, int style)
 {
     m_refData = new wxBrushRefData();
     M_BRUSHDATA->m_style = style;
     M_BRUSHDATA->m_colour = colour;
-
-    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
 }
 
 wxBrush::wxBrush(const wxBitmap &stippleBitmap)
@@ -152,20 +145,11 @@ wxBrush::wxBrush(const wxBitmap &stippleBitmap)
                M_BRUSHDATA->m_style = wxSTIPPLE_MASK_OPAQUE;
        else
                M_BRUSHDATA->m_style = wxSTIPPLE;
-
-    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
 }
 
 wxBrush::wxBrush(const wxBrush &brush)
 {
     Ref(brush);
-
-    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
-}
-
-wxBrush::~wxBrush()
-{
-    if (wxTheBrushList) wxTheBrushList->RemoveBrush(this);
 }
 
 wxBrush& wxBrush::operator = (const wxBrush& brush)
index 85e934c02cd75e6a9f9d040c4afb8afab74358e9..cc8dd3fb38b87dd8fd77236be568177c94ca73b1 100644 (file)
@@ -150,12 +150,6 @@ wxFontRefData::~wxFontRefData()
 
 IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
 
-void wxFont::Init()
-{
-    if (wxTheFontList)
-        wxTheFontList->Append(this);
-}
-
 bool wxFont::Create(const wxNativeFontInfo& info)
 {
     return Create(info.pointSize, info.family, info.style, info.weight,
@@ -206,12 +200,6 @@ void wxFont::Unshare()
     }
 }
 
-wxFont::~wxFont()
-{
-    if (wxTheFontList)
-        wxTheFontList->DeleteObject(this);
-}
-
 // ----------------------------------------------------------------------------
 // accessors
 // ----------------------------------------------------------------------------
index eacb859d6cfa49a78defc39abb6802a1f49df4d1..18c599c4774046e39b58b403f9f35f3f04abd481 100644 (file)
@@ -79,21 +79,12 @@ wxPenRefData::wxPenRefData(const wxPenRefData& data)
 
 IMPLEMENT_DYNAMIC_CLASS(wxPen,wxGDIObject)
 
-wxPen::wxPen()
-{
-    if ( wxThePenList ) 
-        wxThePenList->AddPen(this);
-}
-
 wxPen::wxPen(const wxColour &colour, int width, int style)
 {
     m_refData = new wxPenRefData();
     M_PENDATA->m_width = width;
     M_PENDATA->m_style = style;
     M_PENDATA->m_colour = colour;
-
-    if ( wxThePenList )
-        wxThePenList->AddPen(this);
 }
 
 wxPen::wxPen(const wxBitmap& stipple, int width)
@@ -107,22 +98,11 @@ wxPen::wxPen(const wxBitmap& stipple, int width)
     M_PENDATA->m_style = wxSTIPPLE;
     M_PENDATA->m_stipple = stipple;
     wxBitmapToPixPattern(stipple, &(M_PENDATA->m_pixPattern), NULL);
-
-    if ( wxThePenList ) 
-        wxThePenList->AddPen(this);
 }
 
 wxPen::wxPen(const wxPen& pen)
 {
     Ref(pen);
-    if ( wxThePenList )
-        wxThePenList->AddPen(this);
-}
-
-wxPen::~wxPen()
-{
-    if ( wxThePenList )
-        wxThePenList->RemovePen(this);
 }
 
 wxPen& wxPen::operator = (const wxPen& pen)
index 830b19167d6990126a95893ed3f4fc350bc2c8bf..346c33f826b60b550786d07ef1a336eaec7817dd 100644 (file)
@@ -132,6 +132,7 @@ static void wxWindowPainter(window_t *wnd, MGLDC *dc)
 static ibool wxWindowMouseHandler(window_t *wnd, event_t *e)
 {
     wxWindowMGL *win = (wxWindowMGL*)MGL_wmGetWindowUserData(wnd);
+    wxPoint orig(win->GetClientAreaOrigin());
     wxPoint where;
     
     MGL_wmCoordGlobalToLocal(win->GetHandle(), 
@@ -149,8 +150,8 @@ static ibool wxWindowMouseHandler(window_t *wnd, event_t *e)
     wxMouseEvent event;
     event.SetEventObject(win);
     event.SetTimestamp(e->when);
-    event.m_x = where.x;
-    event.m_y = where.y;
+    event.m_x = where.x - orig.x;
+    event.m_y = where.y - orig.y;
     event.m_shiftDown = e->modifiers & EVT_SHIFTKEY;
     event.m_controlDown = e->modifiers & EVT_CTRLSTATE;
     event.m_altDown = e->modifiers & EVT_LEFTALT;
@@ -194,6 +195,10 @@ static ibool wxWindowMouseHandler(window_t *wnd, event_t *e)
                                                  e->where_x, e->where_y, 
                                                  &event2.m_x, &event2.m_y);
 
+                        wxPoint orig(gs_windowUnderMouse->GetClientAreaOrigin());
+                        event2.m_x -= orig.x;
+                        event2.m_y -= orig.y;
+
                         event2.SetEventObject(gs_windowUnderMouse);
                         event2.SetEventType(wxEVT_LEAVE_WINDOW);
                         gs_windowUnderMouse->GetEventHandler()->ProcessEvent(event2);
@@ -469,7 +474,7 @@ 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));
+        wxTheApp->SetDisplayMode(wxDisplayModeInfo(640, 480, 16));
 
     // generic:
     InitBase();