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. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -134,6 +134,26 @@ public:
|
|||||||
wxDC& dc,
|
wxDC& dc,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0);
|
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 @@ public:
|
|||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0);
|
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,
|
virtual void DrawTextCtrl(wxWindow* win,
|
||||||
wxDC& dc,
|
wxDC& dc,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
@@ -279,6 +289,11 @@ public:
|
|||||||
m_rendererNative.DrawPushButton(win, dc, rect, flags);
|
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,
|
virtual void DrawRadioBitmap(wxWindow *win,
|
||||||
wxDC& dc,
|
wxDC& dc,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
@@ -364,6 +379,31 @@ void wxRendererMSWBase::DrawItemSelectionRect(wxWindow *win,
|
|||||||
DrawFocusRect( win, dc, rect, flags );
|
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
|
// wxRendererNative and wxRendererMSW implementation
|
||||||
@@ -539,32 +579,13 @@ int wxRendererMSW::GetHeaderButtonMargin(wxWindow *WXUNUSED(win))
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Uses the theme to draw the border and fill for something like a wxTextCtrl
|
// 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 fill;
|
||||||
wxColour bdr;
|
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);
|
fill = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
|
||||||
bdr = *wxBLACK;
|
bdr = *wxBLACK;
|
||||||
@@ -576,29 +597,6 @@ void wxRendererMSW::DrawTextCtrl(wxWindow* win, wxDC& dc, const wxRect& rect, in
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 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
|
// wxRendererXP implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -855,6 +853,42 @@ wxRendererXP::DrawTitleBarBitmap(wxWindow *win,
|
|||||||
DoDrawButtonLike(hTheme, part, dc, rect, flags);
|
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
|
// splitter drawing
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user