X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0847e36eff0512bf3c50c01e8d9dcff5e693ada5..9ed3454e3d06f99510cd203419c40c46a0370c08:/src/generic/combog.cpp diff --git a/src/generic/combog.cpp b/src/generic/combog.cpp index ef4d47169e..fdba8bc50a 100644 --- a/src/generic/combog.cpp +++ b/src/generic/combog.cpp @@ -46,7 +46,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 0 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 19 @@ -56,7 +55,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 2 -#define TEXTCTRLYADJUST 3 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 17 @@ -66,7 +64,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST -1 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 1 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 23 @@ -76,7 +73,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 0 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 22 @@ -86,7 +82,6 @@ // meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp #define TEXTCTRLXADJUST 0 -#define TEXTCTRLYADJUST 0 #define TEXTXADJUST 0 // how much is read-only text's x adjusted #define DEFAULT_DROPBUTTON_WIDTH 19 @@ -191,18 +186,20 @@ bool wxGenericComboCtrl::Create(wxWindow *parent, pos, size, style | wxFULL_REPAINT_ON_RESIZE, - wxDefaultValidator, + validator, name) ) return false; // Create textctrl, if necessary - CreateTextCtrl( tcBorder, validator ); + CreateTextCtrl( tcBorder ); // Add keyboard input handlers for main control and textctrl InstallInputHandlers(); - // Set background - SetBackgroundStyle( wxBG_STYLE_CUSTOM ); // for double-buffering + // Set background style for double-buffering, when needed + // (cannot use when system draws background automatically) + if ( !HasTransparentBackground() ) + SetBackgroundStyle( wxBG_STYLE_PAINT ); // SetInitialSize should be called last SetInitialSize(size); @@ -233,16 +230,24 @@ void wxGenericComboCtrl::OnResize() #endif // Move textctrl, if any, accordingly - PositionTextCtrl( TEXTCTRLXADJUST, TEXTCTRLYADJUST ); + PositionTextCtrl( TEXTCTRLXADJUST ); } void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) { - wxSize sz = GetClientSize(); - wxAutoBufferedPaintDC dc(this); + // Determine wxDC to use based on need to double-buffer or + // use system-generated transparent background portions + wxDC* dcPtr; + if ( HasTransparentBackground() ) + dcPtr = new wxPaintDC(this); + else + dcPtr = new wxAutoBufferedPaintDC(this); + wxDC& dc = *dcPtr; - const wxRect& rectb = m_btnArea; - wxRect rect = m_tcArea; + wxSize sz = GetClientSize(); + const wxRect& butRect = m_btnArea; + wxRect tcRect = m_tcArea; + wxRect fullRect(0, 0, sz.x, sz.y); // artificial simple border if ( m_widthCustomBorder ) @@ -250,16 +255,22 @@ void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) int customBorder = m_widthCustomBorder; // Set border colour +#ifdef __WXMAC__ + wxPen pen1( wxColour(133,133,133), + customBorder, + wxSOLID ); +#else wxPen pen1( wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT), customBorder, wxPENSTYLE_SOLID); +#endif dc.SetPen( pen1 ); // area around both controls - wxRect rect2(0,0,sz.x,sz.y); + wxRect rect2(fullRect); if ( m_iFlags & wxCC_IFLAG_BUTTON_OUTSIDE ) { - rect2 = m_tcArea; + rect2 = tcRect; if ( customBorder == 1 ) { rect2.Inflate(1); @@ -282,44 +293,49 @@ void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) dc.DrawRectangle(rect2); } -#ifndef __WXMAC__ // see note in OnThemeChange - wxColour winCol = GetBackgroundColour(); -#else - wxColour winCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); -#endif - dc.SetBrush(winCol); - dc.SetPen(winCol); - - //wxLogDebug(wxT("hei: %i tcy: %i tchei: %i"),GetClientSize().y,m_tcArea.y,m_tcArea.height); - //wxLogDebug(wxT("btnx: %i tcx: %i tcwid: %i"),m_btnArea.x,m_tcArea.x,m_tcArea.width); + // Clear the main background if the system doesn't do it by itself + if ( !HasTransparentBackground() && + (tcRect.x > 0 || tcRect.y > 0) ) + { + wxColour winCol = GetParent()->GetBackgroundColour(); + dc.SetBrush(winCol); + dc.SetPen(winCol); - // clear main background - dc.DrawRectangle(rect); + dc.DrawRectangle(fullRect); + } if ( !m_btn ) { // Standard button rendering - DrawButton(dc,rectb); + DrawButton(dc, butRect); } // paint required portion on the control - if ( (!m_text || m_widthCustomPaint) ) + if ( !m_text || m_widthCustomPaint ) { wxASSERT( m_widthCustomPaint >= 0 ); + // Clear the text-control area background + wxColour tcCol = GetBackgroundColour(); + dc.SetBrush(tcCol); + dc.SetPen(tcCol); + dc.DrawRectangle(tcRect); + // this is intentionally here to allow drawed rectangle's // right edge to be hidden if ( m_text ) - rect.width = m_widthCustomPaint; + tcRect.width = m_widthCustomPaint; dc.SetFont( GetFont() ); - dc.SetClippingRegion(rect); + dc.SetClippingRegion(tcRect); if ( m_popupInterface ) - m_popupInterface->PaintComboControl(dc,rect); + m_popupInterface->PaintComboControl(dc, tcRect); else - wxComboPopup::DefaultPaintComboControl(this,dc,rect); + wxComboPopup::DefaultPaintComboControl(this, dc, tcRect); } + + delete dcPtr; } void wxGenericComboCtrl::OnMouseEvent( wxMouseEvent& event ) @@ -408,19 +424,7 @@ void wxGenericComboCtrl::SetCustomPaintWidth( int width ) tc->RemoveEventHandler(m_textEvtHandler); delete m_textEvtHandler; -#if wxUSE_VALIDATORS - wxValidator* pValidator = tc->GetValidator(); - if ( pValidator ) - { - pValidator = (wxValidator*) pValidator->Clone(); - CreateTextCtrl( tcCreateStyle, *pValidator ); - delete pValidator; - } - else -#endif - { - CreateTextCtrl( tcCreateStyle, wxDefaultValidator ); - } + CreateTextCtrl( tcCreateStyle ); InstallInputHandlers(); }