X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d3b9f782ef3949f583e8ac53795d36787f044fc3..81533a3af6ed598c32a35e1c1c2b60f4908f5541:/src/msw/combo.cpp diff --git a/src/msw/combo.cpp b/src/msw/combo.cpp index caf2fc428e..9d63aa4830 100644 --- a/src/msw/combo.cpp +++ b/src/msw/combo.cpp @@ -117,9 +117,7 @@ #define NATIVE_TEXT_INDENT_XP 4 #define NATIVE_TEXT_INDENT_CLASSIC 2 -#define TEXTCTRLXADJUST_XP 1 #define TEXTCTRLYADJUST_XP 3 -#define TEXTCTRLXADJUST_CLASSIC 1 #define TEXTCTRLYADJUST_CLASSIC 3 #define COMBOBOX_ANIMATION_RESOLUTION 10 @@ -223,60 +221,21 @@ wxComboCtrl::~wxComboCtrl() { } -void wxComboCtrl::OnThemeChange() -{ - // there doesn't seem to be any way to get the text colour using themes - // API: TMT_TEXTCOLOR doesn't work neither for EDIT nor COMBOBOX - SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); - -#if wxUSE_UXTHEME - wxUxThemeEngine * const theme = wxUxThemeEngine::GetIfActive(); - if ( theme ) - { - // NB: use EDIT, not COMBOBOX (the latter works in XP but not Vista) - wxUxThemeHandle hTheme(this, L"EDIT"); - COLORREF col; - HRESULT hr = theme->GetThemeColor - ( - hTheme, - EP_EDITTEXT, - ETS_NORMAL, - TMT_FILLCOLOR, - &col - ); - if ( SUCCEEDED(hr) ) - { - SetBackgroundColour(wxRGBToColour(col)); - - // skip the call below - return; - } - - wxLogApiError(_T("GetThemeColor(EDIT, ETS_NORMAL, TMT_FILLCOLOR)"), hr); - } -#endif - - SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); -} - void wxComboCtrl::OnResize() { // // Recalculates button and textctrl areas - int textCtrlXAdjust; int textCtrlYAdjust; #if wxUSE_UXTHEME if ( wxUxThemeEngine::GetIfActive() ) { - textCtrlXAdjust = TEXTCTRLXADJUST_XP; textCtrlYAdjust = TEXTCTRLYADJUST_XP; } else #endif { - textCtrlXAdjust = TEXTCTRLXADJUST_CLASSIC; textCtrlYAdjust = TEXTCTRLYADJUST_CLASSIC; } @@ -286,7 +245,7 @@ void wxComboCtrl::OnResize() CalculateAreas(btnWidth); // Position textctrl using standard routine - PositionTextCtrl(textCtrlXAdjust,textCtrlYAdjust); + PositionTextCtrl(0, textCtrlYAdjust); } // Draws non-XP GUI dotted line around the focus area @@ -402,6 +361,7 @@ wxComboCtrl::PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const //if ( hTheme ) // theme = wxUxThemeEngine::GetIfActive(); + wxColour fgCol; wxColour bgCol; bool doDrawDottedEdge = false; bool doDrawSelRect = true; @@ -427,28 +387,31 @@ wxComboCtrl::PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const if ( (m_iFlags & wxCC_FULL_BUTTON) && !(flags & wxCONTROL_ISSUBMENU) ) { // Vista style read-only combo + fgCol = GetForegroundColour(); + bgCol = GetBackgroundColour(); doDrawSelRect = false; doDrawDottedEdge = true; } else { - dc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) ); + fgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); bgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); } } else { - dc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT) ); + fgCol = GetForegroundColour(); bgCol = GetBackgroundColour(); doDrawSelRect = false; } } else { - dc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT) ); + fgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT); bgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE); } + dc.SetTextForeground(fgCol); dc.SetBrush(bgCol); if ( doDrawSelRect ) { @@ -763,7 +726,7 @@ static wxUint32 GetUserPreferencesMask() #endif #if wxUSE_COMBOCTRL_POPUP_ANIMATION -void wxComboCtrl::OnTimerEvent( wxTimerEvent& WXUNUSED(event) ) +void wxComboCtrl::DoTimerEvent() { bool stopTimer = false; @@ -831,7 +794,7 @@ bool wxComboCtrl::AnimateShow( const wxRect& rect, int flags ) m_animTimer.SetOwner( this, wxID_ANY ); m_animTimer.Start( COMBOBOX_ANIMATION_RESOLUTION, wxTIMER_CONTINUOUS ); - OnTimerEvent(*(NULL)); // Event is never used, so we can give NULL + DoTimerEvent(); return false; } @@ -868,6 +831,8 @@ bool wxComboCtrl::IsKeyPopupToggle(const wxKeyEvent& event) const case WXK_DOWN: case WXK_UP: + case WXK_NUMPAD_DOWN: + case WXK_NUMPAD_UP: // On XP or with writable combo in Classic, arrows don't open the // popup but Alt-arrow does if ( event.AltDown() ||