]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dcclient.cpp
Fix wxBitmapButton initial best size determination in wxMSW.
[wxWidgets.git] / src / msw / dcclient.cpp
index 96737f424e2dfa50ea5da4adc084b22dc2597008..bad81c1e72762e0ba45cd3d69a797aa56573060d 100644 (file)
@@ -67,13 +67,13 @@ WX_DEFINE_OBJARRAY(wxArrayDCInfo)
 
 static PAINTSTRUCT g_paintStruct;
 
-#ifdef __WXDEBUG__
+#ifdef wxHAS_PAINT_DEBUG
     // a global variable which we check to verify that wxPaintDC are only
     // created in response to WM_PAINT message - doing this from elsewhere is a
     // common programming error among wxWidgets programmers and might lead to
     // very subtle and difficult to debug refresh/repaint bugs.
     int g_isPainting = 0;
-#endif // __WXDEBUG__
+#endif // wxHAS_PAINT_DEBUG
 
 // ===========================================================================
 // implementation
@@ -90,10 +90,10 @@ wxWindowDCImpl::wxWindowDCImpl( wxDC *owner ) :
 {
 }
 
-wxWindowDCImpl::wxWindowDCImpl( wxDC *owner, wxWindow *window ) : 
+wxWindowDCImpl::wxWindowDCImpl( wxDC *owner, wxWindow *window ) :
    wxMSWDCImpl( owner )
 {
-    wxCHECK_RET( window, _T("invalid window in wxWindowDCImpl") );
+    wxCHECK_RET( window, wxT("invalid window in wxWindowDCImpl") );
 
     m_window = window;
     m_hDC = (WXHDC) ::GetWindowDC(GetHwndOf(m_window));
@@ -109,9 +109,6 @@ void wxWindowDCImpl::InitDC()
     // DrawText() to OPAQUE as required, otherwise always TRANSPARENT,
     ::SetBkMode(GetHdc(), TRANSPARENT);
 
-    // default bg colour is pne of the window
-    SetBackground(wxBrush(m_window->GetBackgroundColour(), wxSOLID));
-
     // since we are a window dc we need to grab the palette from the window
 #if wxUSE_PALETTE
     InitializePalette();
@@ -120,7 +117,7 @@ void wxWindowDCImpl::InitDC()
 
 void wxWindowDCImpl::DoGetSize(int *width, int *height) const
 {
-    wxCHECK_RET( m_window, _T("wxWindowDCImpl without a window?") );
+    wxCHECK_RET( m_window, wxT("wxWindowDCImpl without a window?") );
 
     m_window->GetSize(width, height);
 }
@@ -139,7 +136,7 @@ wxClientDCImpl::wxClientDCImpl( wxDC *owner ) :
 wxClientDCImpl::wxClientDCImpl( wxDC *owner, wxWindow *window ) :
    wxWindowDCImpl( owner )
 {
-    wxCHECK_RET( window, _T("invalid window in wxClientDCImpl") );
+    wxCHECK_RET( window, wxT("invalid window in wxClientDCImpl") );
 
     m_window = window;
     m_hDC = (WXHDC)::GetDC(GetHwndOf(window));
@@ -169,7 +166,8 @@ void wxClientDCImpl::InitDC()
     }
 
     // clip the DC to avoid overwriting the non client area
-    SetClippingRegion(wxPoint(0,0), m_window->GetClientSize());
+    wxSize size = m_window->GetClientSize();
+    DoSetClippingRegion(0, 0, size.x, size.y);
 #endif // __WXUNIVERSAL__ || __WXWINCE__
 }
 
@@ -179,7 +177,7 @@ wxClientDCImpl::~wxClientDCImpl()
 
 void wxClientDCImpl::DoGetSize(int *width, int *height) const
 {
-    wxCHECK_RET( m_window, _T("wxClientDCImpl without a window?") );
+    wxCHECK_RET( m_window, wxT("wxClientDCImpl without a window?") );
 
     m_window->GetClientSize(width, height);
 }
@@ -218,14 +216,14 @@ wxPaintDCImpl::wxPaintDCImpl( wxDC *owner, wxWindow *window ) :
 {
     wxCHECK_RET( window, wxT("NULL canvas in wxPaintDCImpl ctor") );
 
-#ifdef __WXDEBUG__
+#ifdef wxHAS_PAINT_DEBUG
     if ( g_isPainting <= 0 )
     {
         wxFAIL_MSG( wxT("wxPaintDCImpl may be created only in EVT_PAINT handler!") );
 
         return;
     }
-#endif // __WXDEBUG__
+#endif // wxHAS_PAINT_DEBUG
 
     m_window = window;
 
@@ -238,6 +236,11 @@ wxPaintDCImpl::wxPaintDCImpl( wxDC *owner, wxWindow *window ) :
     }
     else // not in cache, create a new one
     {
+        // see comments in src/msw/window.cpp where this is defined
+        extern bool wxDidCreatePaintDC;
+
+        wxDidCreatePaintDC = true;
+
         m_hDC = (WXHDC)::BeginPaint(GetHwndOf(m_window), &g_paintStruct);
         if (m_hDC)
             ms_cache.Add(new wxPaintDCInfo(m_window, this));
@@ -329,27 +332,25 @@ class wxPaintDCExImpl: public wxPaintDCImpl
 public:
     wxPaintDCExImpl( wxDC *owner, wxWindow *window, WXHDC dc );
     ~wxPaintDCExImpl();
-    
+
     int m_saveState;
 };
 
 
 IMPLEMENT_ABSTRACT_CLASS(wxPaintDCEx,wxPaintDC)
 
-wxPaintDCEx::wxPaintDCEx( wxWindow *window, WXHDC dc )
+wxPaintDCEx::wxPaintDCEx(wxWindow *window, WXHDC dc)
+           : wxPaintDC(new wxPaintDCExImpl(this, window, dc))
 {
-    m_pimpl = new wxPaintDCExImpl( this, window, dc );
 }
 
-
-
-wxPaintDCExImpl::wxPaintDCExImpl( wxDC *owner, wxWindow *window, WXHDC dc ) :
-    wxPaintDCImpl( owner )
+wxPaintDCExImpl::wxPaintDCExImpl(wxDC *owner, wxWindow *window, WXHDC dc)
+               : wxPaintDCImpl( owner )
 {
         wxCHECK_RET( dc, wxT("wxPaintDCEx requires an existing device context") );
 
         m_saveState = 0;
-        
+
         m_window = window;
 
         wxPaintDCInfo *info = FindInCache();