]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dcclient.cpp
no message
[wxWidgets.git] / src / msw / dcclient.cpp
index 9132057314d86c1aec058881840d67eb00274866..a7becdbf5cf7b670158dd69bde1aefee0a54e361 100644 (file)
 #pragma implementation "dcclient.h"
 #endif
 
-#ifdef __GNUG__
-#pragma implementation
-#pragma implementation "dcclient.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -29,6 +24,7 @@
 #endif
 
 #include "wx/dcclient.h"
+#include "wx/log.h"
 
 #include <windows.h>
 
@@ -98,47 +94,40 @@ static PAINTSTRUCT g_paintStruct;
 // Don't call Begin/EndPaint if it's already been called:
 // for example, if calling a base class OnPaint.
 
-WXHDC wxPaintDC::m_staticPaintHDC = 0;
-int wxPaintDC::m_staticPaintCount = 0;
+WXHDC  wxPaintDC::ms_PaintHDC = 0;
+size_t wxPaintDC::ms_PaintCount = 0; // count of ms_PaintHDC usage
 
-wxPaintDC::wxPaintDC(wxWindow *the_canvas)
+wxPaintDC::wxPaintDC(wxWindow *canvas)
 {
-       if ( the_canvas && (m_staticPaintCount == 0))
-       {
-               m_hDC = (WXHDC) ::BeginPaint((HWND) the_canvas->GetHWND(), &g_paintStruct);
-               m_hDCCount ++;
-               m_staticPaintCount ++ ;
-               m_staticPaintHDC = m_hDC ;
-       }
-       else
-    {
-        wxDebugMsg("wxPaintDC: Using existing HDC\n");
-               m_hDC = m_staticPaintHDC ;
-    }
+  wxCHECK_RET( canvas, "NULL canvas in wxPaintDC ctor" );
 
-  m_canvas = the_canvas;
+  m_canvas = canvas;
+  if ( ms_PaintCount > 0 ) {
+    // it means that we've already called BeginPaint and so we must just
+    // reuse the same HDC (BeginPaint shouldn't be called more than once)
+    wxASSERT( ms_PaintHDC );
+
+    m_hDC = ms_PaintHDC;
+    ms_PaintCount++;
+  }
+  else {
+    ms_PaintHDC =
+    m_hDC = (WXHDC)::BeginPaint((HWND)m_canvas->GetHWND(), &g_paintStruct);
+    ms_PaintCount = 1;
+    m_hDCCount++;
+  }
 }
 
-wxPaintDC::~wxPaintDC(void)
+wxPaintDC::~wxPaintDC()
 {
-       m_staticPaintCount -- ;
-
-       if (m_staticPaintCount == 0)
-       {
-               if ( m_hDC && m_canvas)
-               {
-                       ::EndPaint((HWND) m_canvas->GetHWND(), &g_paintStruct);
-                       m_hDCCount --;
-                       m_hDC = 0;
-               }
-        else
-            wxDebugMsg("~wxPaintDC: Did not release HDC\n");
-
-               m_staticPaintHDC = 0 ;
-       }
-    else
-    {
-        wxDebugMsg("~wxPaintDC: Did not release HDC\n");
+  if ( m_hDC ) {
+    if ( !--ms_PaintCount ) {
+      ::EndPaint((HWND)m_canvas->GetHWND(), &g_paintStruct);
+      m_hDCCount--;
+      m_hDC = NULL;
+      ms_PaintHDC = NULL;
     }
+    else { }//: ms_PaintHDC still in use
+  }
 }