X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a268f4b734bd4479bb2accd5bd0d5da0f9e1e1ce..c3e57ac4ac9222d84ac208a493b57fb24e474a6a:/src/msw/renderer.cpp diff --git a/src/msw/renderer.cpp b/src/msw/renderer.cpp index 1fe0bf7374..c2b4173972 100644 --- a/src/msw/renderer.cpp +++ b/src/msw/renderer.cpp @@ -35,6 +35,7 @@ #include "wx/splitter.h" #include "wx/renderer.h" #include "wx/msw/private.h" +#include "wx/msw/dc.h" #include "wx/msw/uxtheme.h" // tmschema.h is in Win32 Platform SDK and might not be available with earlier @@ -121,6 +122,8 @@ public: const wxRect& rect, int flags = 0); + virtual wxSize GetCheckBoxSize(wxWindow *win); + virtual int GetHeaderButtonHeight(wxWindow *win); private: @@ -227,7 +230,7 @@ wxRendererMSW::DrawComboBoxDropButton(wxWindow * WXUNUSED(win), if ( flags & wxCONTROL_PRESSED ) style |= DFCS_PUSHED | DFCS_FLAT; - ::DrawFrameControl(GetHdcOf(dc), &r, DFC_SCROLL, style); + ::DrawFrameControl(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &r, DFC_SCROLL, style); } void @@ -251,7 +254,7 @@ wxRendererMSW::DrawCheckBox(wxWindow * WXUNUSED(win), if ( flags & wxCONTROL_CURRENT ) style |= DFCS_HOT; - ::DrawFrameControl(GetHdcOf(dc), &r, DFC_BUTTON, style); + ::DrawFrameControl(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &r, DFC_BUTTON, style); } void @@ -280,7 +283,7 @@ wxRendererMSW::DrawPushButton(wxWindow * WXUNUSED(win), RECT rc; wxCopyRectToRECT(rect, rc); - ::DrawFrameControl(GetHdcOf(dc), &rc, DFC_BUTTON, style); + ::DrawFrameControl(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &rc, DFC_BUTTON, style); } void wxRendererMSW::DrawFocusRect(wxWindow * WXUNUSED(win), @@ -291,7 +294,13 @@ void wxRendererMSW::DrawFocusRect(wxWindow * WXUNUSED(win), RECT rc; wxCopyRectToRECT(rect, rc); - ::DrawFocusRect(GetHdcOf(dc), &rc); + ::DrawFocusRect(GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), &rc); +} + +wxSize wxRendererMSW::GetCheckBoxSize(wxWindow * WXUNUSED(win)) +{ + return wxSize(::GetSystemMetrics(SM_CXMENUCHECK), + ::GetSystemMetrics(SM_CYMENUCHECK)); } int wxRendererMSW::GetHeaderButtonHeight(wxWindow * WXUNUSED(win)) @@ -311,7 +320,7 @@ int wxRendererMSW::GetHeaderButtonHeight(wxWindow * WXUNUSED(win)) // initialize the struct filled with the values by Header_Layout() RECT parentRect = { 0, 0, 100, 100 }; - WINDOWPOS wp = { 0 }; + WINDOWPOS wp = { 0, 0, 0, 0, 0, 0, 0 }; HDLAYOUT hdl = { &parentRect, &wp }; return Header_Layout(hwndHeader, &hdl) ? wp.cy : DEFAULT_HEIGHT; @@ -363,7 +372,7 @@ wxRendererXP::DrawComboBoxDropButton(wxWindow * win, wxUxThemeEngine::Get()->DrawThemeBackground ( hTheme, - GetHdcOf(dc), + GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), CP_DROPDOWNBUTTON, state, &r, @@ -399,7 +408,7 @@ wxRendererXP::DrawHeaderButton(wxWindow *win, wxUxThemeEngine::Get()->DrawThemeBackground ( hTheme, - GetHdcOf(dc), + GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), HP_HEADERITEM, state, &r, @@ -435,7 +444,7 @@ wxRendererXP::DrawTreeItemButton(wxWindow *win, wxUxThemeEngine::Get()->DrawThemeBackground ( hTheme, - GetHdcOf(dc), + GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), TVP_GLYPH, state, &r, @@ -485,7 +494,7 @@ wxRendererXP::DrawCheckBox(wxWindow *win, wxUxThemeEngine::Get()->DrawThemeBackground ( hTheme, - GetHdcOf(dc), + GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), BP_CHECKBOX, state, &r, @@ -524,7 +533,7 @@ wxRendererXP::DrawPushButton(wxWindow * win, wxUxThemeEngine::Get()->DrawThemeBackground ( hTheme, - GetHdcOf(dc), + GetHdcOf(*((wxMSWDCImpl*)dc.GetImpl())), BP_PUSHBUTTON, state, &r, @@ -534,7 +543,7 @@ wxRendererXP::DrawPushButton(wxWindow * win, } void -wxRendererXP::DrawItemSelectionRect(wxWindow * WXUNUSED(win), +wxRendererXP::DrawItemSelectionRect(wxWindow *win, wxDC& dc, const wxRect& rect, int flags) @@ -548,7 +557,7 @@ wxRendererXP::DrawItemSelectionRect(wxWindow * WXUNUSED(win), } else // !focused { - brush = wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW)); + brush = wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); } } else // !selected @@ -557,12 +566,11 @@ wxRendererXP::DrawItemSelectionRect(wxWindow * WXUNUSED(win), } dc.SetBrush(brush); - - // unlike for wxRendererGeneric, on windows we _never_ want to draw - // the outline of the rectangle: dc.SetPen(*wxTRANSPARENT_PEN); - dc.DrawRectangle( rect ); + + if ((flags & wxCONTROL_FOCUSED) && (flags & wxCONTROL_CURRENT)) + DrawFocusRect( win, dc, rect, flags ); }