]> git.saurik.com Git - wxWidgets.git/commitdiff
code using ms_PaintDC changed a little (a couple of asserts added, the behaviour
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 7 Aug 1998 22:22:30 +0000 (22:22 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 7 Aug 1998 22:22:30 +0000 (22:22 +0000)
did not change)

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

include/wx/msw/dcclient.h
src/msw/dcclient.cpp

index 05743e7ec3b58722c20397416d6c17694d0a50f6..9851d78d7756dfc9d8f7510efc8308fc53782220 100644 (file)
@@ -57,8 +57,8 @@ class WXDLLEXPORT wxPaintDC: public wxDC
   ~wxPaintDC(void);
 
  protected:
-    static WXHDC m_staticPaintHDC ;
-    static int m_staticPaintCount ;
+    static WXHDC ms_PaintHDC;
+    static uint  ms_PaintCount;
 };
 
 #endif
index 9132057314d86c1aec058881840d67eb00274866..4c6b19b03b73057983c401d5d7f39543051d5727 100644 (file)
@@ -29,6 +29,7 @@
 #endif
 
 #include "wx/dcclient.h"
+#include "wx/log.h"
 
 #include <windows.h>
 
@@ -98,47 +99,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;
+uint  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
+  }
 }