X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ab1ce969dfb27f5d366ee6a0de3ff2bc0205b56a..0bbe61b8c18a1795189f0cf73cc61c14a0fb846d:/src/msw/checkbox.cpp?ds=inline diff --git a/src/msw/checkbox.cpp b/src/msw/checkbox.cpp index 8cbda8d72e..02a5a495c5 100644 --- a/src/msw/checkbox.cpp +++ b/src/msw/checkbox.cpp @@ -34,8 +34,9 @@ #include "wx/settings.h" #endif +#include "wx/msw/dc.h" // for wxDCTemp #include "wx/msw/uxtheme.h" -#include "wx/msw/private.h" +#include "wx/renderer.h" // ---------------------------------------------------------------------------- // constants @@ -53,10 +54,6 @@ #define BST_INDETERMINATE 0x0002 #endif -#ifndef DFCS_HOT - #define DFCS_HOT 0x1000 -#endif - #ifndef DT_HIDEPREFIX #define DT_HIDEPREFIX 0x00100000 #endif @@ -215,7 +212,7 @@ wxSize wxCheckBox::DoGetBestSize() const int wCheckbox, hCheckbox; if ( !str.empty() ) { - GetTextExtent(wxStripMenuCodes(str), &wCheckbox, &hCheckbox); + GetTextExtent(GetLabelText(str), &wCheckbox, &hCheckbox); wCheckbox += s_checkSize + GetCharWidth(); if ( hCheckbox < s_checkSize ) @@ -449,24 +446,20 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) const bool isFocused = m_isPressed || FindFocus() == this; - // draw the checkbox itself: note that this should really, really be in - // wxRendererNative but unfortunately we can't add a new virtual function - // to it without breaking backwards compatibility + // draw the checkbox itself + wxDCTemp dc(hdc); - // classic Win32 version -- this can be useful when we move this into - // wxRendererNative -#if defined(__WXWINCE__) || !wxUSE_UXTHEME - UINT state = DFCS_BUTTONCHECK; + int flags = 0; if ( !IsEnabled() ) - state |= DFCS_INACTIVE; + flags |= wxCONTROL_DISABLED; switch ( Get3StateValue() ) { case wxCHK_CHECKED: - state |= DFCS_CHECKED; + flags |= wxCONTROL_CHECKED; break; case wxCHK_UNDETERMINED: - state |= DFCS_PUSHED; + flags |= wxCONTROL_PRESSED; break; default: @@ -479,62 +472,10 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) } if ( wxFindWindowAtPoint(wxGetMousePosition()) == this ) - state |= DFCS_HOT; - - if ( !::DrawFrameControl(hdc, &rectCheck, DFC_BUTTON, state) ) - { - wxLogLastError(_T("DrawFrameControl(DFC_BUTTON)")); - } -#else // XP version - wxUxThemeEngine *themeEngine = wxUxThemeEngine::GetIfActive(); - if ( !themeEngine ) - return false; - - wxUxThemeHandle theme(this, L"BUTTON"); - if ( !theme ) - return false; + flags |= wxCONTROL_CURRENT; - int state; - switch ( Get3StateValue() ) - { - case wxCHK_CHECKED: - state = CBS_CHECKEDNORMAL; - break; - - case wxCHK_UNDETERMINED: - state = CBS_MIXEDNORMAL; - break; - - default: - wxFAIL_MSG( _T("unexpected Get3StateValue() return value") ); - // fall through - - case wxCHK_UNCHECKED: - state = CBS_UNCHECKEDNORMAL; - break; - } - - if ( !IsEnabled() ) - state += CBS_DISABLED_OFFSET; - else if ( m_isPressed ) - state += CBS_PRESSED_OFFSET; - else if ( m_isHot ) - state += CBS_HOT_OFFSET; - - HRESULT hr = themeEngine->DrawThemeBackground - ( - theme, - hdc, - BP_CHECKBOX, - state, - &rectCheck, - NULL - ); - if ( FAILED(hr) ) - { - wxLogApiError(_T("DrawThemeBackground(BP_CHECKBOX)"), hr); - } -#endif // 0/1 + wxRendererNative::Get(). + DrawCheckBox(this, dc, wxRectFromRECT(rectCheck), flags); // draw the text const wxString& label = GetLabel(); @@ -554,7 +495,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) // around it if ( isFocused ) { - if ( !::DrawText(hdc, label, label.length(), &rectLabel, + if ( !::DrawText(hdc, label.wx_str(), label.length(), &rectLabel, fmt | DT_CALCRECT) ) { wxLogLastError(_T("DrawText(DT_CALCRECT)")); @@ -566,7 +507,7 @@ bool wxCheckBox::MSWOnDraw(WXDRAWITEMSTRUCT *item) ::SetTextColor(hdc, ::GetSysColor(COLOR_GRAYTEXT)); } - if ( !::DrawText(hdc, label, label.length(), &rectLabel, fmt) ) + if ( !::DrawText(hdc, label.wx_str(), label.length(), &rectLabel, fmt) ) { wxLogLastError(_T("DrawText()")); }