]> git.saurik.com Git - wxWidgets.git/commitdiff
refactored code to do brush adjustment for bg drawing in only one place
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 19 Nov 2004 19:53:03 +0000 (19:53 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 19 Nov 2004 19:53:03 +0000 (19:53 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30641 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/notebook.h
src/msw/control.cpp
src/msw/notebook.cpp

index caa4a9f7100b43a943e41646653bd9a64c0fa83b..f732ce9da516468bfb139ab6abe00d743f6b2082 100644 (file)
@@ -167,7 +167,9 @@ public:
 
   // get the brush to be used for painting the background for the controls
   // which need it in their MSWControlColor()
 
   // get the brush to be used for painting the background for the controls
   // which need it in their MSWControlColor()
-  WXHBRUSH GetThemeBackgroundBrush() const { return m_hbrBackground; }
+  //
+  // the brush will be adjusted for use with the given window on this DC
+  WXHBRUSH GetThemeBackgroundBrush(WXHDC hDC, wxWindow *win) const;
 #endif // wxUSE_UXTHEME
 
 protected:
 #endif // wxUSE_UXTHEME
 
 protected:
index 2dc7d3e0e909325ba0340eff098d54f8908e1f66..30bc08f49805b45ea0428e4bf5ab2bd4c377ef6a 100644 (file)
@@ -327,24 +327,32 @@ bool wxControl::MSWOnNotify(int idCtrl,
 }
 #endif // Win95
 
 }
 #endif // Win95
 
-WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
+WXHBRUSH wxControl::MSWControlColorSolid(WXHDC pDC, wxColour colBg)
 {
     HDC hdc = (HDC)pDC;
     if ( m_hasFgCol )
         ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour()));
 
 {
     HDC hdc = (HDC)pDC;
     if ( m_hasFgCol )
         ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour()));
 
-    if ( m_hasBgCol )
+    if ( colBg.Ok() )
     {
     {
-        wxColour colBack = GetBackgroundColour();
-
-        ::SetBkColor(hdc, wxColourToRGB(colBack));
+        ::SetBkColor(hdc, wxColourToRGB(colBg));
 
 
-        wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID);
+        wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBg, wxSOLID);
 
         return (WXHBRUSH)brush->GetResourceHandle();
     }
 
 
         return (WXHBRUSH)brush->GetResourceHandle();
     }
 
-    SetBkMode(hdc, TRANSPARENT);
+    return 0;
+}
+
+WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
+{
+    WXHBRUSH hbr = MSWControlColorSolid(pDC, m_hasBgCol ? m_backgroundColour
+                                                        : wxNullColour);
+    if ( hbr )
+        return hbr;
+
+    ::SetBkMode((HDC)pDC, TRANSPARENT);
 
 #if wxUSE_UXTHEME && wxUSE_NOTEBOOK
     if ( wxUxThemeEngine::GetIfActive() )
 
 #if wxUSE_UXTHEME && wxUSE_NOTEBOOK
     if ( wxUxThemeEngine::GetIfActive() )
@@ -354,22 +362,25 @@ WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
             wxNotebook *nbook = wxDynamicCast(win, wxNotebook);
             if ( nbook )
             {
             wxNotebook *nbook = wxDynamicCast(win, wxNotebook);
             if ( nbook )
             {
-                WXHBRUSH hbr = nbook->GetThemeBackgroundBrush();
-                if ( hbr )
-                {
-                    RECT rc;
-                    GetWindowRect(GetHwnd(), &rc);
-
-                    MapWindowPoints(NULL, GetHwndOf(nbook), (POINT *)&rc, 1);
-                    SetBrushOrgEx(hdc, -rc.left, -rc.top, NULL);
-                    return hbr;
-                }
+                // return value may be NULL but it is ok: if the first parent
+                // notebook doesn't use themes, then we don't have to process
+                // this message at all, so let default processing take place
+                return nbook->GetThemeBackgroundBrush(pDC, this);
             }
         }
     }
 #endif // wxUSE_UXTHEME
 
             }
         }
     }
 #endif // wxUSE_UXTHEME
 
-    return GetStockObject(NULL_BRUSH);
+    return ::GetStockObject(NULL_BRUSH);
+}
+
+WXHBRUSH wxControl::MSWControlColorDisabled(WXHDC pDC)
+{
+    return MSWControlColorSolid
+           (
+                pDC,
+                wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)
+           );
 }
 
 // ---------------------------------------------------------------------------
 }
 
 // ---------------------------------------------------------------------------
index 13c06febc05a6001d1d52f6249ae358add205b18..3741960c93090267e12eb41e8b5f219514ca04f4 100644 (file)
@@ -888,32 +888,40 @@ void wxNotebook::UpdateBgBrush()
     }
 }
 
     }
 }
 
-void wxNotebook::DoEraseBackground(wxEraseEvent& event)
+WXHBRUSH wxNotebook::GetThemeBackgroundBrush(WXHDC hDC, wxWindow *win) const
 {
 {
-    // we can either draw the background ourselves or let DrawThemeBackground()
-    // do it, but as we already have the correct brush, let's do it ourselves
-    // (note that we use the same code in wxControl::MSWControlColor(), so if
-    // it breaks, it should at least break in consistent way)
     if ( m_hbrBackground )
     {
         // before drawing with the background brush, we need to position it
         // correctly
     if ( m_hbrBackground )
     {
         // before drawing with the background brush, we need to position it
         // correctly
-        wxWindow *win = (wxWindow *)event.GetEventObject();
-
         RECT rc;
         ::GetWindowRect(GetHwndOf(win), &rc);
 
         ::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
 
         RECT rc;
         ::GetWindowRect(GetHwndOf(win), &rc);
 
         ::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
 
-        HDC hdc = GetHdcOf(*event.GetDC());
-        if ( !::SetBrushOrgEx(hdc, -rc.left, -rc.top, NULL) )
+        if ( !::SetBrushOrgEx((HDC)hDC, -rc.left, -rc.top, NULL) )
         {
             wxLogLastError(_T("SetBrushOrgEx(notebook bg brush)"));
         }
         {
             wxLogLastError(_T("SetBrushOrgEx(notebook bg brush)"));
         }
+    }
+
+    return m_hbrBackground;
+}
 
 
+void wxNotebook::DoEraseBackground(wxEraseEvent& event)
+{
+    // we can either draw the background ourselves or let DrawThemeBackground()
+    // do it, but as we already have the correct brush, let's do it ourselves
+    // (note that we use the same code in wxControl::MSWControlColor(), so if
+    // it breaks, it should at least break in consistent way)
+    wxWindow *win = (wxWindow *)event.GetEventObject();
+    HDC hdc = GetHdcOf(*event.GetDC());
+    WXHBRUSH hbr = GetThemeBackgroundBrush((WXHDC)hdc, win);
+    if ( hbr )
+    {
         RECT rectClient;
         ::GetClientRect(GetHwndOf(win), &rectClient);
         RECT rectClient;
         ::GetClientRect(GetHwndOf(win), &rectClient);
-        ::FillRect(hdc, &rectClient, (HBRUSH)m_hbrBackground);
+        ::FillRect(hdc, &rectClient, (HBRUSH)hbr);
     }
 }
 
     }
 }