]> git.saurik.com Git - wxWidgets.git/commitdiff
implemented DrawCheckButton() for XP renderer; code cleanup
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 19 Apr 2006 02:15:30 +0000 (02:15 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 19 Apr 2006 02:15:30 +0000 (02:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38827 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/renderer.cpp

index 98293ee53d5630c78e4d88029dd70726748d9b0b..4763dfe7bdec6d4f1c9319a2e27f750961148302 100644 (file)
 // tmschema.h is in Win32 Platform SDK and might not be available with earlier
 // compilers
 #ifndef CP_DROPDOWNBUTTON
+    #define BP_CHECKBOX        3
+    #define CBS_UNCHECKEDNORMAL 1
+    #define CBS_CHECKEDNORMAL   (CBS_UNCHECKEDNORMAL + 4)
+    #define CBS_MIXEDNORMAL     (CBS_CHECKEDNORMAL + 4)
+
     #define CP_DROPDOWNBUTTON  1
 
     #define CBXS_NORMAL        1
@@ -46,9 +51,9 @@
     #define CBXS_PRESSED       3
     #define CBXS_DISABLED      4
 
-    #define TVP_GLYPH                  2
-    
-    #define GLPS_CLOSED                        1
+    #define TVP_GLYPH           2
+
+    #define GLPS_CLOSED         1
     #define GLPS_OPENED         2
 
     #define HP_HEADERITEM       1
     #define HIS_PRESSED         3
 #endif
 
+#if defined(__WXWINCE__) && !defined(DFCS_FLAT)
+    #define DFCS_FLAT 0
+#endif
+
 // ----------------------------------------------------------------------------
 // wxRendererMSW: wxRendererNative implementation for "old" Win32 systems
 // ----------------------------------------------------------------------------
@@ -91,6 +100,14 @@ public:
 
     static wxRendererNative& Get();
 
+    virtual void DrawHeaderButton(wxWindow *win,
+                                    wxDC& dc,
+                                    const wxRect& rect,
+                                    int flags = 0);
+    virtual void DrawTreeItemButton(wxWindow *win,
+                                    wxDC& dc,
+                                    const wxRect& rect,
+                                    int flags = 0);
     virtual void DrawSplitterBorder(wxWindow *win,
                                     wxDC& dc,
                                     const wxRect& rect,
@@ -101,21 +118,16 @@ public:
                                   wxCoord position,
                                   wxOrientation orient,
                                   int flags = 0);
-
-    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
-
     virtual void DrawComboBoxDropButton(wxWindow *win,
                                         wxDC& dc,
                                         const wxRect& rect,
                                         int flags = 0);
-    virtual void DrawTreeItemButton(wxWindow *win,
-                                    wxDC& dc,
-                                    const wxRect& rect,
-                                    int flags = 0);
-    virtual void DrawHeaderButton(wxWindow *win,
-                                    wxDC& dc,
-                                    const wxRect &rect,
-                                    int flags=0);
+    virtual void DrawCheckButton(wxWindow *win,
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int flags = 0);
+
+    virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
 private:
     DECLARE_NO_COPY_CLASS(wxRendererXP)
 };
@@ -146,10 +158,6 @@ wxRendererNative& wxRendererMSW::Get()
     return s_rendererMSW;
 }
 
-#if defined(__WXWINCE__) && !defined(DFCS_FLAT)
-#define DFCS_FLAT 0
-#endif
-
 void
 wxRendererMSW::DrawComboBoxDropButton(wxWindow * WXUNUSED(win),
                                       wxDC& dc,
@@ -195,35 +203,140 @@ wxRendererXP::DrawComboBoxDropButton(wxWindow * win,
                                       int flags)
 {
     wxUxThemeHandle hTheme(win, L"COMBOBOX");
-    if ( hTheme )
+    if ( !hTheme )
     {
-        RECT r;
-        r.left = rect.x;
-        r.top = rect.y;
-        r.right = rect.x + rect.width;
-        r.bottom = rect.y + rect.height;
-
-        int state;
-        if ( flags & wxCONTROL_PRESSED )
-            state = CBXS_PRESSED;
-        else if ( flags & wxCONTROL_CURRENT )
-            state = CBXS_HOT;
-        else if ( flags & wxCONTROL_DISABLED )
-            state = CBXS_DISABLED;
-        else
-            state = CBXS_NORMAL;
-
-        wxUxThemeEngine::Get()->DrawThemeBackground
-                                (
-                                    hTheme,
-                                    (HDC) dc.GetHDC(),
-                                    CP_DROPDOWNBUTTON,
-                                    state,
-                                    &r,
-                                    NULL
-                                );
+        m_rendererNative.DrawComboBoxDropButton(win, dc, rect, flags);
+        return;
+    }
+
+    RECT r;
+    wxCopyRectToRECT(rect, r);
 
+    int state;
+    if ( flags & wxCONTROL_PRESSED )
+        state = CBXS_PRESSED;
+    else if ( flags & wxCONTROL_CURRENT )
+        state = CBXS_HOT;
+    else if ( flags & wxCONTROL_DISABLED )
+        state = CBXS_DISABLED;
+    else
+        state = CBXS_NORMAL;
+
+    wxUxThemeEngine::Get()->DrawThemeBackground
+                            (
+                                hTheme,
+                                GetHdcOf(dc),
+                                CP_DROPDOWNBUTTON,
+                                state,
+                                &r,
+                                NULL
+                            );
+
+}
+
+void
+wxRendererXP::DrawHeaderButton(wxWindow *win,
+                               wxDC& dc,
+                               const wxRect& rect,
+                               int flags)
+{
+    wxUxThemeHandle hTheme(win, L"HEADER");
+    if ( !hTheme )
+    {
+        m_rendererNative.DrawHeaderButton(win, dc, rect, flags);
+        return;
     }
+
+    RECT r;
+    wxCopyRectToRECT(rect, r);
+
+    int state;
+    if ( flags & wxCONTROL_PRESSED )
+        state = HIS_PRESSED;
+    else if ( flags & wxCONTROL_CURRENT )
+        state = HIS_HOT;
+    else
+        state = HIS_NORMAL;
+    wxUxThemeEngine::Get()->DrawThemeBackground
+                            (
+                                hTheme,
+                                GetHdcOf(dc),
+                                HP_HEADERITEM,
+                                state,
+                                &r,
+                                NULL
+                            );
+}
+
+void
+wxRendererXP::DrawTreeItemButton(wxWindow *win,
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int flags)
+{
+    wxUxThemeHandle hTheme(win, L"TREEVIEW");
+    if ( !hTheme )
+    {
+        m_rendererNative.DrawTreeItemButton(win, dc, rect, flags);
+        return;
+    }
+
+    RECT r;
+    wxCopyRectToRECT(rect, r);
+
+    int state = flags & wxCONTROL_EXPANDED ? GLPS_OPENED : GLPS_CLOSED;
+    wxUxThemeEngine::Get()->DrawThemeBackground
+                            (
+                                hTheme,
+                                GetHdcOf(dc),
+                                TVP_GLYPH,
+                                state,
+                                &r,
+                                NULL
+                            );
+}
+
+void
+wxRendererXP::DrawCheckButton(wxWindow *win,
+                              wxDC& dc,
+                              const wxRect& rect,
+                              int flags)
+{
+    wxUxThemeHandle hTheme(win, L"BUTTON");
+    if ( !hTheme )
+    {
+        m_rendererNative.DrawCheckButton(win, dc, rect, flags);
+        return;
+    }
+
+    RECT r;
+    wxCopyRectToRECT(rect, r);
+
+    int state;
+    if ( flags & wxCONTROL_CHECKED )
+        state = CBS_CHECKEDNORMAL;
+    else if ( flags & wxCONTROL_UNDETERMINED )
+        state = CBS_MIXEDNORMAL;
+    else
+        state = CBS_UNCHECKEDNORMAL;
+
+    // CBS_XXX is followed by CBX_XXXGOT, then CBS_XXXPRESSED and DISABLED
+    if ( flags & wxCONTROL_CURRENT )
+        state += 1;
+    else if ( flags & wxCONTROL_PRESSED )
+        state += 2;
+    else if ( flags & wxCONTROL_DISABLED )
+        state += 3;
+
+    wxUxThemeEngine::Get()->DrawThemeBackground
+                            (
+                                hTheme,
+                                GetHdcOf(dc),
+                                BP_CHECKBOX,
+                                state,
+                                &r,
+                                NULL
+                            );
 }
 
 // ----------------------------------------------------------------------------
@@ -236,7 +349,7 @@ static const wxCoord SASH_WIDTH = 4;
 wxSplitterRenderParams
 wxRendererXP::GetSplitterParams(const wxWindow * win)
 {
-    if (win->GetWindowStyle() & wxSP_NO_XP_THEME)
+    if ( win->HasFlag(wxSP_NO_XP_THEME) )
         return m_rendererNative.GetSplitterParams(win);
     else
         return wxSplitterRenderParams(SASH_WIDTH, 0, false);
@@ -248,7 +361,7 @@ wxRendererXP::DrawSplitterBorder(wxWindow * win,
                                  const wxRect& rect,
                                  int flags)
 {
-    if (win->GetWindowStyle() & wxSP_NO_XP_THEME)
+    if ( win->HasFlag(wxSP_NO_XP_THEME) )
     {
         m_rendererNative.DrawSplitterBorder(win, dc, rect, flags);
     }
@@ -281,59 +394,5 @@ wxRendererXP::DrawSplitterSash(wxWindow *win,
     m_rendererNative.DrawSplitterSash(win, dc, size, position, orient, flags);
 }
 
-void
-wxRendererXP::DrawTreeItemButton(wxWindow *win, 
-                                 wxDC &dc, 
-                                 const wxRect &rect, 
-                                 int flags) 
-{
-    wxUxThemeHandle hTheme(win, L"TREEVIEW");
-    RECT r;
-    r.left = rect.x;
-    r.top = rect.y;
-    r.right = rect.x + rect.width;
-    r.bottom = rect.y + rect.height;
-    int state = (flags & wxCONTROL_EXPANDED) ? GLPS_OPENED : GLPS_CLOSED;
-    wxUxThemeEngine::Get()->DrawThemeBackground
-                                (
-                                    hTheme,
-                                    (HDC) dc.GetHDC(),
-                                    TVP_GLYPH,
-                                    state,
-                                    &r,
-                                    NULL
-                                );
-}
-
-void
-wxRendererXP::DrawHeaderButton(wxWindow *win, 
-                               wxDC &dc, 
-                               const wxRect &rect, 
-                               int flags) 
-{
-    wxUxThemeHandle hTheme(win, L"HEADER");
-    RECT r;
-    r.left = rect.x;
-    r.top = rect.y;
-    r.right = rect.x + rect.width;
-    r.bottom = rect.y + rect.height;
-    int state;
-    if ( flags & wxCONTROL_PRESSED )
-        state = HIS_PRESSED;
-    else if ( flags & wxCONTROL_CURRENT )
-        state = HIS_HOT;
-    else
-        state = HIS_NORMAL;
-    wxUxThemeEngine::Get()->DrawThemeBackground
-                                (
-                                    hTheme,
-                                    (HDC) dc.GetHDC(),
-                                    HP_HEADERITEM,
-                                    state,
-                                    &r,
-                                    NULL
-                                );
-}
-
 #endif // wxUSE_UXTHEME