From: Kevin Ollivier Date: Thu, 17 Jun 2004 04:52:05 +0000 (+0000) Subject: Fixing sizing problems on OS X. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f26ca7f8e4746515f7c763eaacf2fcdd6937e84f Fixing sizing problems on OS X. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27843 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/carbon/combobox.cpp b/src/mac/carbon/combobox.cpp index f158ee702e..6ca5ce57db 100644 --- a/src/mac/carbon/combobox.cpp +++ b/src/mac/carbon/combobox.cpp @@ -39,10 +39,13 @@ MenuHandle NewUniqueMenu() // ---------------------------------------------------------------------------- // the margin between the text control and the choice -static const wxCoord MARGIN = 2; #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; @@ -207,7 +210,8 @@ wxSize wxComboBox::DoGetBestSize() const if ( m_text != NULL ) { wxSize sizeText = m_text->GetBestSize(); - + if (sizeText.y > size.y) + size.y = sizeText.y; size.x = POPUPWIDTH + sizeText.x + MARGIN; } @@ -216,8 +220,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 ) { @@ -228,8 +238,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); } } diff --git a/src/mac/carbon/slider.cpp b/src/mac/carbon/slider.cpp index 2be3714446..e90a510398 100644 --- a/src/mac/carbon/slider.cpp +++ b/src/mac/carbon/slider.cpp @@ -79,7 +79,10 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, UInt16 tickMarks = 0 ; if ( style & wxSL_AUTOTICKS ) - tickMarks = maxValue - minValue ; + tickMarks = (maxValue - minValue); + + if (tickMarks > 20) + tickMarks = tickMarks/5; //keep the number of tickmarks from becoming unwieldly m_peer = new wxMacControl() ; verify_noerr ( CreateSliderControl( MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds , @@ -353,9 +356,16 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) int sliderBreadth; xborder = yborder = 0; - + if (GetWindowStyle() & wxSL_LABELS) { + //Labels have this control's parent as their parent + //so if this control is not at 0,0 relative to the parent + //the labels need to know the position of this control + //relative to its parent in order to size properly, so + //move the control first so we can use GetPosition() + wxControl::DoSetSize( x, y , w , h ,sizeFlags ) ; + wxString text; int ht; @@ -382,30 +392,32 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) if(GetWindowStyle() & wxSL_VERTICAL) { - + h = h - yborder ; + if ( m_macMinimumStatic ) - m_macMinimumStatic->Move(x + sliderBreadth + wxSLIDER_BORDERTEXT, - y + h - yborder - textheight); + m_macMinimumStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, + GetPosition().y + h - yborder - textheight); if ( m_macMaximumStatic ) - m_macMaximumStatic->Move(x + sliderBreadth + wxSLIDER_BORDERTEXT, y + 0); + m_macMaximumStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + 0); if ( m_macValueStatic ) - m_macValueStatic->Move(0, y + h - textheight); - h = h - yborder ; + m_macValueStatic->Move(GetPosition().x, GetPosition().y + h - textheight); } else { + w = w - xborder ; if ( m_macMinimumStatic ) - m_macMinimumStatic->Move(x + 0, y + sliderBreadth + wxSLIDER_BORDERTEXT); + m_macMinimumStatic->Move(GetPosition().x + 0, GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT); if ( m_macMaximumStatic ) - m_macMaximumStatic->Move(x + w - xborder - maxValWidth / 2, - y + sliderBreadth + wxSLIDER_BORDERTEXT); + m_macMaximumStatic->Move(GetPosition().x + w - (maxValWidth/2), + GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT); if ( m_macValueStatic ) - m_macValueStatic->Move(x + w - textwidth, y + 0); - w = w - xborder ; + m_macValueStatic->Move(GetPosition().x + w, GetPosition().y + 0); } } - + //If the control has labels, we still need to call this again because + //the labels alter the control's w and h values. wxControl::DoSetSize( x, y , w , h ,sizeFlags ) ; + } void wxSlider::DoMoveWindow(int x, int y, int width, int height)