X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d3b5db4b25043b35e93215b36e4d82e0e163fe43..da2101204027855793c4264388b95a208967ae15:/src/mac/carbon/combobox.cpp diff --git a/src/mac/carbon/combobox.cpp b/src/mac/carbon/combobox.cpp index 6b5d168080..b1b55589f0 100644 --- a/src/mac/carbon/combobox.cpp +++ b/src/mac/carbon/combobox.cpp @@ -39,8 +39,15 @@ MenuHandle NewUniqueMenu() // ---------------------------------------------------------------------------- // the margin between the text control and the choice +#if TARGET_API_MAC_OSX +// margin should be bigger on OS X due to blue highlight +// around text control. +static const wxCoord MARGIN = 6; +static const int POPUPWIDTH = 24; +#else static const wxCoord MARGIN = 2; static const int POPUPWIDTH = 18; +#endif static const int POPUPHEIGHT = 23; @@ -55,6 +62,9 @@ public: : wxTextCtrl( cb , 1 ) { m_cb = cb; + + // remove the default minsize, the combobox will have one instead + SetSizeHints(-1,-1); } protected: @@ -135,6 +145,9 @@ public: : wxChoice( cb , 1 ) { m_cb = cb; + + // remove the default minsize, the combobox will have one instead + SetSizeHints(-1,-1); } protected: @@ -149,6 +162,13 @@ protected: event2.SetString(m_cb->GetStringSelection()); m_cb->ProcessCommand(event2); } + virtual wxSize DoGetBestSize() const + { + wxSize sz = wxChoice::DoGetBestSize() ; + if (! m_cb->HasFlag(wxCB_READONLY) ) + sz.x = POPUPWIDTH; + return sz ; + } private: wxComboBox *m_cb; @@ -185,12 +205,15 @@ wxComboBox::~wxComboBox() wxSize wxComboBox::DoGetBestSize() const { + if (!m_choice || !m_text) + return GetSize(); wxSize size = m_choice->GetBestSize(); if ( m_text != NULL ) { wxSize sizeText = m_text->GetBestSize(); - + if (sizeText.y > size.y) + size.y = sizeText.y; size.x = POPUPWIDTH + sizeText.x + MARGIN; } @@ -199,8 +222,14 @@ wxSize wxComboBox::DoGetBestSize() const void wxComboBox::DoMoveWindow(int x, int y, int width, int height) { height = POPUPHEIGHT; - - wxControl::DoMoveWindow(x, y, width, height); + int origin = 0; +#if TARGET_API_MAC_OSX + // give the controls some padding so that the text ctrl's borders + // and blue highlight can appear + origin = 4; +#endif + + wxControl::DoMoveWindow(x, y, width + origin, height + origin); if ( m_text == NULL ) { @@ -211,8 +240,14 @@ void wxComboBox::DoMoveWindow(int x, int y, int width, int height) { else { wxCoord wText = width - POPUPWIDTH - MARGIN; - m_text->SetSize(0, 0, wText, height); - m_choice->SetSize(0 + wText + MARGIN, 0, POPUPWIDTH, -1); +#if TARGET_API_MAC_OSX + // also, we need to shrink the size of the wxTextCtrl a bit + // to make it appear properly on OS X. + height -= 8; + wText -= 8; +#endif + m_text->SetSize(origin, origin, wText, height); + m_choice->SetSize(origin + wText + MARGIN, 0, POPUPWIDTH, -1); } } @@ -290,7 +325,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, } m_choice = new wxComboBoxChoice(this, style ); - + m_choice->SetSizeHints( wxSize( POPUPWIDTH , POPUPHEIGHT ) ) ; wxSize csize = size; if ( style & wxCB_READONLY ) { @@ -332,6 +367,11 @@ wxString wxComboBox::GetValue() const return result; } +int wxComboBox::GetCount() const +{ + return m_choice->GetCount() ; +} + void wxComboBox::SetValue(const wxString& value) { int s = FindString (value);