X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7962f85aaeb3014f9b77cffb67811b24dbb2473f..bc429ce01f519f3edae182b516cb15b8d2df54a7:/src/common/combocmn.cpp diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp index deeff9218a..aef6c75cbf 100644 --- a/src/common/combocmn.cpp +++ b/src/common/combocmn.cpp @@ -35,7 +35,6 @@ #include "wx/timer.h" #endif -#include "wx/dcbuffer.h" #include "wx/tooltip.h" #include "wx/combo.h" @@ -63,6 +62,7 @@ #if defined(__WXMSW__) #define USE_TRANSIENT_POPUP 1 // Use wxPopupWindowTransient (preferred, if it works properly on platform) +#define TEXTCTRL_TEXT_CENTERED 0 // 1 if text in textctrl is vertically centered //#undef wxUSE_POPUPWIN //#define wxUSE_POPUPWIN 0 @@ -70,14 +70,17 @@ #elif defined(__WXGTK__) #define USE_TRANSIENT_POPUP 1 // Use wxPopupWindowTransient (preferred, if it works properly on platform) +#define TEXTCTRL_TEXT_CENTERED 1 // 1 if text in textctrl is vertically centered #elif defined(__WXMAC__) #define USE_TRANSIENT_POPUP 0 // Use wxPopupWindowTransient (preferred, if it works properly on platform) +#define TEXTCTRL_TEXT_CENTERED 1 // 1 if text in textctrl is vertically centered #else #define USE_TRANSIENT_POPUP 0 // Use wxPopupWindowTransient (preferred, if it works properly on platform) +#define TEXTCTRL_TEXT_CENTERED 1 // 1 if text in textctrl is vertically centered #endif @@ -610,9 +613,6 @@ END_EVENT_TABLE() IMPLEMENT_ABSTRACT_CLASS(wxComboCtrlBase, wxControl) -// Have global double buffer - should be enough for multiple combos -static wxBitmap* gs_doubleBuffer = (wxBitmap*) NULL; - void wxComboCtrlBase::Init() { m_winPopup = (wxWindow *)NULL; @@ -701,6 +701,9 @@ wxComboCtrlBase::CreateTextCtrl(int style, const wxValidator& validator) { if ( !(m_windowStyle & wxCB_READONLY) ) { + if ( m_text ) + m_text->Destroy(); + // wxTE_PROCESS_TAB is needed because on Windows, wxTAB_TRAVERSAL is // not used by the wxPropertyGrid and therefore the tab is processed by // looking at ancestors to see if they have wxTAB_TRAVERSAL. The @@ -737,9 +740,6 @@ wxComboCtrlBase::~wxComboCtrlBase() if ( HasCapture() ) ReleaseMouse(); - delete gs_doubleBuffer; - gs_doubleBuffer = (wxBitmap*) NULL; - #if INSTALL_TOPLEV_HANDLER delete ((wxComboFrameEventHandler*)m_toplevEvtHandler); m_toplevEvtHandler = (wxEvtHandler*) NULL; @@ -886,6 +886,7 @@ void wxComboCtrlBase::PositionTextCtrl( int textCtrlXAdjust, int textCtrlYAdjust wxSize sz = GetClientSize(); int customBorder = m_widthCustomBorder; +#if !TEXTCTRL_TEXT_CENTERED if ( (m_text->GetWindowStyleFlag() & wxBORDER_MASK) == wxNO_BORDER ) { // Centre textctrl @@ -912,11 +913,16 @@ void wxComboCtrlBase::PositionTextCtrl( int textCtrlXAdjust, int textCtrlYAdjust } } else +#else + wxUnusedVar(textCtrlXAdjust); + wxUnusedVar(textCtrlYAdjust); +#endif { - m_text->SetSize( m_tcArea.x, - 0, - sz.x - m_btnArea.x - m_widthCustomPaint - customBorder, - sz.y ); + // If it has border, have textctrl will the entire text field. + m_text->SetSize( m_tcArea.x + m_widthCustomPaint, + customBorder, + sz.x - m_btnArea.width - m_widthCustomPaint - customBorder, + sz.y-(customBorder*2) ); } } @@ -1238,19 +1244,6 @@ void wxComboCtrlBase::RecalcAndRefresh() } } -wxBitmap& wxComboCtrlBase::GetBufferBitmap( const wxSize& sz ) const -{ - // If size is larger, recalculate double buffer bitmap - if ( !gs_doubleBuffer || - sz.x > gs_doubleBuffer->GetWidth() || - sz.y > gs_doubleBuffer->GetHeight() ) - { - delete gs_doubleBuffer; - gs_doubleBuffer = new wxBitmap(sz.x+25,sz.y); - } - return *gs_doubleBuffer; -} - // ---------------------------------------------------------------------------- // miscellaneous event handlers // ---------------------------------------------------------------------------- @@ -1302,26 +1295,17 @@ bool wxComboCtrlBase::HandleButtonMouseEvent( wxMouseEvent& event, } else if ( type == wxEVT_LEFT_DOWN ) { - // Only accept event if it wasn't right after popup dismiss - //if ( ::wxGetLocalTimeMillis() > m_timeCanClick ) + if ( flags & (wxCC_MF_ON_CLICK_AREA|wxCC_MF_ON_BUTTON) ) { - // Need to test this, because it might be outside. - if ( flags & wxCC_MF_ON_BUTTON ) - { - m_btnState |= wxCONTROL_PRESSED; - Refresh(); + m_btnState |= wxCONTROL_PRESSED; + Refresh(); - if ( !(m_iFlags & wxCC_POPUP_ON_MOUSE_UP) ) - OnButtonClick(); - else - // If showing popup now, do not capture mouse or there will be interference - CaptureMouse(); - } + if ( !(m_iFlags & wxCC_POPUP_ON_MOUSE_UP) ) + OnButtonClick(); + else + // If showing popup now, do not capture mouse or there will be interference + CaptureMouse(); } - /*else - { - m_btnState = 0; - }*/ } else if ( type == wxEVT_LEFT_UP ) { @@ -1335,7 +1319,7 @@ bool wxComboCtrlBase::HandleButtonMouseEvent( wxMouseEvent& event, // If mouse was inside, fire the click event. if ( m_iFlags & wxCC_POPUP_ON_MOUSE_UP ) { - if ( flags & wxCC_MF_ON_BUTTON ) + if ( flags & (wxCC_MF_ON_CLICK_AREA|wxCC_MF_ON_BUTTON) ) OnButtonClick(); }