X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fda62793585ef3ebaa8823be7c1a3e3538e5349a..be10c7f969bb460dc79bd8946d59bf54c98ac660:/src/msw/combo.cpp diff --git a/src/msw/combo.cpp b/src/msw/combo.cpp index b85366b78c..3f9b3accbe 100644 --- a/src/msw/combo.cpp +++ b/src/msw/combo.cpp @@ -4,7 +4,6 @@ // Author: Jaakko Salli // Modified by: // Created: Apr-30-2006 -// RCS-ID: $Id$ // Copyright: (c) 2005 Jaakko Salli // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -117,9 +116,6 @@ #define NATIVE_TEXT_INDENT_XP 4 #define NATIVE_TEXT_INDENT_CLASSIC 2 -#define TEXTCTRLYADJUST_XP 3 -#define TEXTCTRLYADJUST_CLASSIC 3 - #define COMBOBOX_ANIMATION_RESOLUTION 10 #define COMBOBOX_ANIMATION_DURATION 200 // In milliseconds @@ -202,15 +198,18 @@ bool wxComboCtrl::Create(wxWindow *parent, if ( style & wxCC_STD_BUTTON ) m_iFlags |= wxCC_POPUP_ON_MOUSE_UP; + // Prepare background for double-buffering or better background theme + // support, whichever is possible. + SetDoubleBuffered(true); + if ( !IsDoubleBuffered() ) + SetBackgroundStyle( wxBG_STYLE_PAINT ); + // Create textctrl, if necessary CreateTextCtrl( wxNO_BORDER ); // Add keyboard input handlers for main control and textctrl InstallInputHandlers(); - // Prepare background for double-buffering - SetBackgroundStyle( wxBG_STYLE_CUSTOM ); - // SetInitialSize should be called last SetInitialSize(size); @@ -226,26 +225,13 @@ void wxComboCtrl::OnResize() // // Recalculates button and textctrl areas - int textCtrlYAdjust; - -#if wxUSE_UXTHEME - if ( wxUxThemeEngine::GetIfActive() ) - { - textCtrlYAdjust = TEXTCTRLYADJUST_XP; - } - else -#endif - { - textCtrlYAdjust = TEXTCTRLYADJUST_CLASSIC; - } - // Technically Classic Windows style combo has more narrow button, // but the native renderer doesn't paint it well like that. int btnWidth = 17; CalculateAreas(btnWidth); // Position textctrl using standard routine - PositionTextCtrl(0, textCtrlYAdjust); + PositionTextCtrl(); } // Draws non-XP GUI dotted line around the focus area @@ -307,7 +293,7 @@ wxComboCtrl::PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const if ( !(flags & wxCONTROL_ISSUBMENU) ) { // Drawing control - isEnabled = IsEnabled(); + isEnabled = IsThisEnabled(); doDrawFocusRect = ShouldDrawFocus(); #if wxUSE_UXTHEME @@ -434,14 +420,22 @@ void wxComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) // TODO: Convert drawing in this function to Windows API Code wxSize sz = GetClientSize(); - wxAutoBufferedPaintDC dc(this); + wxDC* dcPtr = wxAutoBufferedPaintDCFactory(this); + wxDC& dc = *dcPtr; const wxRect& rectButton = m_btnArea; wxRect rectTextField = m_tcArea; - wxColour bgCol = GetBackgroundColour(); + + // FIXME: Either SetBackgroundColour or GetBackgroundColour + // doesn't work under Vista, so here's a temporary + // workaround. + // In the theme-less rendering code below, this fixes incorrect + // background on read-only comboboxes (they are gray, but should be + // white). + wxColour bgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); #if wxUSE_UXTHEME - const bool isEnabled = IsEnabled(); + const bool isEnabled = IsThisEnabled(); wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl(); HDC hDc = GetHdcOf(*impl); @@ -514,11 +508,6 @@ void wxComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) if ( useVistaComboBox ) { - // FIXME: Either SetBackgroundColour or GetBackgroundColour - // doesn't work under Vista, so here's a temporary - // workaround. - bgCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); - // Draw the entire control as a single button? if ( !isNonStdButton ) { @@ -640,6 +629,8 @@ void wxComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) else wxComboPopup::DefaultPaintComboControl(this,dc,rectTextField); } + + delete dcPtr; } void wxComboCtrl::OnMouseEvent( wxMouseEvent& event )