SVN:(VZ)[71569] Fix DrawChoice() behaviour in wxRendererXP.

3 views
Skip to first unread message

nor...@wxsite.net

unread,
May 26, 2012, 8:29:46 AM5/26/12
to wx-commi...@googlegroups.com
Revision
71569
Author
VZ
Date
2012-05-26 05:29:46 -0700 (Sat, 26 May 2012)

Log Message

Fix DrawChoice() behaviour in wxRendererXP.

The implementation of wxRendererXP::DrawChoice() inadvertently used wxRendererMSW::DrawComboBoxDropButton() and so drew the button in the classic and not themed style.

Fix this by defining DrawChoice() in the base wxRendererMSWBase class and reusing it in wxRendererXP via inheritance and not composition.

Closes 14337.

Modified Paths

Diff

Modified: wxWidgets/trunk/src/msw/renderer.cpp (71568 => 71569)


--- wxWidgets/trunk/src/msw/renderer.cpp	2012-05-26 12:29:44 UTC (rev 71568)
+++ wxWidgets/trunk/src/msw/renderer.cpp	2012-05-26 12:29:46 UTC (rev 71569)
@@ -134,6 +134,26 @@
                                 wxDC& dc,
                                 const wxRect& rect,
                                 int flags = 0);
+
+    void DrawChoice(wxWindow* win,
+                     wxDC& dc,
+                     const wxRect& rect,
+                     int flags = 0);
+
+    void DrawComboBox(wxWindow* win,
+                       wxDC& dc,
+                       const wxRect& rect,
+                       int flags = 0);
+
+    virtual void DrawComboBoxDropButton(wxWindow *win,
+                                         wxDC& dc,
+                                         const wxRect& rect,
+                                         int flags = 0) = 0;
+
+    virtual void DrawTextCtrl(wxWindow* win,
+                               wxDC& dc,
+                               const wxRect& rect,
+                               int flags = 0) = 0;
 };
 
 // ----------------------------------------------------------------------------
@@ -165,16 +185,6 @@
                                 const wxRect& rect,
                                 int flags = 0);
 
-    virtual void DrawChoice(wxWindow* win,
-                            wxDC& dc,
-                            const wxRect& rect,
-                            int flags = 0);
-
-    virtual void DrawComboBox(wxWindow* win,
-                              wxDC& dc,
-                              const wxRect& rect,
-                              int flags = 0);
-
     virtual void DrawTextCtrl(wxWindow* win,
                               wxDC& dc,
                               const wxRect& rect,
@@ -279,6 +289,11 @@
             m_rendererNative.DrawPushButton(win, dc, rect, flags);
     }
 
+    virtual void DrawTextCtrl(wxWindow* win,
+                              wxDC& dc,
+                              const wxRect& rect,
+                              int flags = 0);
+
     virtual void DrawRadioBitmap(wxWindow *win,
                                  wxDC& dc,
                                  const wxRect& rect,
@@ -364,7 +379,32 @@
         DrawFocusRect( win, dc, rect, flags );
 }
 
+void wxRendererMSWBase::DrawChoice(wxWindow* win,
+                                   wxDC& dc,
+                                   const wxRect& rect,
+                                   int flags)
+{
+    DrawComboBox(win, dc, rect, flags);
+}
 
+void wxRendererMSWBase::DrawComboBox(wxWindow* win,
+                                     wxDC& dc,
+                                     const wxRect& rect,
+                                     int flags)
+{
+    // Draw the main part of the control same as TextCtrl
+    DrawTextCtrl(win, dc, rect, flags);
+
+    // Draw the button inside the border, on the right side
+    wxRect br(rect);
+    br.height -= 2;
+    br.x += br.width - br.height - 1;
+    br.width = br.height;
+    br.y += 1;
+
+    DrawComboBoxDropButton(win, dc, br, flags);
+}
+
 // ============================================================================
 // wxRendererNative and wxRendererMSW implementation
 // ============================================================================
@@ -539,66 +579,24 @@
 }
 
 // Uses the theme to draw the border and fill for something like a wxTextCtrl
-void wxRendererMSW::DrawTextCtrl(wxWindow* win, wxDC& dc, const wxRect& rect, int flags)
+void wxRendererMSW::DrawTextCtrl(wxWindow* WXUNUSED(win),
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int WXUNUSED(flags))
 {
     wxColour fill;
     wxColour bdr;
-    COLORREF cref;
-
-#if wxUSE_UXTHEME
-    wxUxThemeHandle hTheme(win, L"EDIT");
-    if (hTheme)
     {
-        wxUxThemeEngine::Get()->GetThemeColor(hTheme, EP_EDITTEXT,
-                                              ETS_NORMAL, TMT_FILLCOLOR, &cref);
-        fill = wxRGBToColour(cref);
-
-        int etsState;
-        if ( flags & wxCONTROL_DISABLED )
-            etsState = ETS_DISABLED;
-        else
-            etsState = ETS_NORMAL;
-
-        wxUxThemeEngine::Get()->GetThemeColor(hTheme, EP_EDITTEXT,
-                                              etsState, TMT_BORDERCOLOR, &cref);
-        bdr = wxRGBToColour(cref);
-    }
-    else
-#endif
-    {
         fill = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
         bdr = *wxBLACK;
     }
 
-    dc.SetPen( bdr );
-    dc.SetBrush( fill );
+    dc.SetPen(bdr);
+    dc.SetBrush(fill);
     dc.DrawRectangle(rect);
 }
 
 
-// Draw the equivalent of a wxComboBox
-void wxRendererMSW::DrawComboBox(wxWindow* win, wxDC& dc, const wxRect& rect, int flags)
-{
-    // Draw the main part of the control same as TextCtrl
-    DrawTextCtrl(win, dc, rect, flags);
-
-    // Draw the button inside the border, on the right side
-    wxRect br(rect);
-    br.height -= 2;
-    br.x += br.width - br.height - 1;
-    br.width = br.height;
-    br.y += 1;
-
-    DrawComboBoxDropButton(win, dc, br, flags);
-}
-
-
-void wxRendererMSW::DrawChoice(wxWindow* win, wxDC& dc,
-                           const wxRect& rect, int flags)
-{
-    DrawComboBox(win, dc, rect, flags);
-}
-
 // ============================================================================
 // wxRendererXP implementation
 // ============================================================================
@@ -855,6 +853,42 @@
     DoDrawButtonLike(hTheme, part, dc, rect, flags);
 }
 
+// Uses the theme to draw the border and fill for something like a wxTextCtrl
+void wxRendererXP::DrawTextCtrl(wxWindow* win,
+                                wxDC& dc,
+                                const wxRect& rect,
+                                int flags)
+{
+    wxUxThemeHandle hTheme(win, L"EDIT");
+    if ( !hTheme )
+    {
+        m_rendererNative.DrawTextCtrl(win,dc,rect,flags);
+        return;
+    }
+
+    wxColour fill;
+    wxColour bdr;
+    COLORREF cref;
+
+    wxUxThemeEngine::Get()->GetThemeColor(hTheme, EP_EDITTEXT,
+                                          ETS_NORMAL, TMT_FILLCOLOR, &cref);
+    fill = wxRGBToColour(cref);
+
+    int etsState;
+    if ( flags & wxCONTROL_DISABLED )
+        etsState = ETS_DISABLED;
+    else
+        etsState = ETS_NORMAL;
+
+    wxUxThemeEngine::Get()->GetThemeColor(hTheme, EP_EDITTEXT,
+                                              etsState, TMT_BORDERCOLOR, &cref);
+    bdr = wxRGBToColour(cref);
+
+    dc.SetPen( bdr );
+    dc.SetBrush( fill );
+    dc.DrawRectangle(rect);
+}
+
 // ----------------------------------------------------------------------------
 // splitter drawing
 // ----------------------------------------------------------------------------
Reply all
Reply to author
Forward
0 new messages