#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
{
}
-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;
}
CalculateAreas(btnWidth);
// Position textctrl using standard routine
- PositionTextCtrl(textCtrlXAdjust,textCtrlYAdjust);
+ PositionTextCtrl(0, textCtrlYAdjust);
}
// Draws non-XP GUI dotted line around the focus area
//if ( hTheme )
// theme = wxUxThemeEngine::GetIfActive();
+ wxColour fgCol;
wxColour bgCol;
bool doDrawDottedEdge = false;
bool doDrawSelRect = true;
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 )
{
#endif
#if wxUSE_COMBOCTRL_POPUP_ANIMATION
-void wxComboCtrl::OnTimerEvent( wxTimerEvent& WXUNUSED(event) )
+void wxComboCtrl::DoTimerEvent()
{
bool stopTimer = false;
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;
}
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() ||