diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index f369504ada..e0c1fd6a6e 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -1152,9 +1152,7 @@ bool wxDataViewToggleRenderer::WXActivateCell(const wxRect& WXUNUSED(cellRect), wxSize wxDataViewToggleRenderer::GetSize() const { - // the window parameter is not used by GetCheckBoxSize() so it's - // safe to pass NULL - return wxRendererNative::Get().GetCheckBoxSize(NULL); + return wxRendererNative::Get().GetCheckBoxSize(GetView()); } // --------------------------------------------------------- diff --git a/src/generic/renderg.cpp b/src/generic/renderg.cpp index d42a5e654b..2d5de98030 100644 --- a/src/generic/renderg.cpp +++ b/src/generic/renderg.cpp @@ -712,9 +712,9 @@ wxRendererGeneric::DrawCheckBox(wxWindow *WXUNUSED(win), } } -wxSize wxRendererGeneric::GetCheckBoxSize(wxWindow *WXUNUSED(win)) +wxSize wxRendererGeneric::GetCheckBoxSize(wxWindow *win) { - return wxSize(16, 16); + return win->FromDIP(wxSize(16, 16)); } void diff --git a/src/msw/renderer.cpp b/src/msw/renderer.cpp index 01054e7007..47087e4781 100644 --- a/src/msw/renderer.cpp +++ b/src/msw/renderer.cpp @@ -327,6 +327,8 @@ public: wxTitleBarButton button, int flags = 0); + virtual wxSize GetCheckBoxSize(wxWindow *win); + virtual void DrawGauge(wxWindow* win, wxDC& dc, const wxRect& rect, @@ -902,6 +904,23 @@ wxRendererXP::DrawTitleBarBitmap(wxWindow *win, DoDrawButtonLike(hTheme, part, dc, rect, flags); } +wxSize wxRendererXP::GetCheckBoxSize(wxWindow* win) +{ + wxUxThemeHandle hTheme(win, L"BUTTON"); + if (hTheme) + { + wxUxThemeEngine* const te = wxUxThemeEngine::Get(); + + if (te && te->IsThemePartDefined(hTheme, BP_CHECKBOX, 0)) + { + SIZE checkSize; + if (te->GetThemePartSize(hTheme, NULL, BP_CHECKBOX, CBS_UNCHECKEDNORMAL, NULL, TS_DRAW, &checkSize) == S_OK) + return wxSize(checkSize.cx, checkSize.cy); + } + } + return m_rendererNative.GetCheckBoxSize(win); +} + void wxRendererXP::DrawCollapseButton(wxWindow *win, wxDC& dc, @@ -922,7 +941,7 @@ wxRendererXP::DrawCollapseButton(wxWindow *win, if ( flags & wxCONTROL_EXPANDED ) state += 3; - if ( te->IsThemePartDefined(hTheme, TDLG_EXPANDOBUTTON, state) ) + if ( te->IsThemePartDefined(hTheme, TDLG_EXPANDOBUTTON, 0) ) { if (flags & wxCONTROL_EXPANDED) flags |= wxCONTROL_CHECKED; @@ -953,7 +972,7 @@ wxSize wxRendererXP::GetCollapseButtonSize(wxWindow *win, wxDC& dc) // EXPANDOBUTTON scales ugly if not using the correct size, get size from theme - if ( te->IsThemePartDefined(hTheme, TDLG_EXPANDOBUTTON, TDLGEBS_NORMAL) ) + if ( te->IsThemePartDefined(hTheme, TDLG_EXPANDOBUTTON, 0) ) { SIZE s; te->GetThemePartSize(hTheme, @@ -981,7 +1000,7 @@ wxRendererXP::DrawItemSelectionRect(wxWindow *win, const int itemState = GetListItemState(flags); wxUxThemeEngine* const te = wxUxThemeEngine::Get(); - if ( te->IsThemePartDefined(hTheme, LVP_LISTITEM, itemState) ) + if ( te->IsThemePartDefined(hTheme, LVP_LISTITEM, 0) ) { RECT rc; wxCopyRectToRECT(rect, rc); @@ -1010,7 +1029,7 @@ void wxRendererXP::DrawItemText(wxWindow* win, wxUxThemeEngine* te = wxUxThemeEngine::Get(); if ( te->DrawThemeTextEx && // Might be not available if we're under XP - te->IsThemePartDefined(hTheme, LVP_LISTITEM, itemState) ) + te->IsThemePartDefined(hTheme, LVP_LISTITEM, 0) ) { RECT rc; wxCopyRectToRECT(rect, rc); @@ -1019,10 +1038,20 @@ void wxRendererXP::DrawItemText(wxWindow* win, textOpts.dwSize = sizeof(textOpts); textOpts.dwFlags = DTT_STATEID; textOpts.iStateId = itemState; - if (flags & wxCONTROL_DISABLED) + + wxColour textColour = dc.GetTextForeground(); + if (flags & wxCONTROL_SELECTED) { + textColour = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOXTEXT); + } + else if (flags & wxCONTROL_DISABLED) + { + textColour = wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT); + } + + if (textColour.IsOk()) { textOpts.dwFlags |= DTT_TEXTCOLOR; - textOpts.crText = wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT).GetPixel(); + textOpts.crText = textColour.GetPixel(); } DWORD textFlags = DT_NOPREFIX;