X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..8bd2fdfd585609a9237e6a5e813cc51ed9185ab2:/src/mac/carbon/slider.cpp diff --git a/src/mac/carbon/slider.cpp b/src/mac/carbon/slider.cpp index 214d46c808..fb8d6a322a 100644 --- a/src/mac/carbon/slider.cpp +++ b/src/mac/carbon/slider.cpp @@ -6,7 +6,7 @@ // Created: 1998-01-01 // RCS-ID: $Id$ // Copyright: (c) Stefan Csomor -// Licence: wxWidgets licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -79,11 +79,16 @@ 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 , value , minValue , maxValue , kControlSliderPointsDownOrRight , tickMarks , true /* liveTracking */ , - wxMacLiveScrollbarActionUPP , (ControlRef*) &m_macControl ) ) ; + wxMacLiveScrollbarActionUPP , m_peer->GetControlRefAddr() ) ); + if(style & wxSL_VERTICAL) { SetSizeHints(10, -1, 10, -1); // Forces SetSize to use the proper width @@ -118,7 +123,7 @@ wxSlider::~wxSlider() int wxSlider::GetValue() const { - return GetControl32BitValue( (ControlRef) m_macControl) ; + return m_peer->GetValue() ; } void wxSlider::SetValue(int value) @@ -127,7 +132,7 @@ void wxSlider::SetValue(int value) valuestring.Printf( wxT("%d") , value ) ; if ( m_macValueStatic ) m_macValueStatic->SetLabel( valuestring ) ; - SetControl32BitValue( (ControlRef) m_macControl , value ) ; + m_peer->SetValue( value ) ; } void wxSlider::SetRange(int minValue, int maxValue) @@ -137,8 +142,8 @@ void wxSlider::SetRange(int minValue, int maxValue) m_rangeMin = minValue; m_rangeMax = maxValue; - SetControl32BitMinimum( (ControlRef) m_macControl, m_rangeMin); - SetControl32BitMaximum( (ControlRef) m_macControl, m_rangeMax); + m_peer->SetMinimum( m_rangeMin); + m_peer->SetMaximum( m_rangeMax); if(m_macMinimumStatic) { value.Printf(wxT("%d"), m_rangeMin); @@ -232,7 +237,7 @@ void wxSlider::Command (wxCommandEvent & event) void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bool mouseStillDown ) { - SInt16 value = ::GetControl32BitValue( (ControlRef) m_macControl ) ; + SInt16 value = m_peer->GetValue() ; SetValue( value ) ; @@ -254,7 +259,7 @@ void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bo wxInt32 wxSlider::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF mevent ) { - SInt16 value = ::GetControl32BitValue( (ControlRef) m_macControl ) ; + SInt16 value = m_peer->GetValue() ; SetValue( value ) ; @@ -351,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; @@ -380,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); 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 ); } 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)