]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mgl/dcclient.cpp
Replaced /'s with \'s as BCC requires \'s for path names
[wxWidgets.git] / src / mgl / dcclient.cpp
index c0e73aabc06687d4d1244fb7dc017b1de9da439f..8edae04c3b05fecff9dd1ab4ae01a8d0cad90f73 100644 (file)
@@ -1,9 +1,9 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        gtk/dcclient.cpp
+// Name:        dcclient.cpp
 // Purpose:
 // Purpose:
-// Author:      Robert Roebling
+// Author:      Vaclav Slavik
 // RCS-ID:      $Id$
 // RCS-ID:      $Id$
-// Copyright:   (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze
+// Copyright:   (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #pragma implementation "dcclient.h"
 #endif
 
 #pragma implementation "dcclient.h"
 #endif
 
-#include "wx/dcclient.h"
-#include "wx/dcmemory.h"
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/dcclient.h"
+    #include "wx/window.h"
+#endif
+
+#include <mgraph.hpp>
 
 IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
 
 IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
-IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxClientDC)
 IMPLEMENT_DYNAMIC_CLASS(wxClientDC,wxWindowDC)
 IMPLEMENT_DYNAMIC_CLASS(wxClientDC,wxWindowDC)
+IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxClientDC)
+
+wxWindowDC::wxWindowDC(wxWindow *win) : m_wnd(win)
+{
+    MGLDevCtx *dc = win->GetPaintMGLDC();
+    if ( dc )
+    {
+        m_inPaintHandler = TRUE;
+        SetMGLDC(dc, FALSE);
+    }
+    else
+    {
+        m_inPaintHandler = FALSE;
+        SetMGLDC(new MGLDevCtx(MGL_wmBeginPaint(m_wnd->GetHandle())), TRUE);
+        // TRUE means that dtor will delete MGLDevCtx object
+        // but it won't destroy MGLDC returned by MGL_wmBeginPaint because
+        // ~MGLDevCtx() doesn't call destroy()
+    }
+}
+
+wxWindowDC::~wxWindowDC()
+{
+    if ( m_inPaintHandler )
+    {
+        // This is neccessary so that subsequently created wxPaintDCs won't get
+        // confused about clipping. Another reason is that the same MGL dc is reused
+        // for wxEraseEvent, wxNcPaintEvent and wxPaintEvent
+        DestroyClippingRegion();
+    }
+    else
+    {
+        GetMGLDC()->setDC(NULL);
+        MGL_wmEndPaint(m_wnd->GetHandle());
+    }
+}
+
+wxClientDC::wxClientDC(wxWindow *win) : wxWindowDC(win)
+{
+    wxRect r = m_wnd->GetClientRect();
+    SetClippingRegion(r);
+    SetDeviceOrigin(r.x, r.y);
+}