X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4792d19265f446a15e669ef1cfda20b2dd36d414..b724bafee0cbbb5c587d11e82a18c8ea5b060f26:/src/mac/carbon/scrolbar.cpp?ds=inline diff --git a/src/mac/carbon/scrolbar.cpp b/src/mac/carbon/scrolbar.cpp index 2be39020bd..5f268188b9 100644 --- a/src/mac/carbon/scrolbar.cpp +++ b/src/mac/carbon/scrolbar.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: scrolbar.cpp +// Name: src/mac/carbon/scrolbar.cpp // Purpose: wxScrollBar // Author: Stefan Csomor // Modified by: @@ -11,12 +11,14 @@ #include "wx/wxprec.h" +#include "wx/scrolbar.h" + #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/log.h" -#endif // WX_PRECOMP + #include "wx/settings.h" +#endif -#include "wx/scrolbar.h" #include "wx/mac/uma.h" IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl) @@ -25,26 +27,30 @@ BEGIN_EVENT_TABLE(wxScrollBar, wxControl) END_EVENT_TABLE() -bool wxScrollBar::Create(wxWindow *parent, +bool wxScrollBar::Create( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, - const wxString& name) + const wxString& name ) { - m_macIsUserPane = false ; + m_macIsUserPane = false; - if ( !wxControl::Create(parent, id, pos, size, style, validator, name) ) + if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) ) return false; - Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ; + Rect bounds = wxMacGetBoundsForControl( this, pos, size ); - m_peer = new wxMacControl(this) ; - verify_noerr( CreateScrollBarControl( MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds , - 0 , 0 , 100 , 1 , true /* liveTracking */ , GetwxMacLiveScrollbarActionProc() , m_peer->GetControlRefAddr() ) ); + m_peer = new wxMacControl( this ); + OSStatus err = CreateScrollBarControl( + MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, + 0, 0, 100, 1, true /* liveTracking */, + GetwxMacLiveScrollbarActionProc(), + m_peer->GetControlRefAddr() ); + verify_noerr( err ); - MacPostControlCreate( pos, size ) ; + MacPostControlCreate( pos, size ); return true; } @@ -53,82 +59,82 @@ wxScrollBar::~wxScrollBar() { } -void wxScrollBar::SetThumbPosition(int viewStart) +void wxScrollBar::SetThumbPosition( int viewStart ) { - m_peer->SetValue( viewStart ) ; + m_peer->SetValue( viewStart ); } int wxScrollBar::GetThumbPosition() const { - return m_peer->GetValue() ; + return m_peer->GetValue(); } -void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageSize, bool refresh) +void wxScrollBar::SetScrollbar( int position, int thumbSize, int range, int pageSize, bool refresh ) { m_pageSize = pageSize; m_viewSize = thumbSize; m_objectSize = range; - int range1 = wxMax((m_objectSize - m_viewSize), 0) ; + int range1 = wxMax( (m_objectSize - m_viewSize), 0 ); - m_peer->SetMaximum( range1 ) ; - m_peer->SetMinimum( 0 ) ; - m_peer->SetValue( position ) ; - m_peer->SetViewSize( m_viewSize ) ; + m_peer->SetMinimum( 0 ); + m_peer->SetMaximum( range1 ); + m_peer->SetValue( position ); + m_peer->SetViewSize( m_viewSize ); } -void wxScrollBar::Command(wxCommandEvent& event) +void wxScrollBar::Command( wxCommandEvent& event ) { - SetThumbPosition(event.GetInt()); - ProcessCommand(event); + SetThumbPosition( event.GetInt() ); + ProcessCommand( event ); } -void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) +void wxScrollBar::MacHandleControlClick( WXWidget control, wxInt16 controlpart, bool mouseStillDown ) { - int position = m_peer->GetValue() ; - int minPos = m_peer->GetMinimum() ; - int maxPos = m_peer->GetMaximum() ; + int position = m_peer->GetValue(); + int minPos = m_peer->GetMinimum(); + int maxPos = m_peer->GetMaximum(); wxEventType scrollEvent = wxEVT_NULL; int nScrollInc = 0; // all events have already been reported during mouse down, except for THUMBRELEASE if ( !mouseStillDown && controlpart != kControlIndicatorPart ) - return ; + return; switch ( controlpart ) { - case kControlUpButtonPart : + case kControlUpButtonPart: nScrollInc = -1; scrollEvent = wxEVT_SCROLL_LINEUP; - break ; + break; - case kControlDownButtonPart : + case kControlDownButtonPart: nScrollInc = 1; scrollEvent = wxEVT_SCROLL_LINEDOWN; - break ; + break; - case kControlPageUpPart : + case kControlPageUpPart: nScrollInc = -m_pageSize; scrollEvent = wxEVT_SCROLL_PAGEUP; - break ; + break; - case kControlPageDownPart : + case kControlPageDownPart: nScrollInc = m_pageSize; scrollEvent = wxEVT_SCROLL_PAGEDOWN; - break ; + break; - case kControlIndicatorPart : - nScrollInc = 0 ; + case kControlIndicatorPart: + nScrollInc = 0; if ( mouseStillDown ) scrollEvent = wxEVT_SCROLL_THUMBTRACK; else scrollEvent = wxEVT_SCROLL_THUMBRELEASE; - break ; + break; - default : - wxFAIL_MSG(wxT("illegal scrollbar selector")); - break ; + default: + wxFAIL_MSG(wxT("unknown scrollbar selector")); + break; } int new_pos = position + nScrollInc; @@ -139,51 +145,53 @@ void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart new_pos = maxPos; if ( nScrollInc ) - SetThumbPosition(new_pos); + SetThumbPosition( new_pos ); - wxScrollEvent event(scrollEvent, m_windowId); + wxScrollEvent event( scrollEvent, m_windowId ); if ( m_windowStyle & wxHORIZONTAL ) - event.SetOrientation( wxHORIZONTAL ) ; + event.SetOrientation( wxHORIZONTAL ); else - event.SetOrientation( wxVERTICAL ) ; + event.SetOrientation( wxVERTICAL ); - event.SetPosition(new_pos); + event.SetPosition( new_pos ); event.SetEventObject( this ); - wxWindow* window = GetParent() ; - if (window && window->MacIsWindowScrollbar(this) ) + wxWindow* window = GetParent(); + if (window && window->MacIsWindowScrollbar( this )) // this is hardcoded - window->MacOnScroll(event); + window->MacOnScroll( event ); else - GetEventHandler()->ProcessEvent(event); + GetEventHandler()->ProcessEvent( event ); } -wxInt32 wxScrollBar::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF mevent ) +wxInt32 wxScrollBar::MacControlHit( WXEVENTHANDLERREF handler, WXEVENTREF mevent ) { - int position = m_peer->GetValue() ; - int minPos = m_peer->GetMinimum() ; - int maxPos = m_peer->GetMaximum() ; + int position = m_peer->GetValue(); + int minPos = m_peer->GetMinimum(); + int maxPos = m_peer->GetMaximum(); wxEventType scrollEvent = wxEVT_NULL; int nScrollInc = 0; - wxMacCarbonEvent cEvent( (EventRef) mevent ) ; - ControlPartCode controlpart = cEvent.GetParameter(kEventParamControlPart, typeControlPartCode) ; + wxMacCarbonEvent cEvent( (EventRef)mevent ); + ControlPartCode controlpart = cEvent.GetParameter(kEventParamControlPart, typeControlPartCode); // all events have already been reported during mouse down, except for THUMBRELEASE + // NB: this may need to be reviewed in light of the fact that scroll wheel events + // aren't being handled properly if ( controlpart != kControlIndicatorPart ) - return eventNotHandledErr ; + return eventNotHandledErr; switch ( controlpart ) { - case kControlIndicatorPart : - nScrollInc = 0 ; + case kControlIndicatorPart: + nScrollInc = 0; scrollEvent = wxEVT_SCROLL_THUMBRELEASE; - break ; + break; - default : - wxFAIL_MSG(wxT("illegal scrollbar selector")); - break ; + default: + wxFAIL_MSG(wxT("unknown scrollbar selector")); + break; } int new_pos = position + nScrollInc; @@ -194,22 +202,42 @@ wxInt32 wxScrollBar::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF meven new_pos = maxPos; if ( nScrollInc ) - SetThumbPosition(new_pos); + SetThumbPosition( new_pos ); - wxScrollEvent event(scrollEvent, m_windowId); + wxScrollEvent event( scrollEvent, m_windowId ); if ( m_windowStyle & wxHORIZONTAL ) event.SetOrientation( wxHORIZONTAL ); else event.SetOrientation( wxVERTICAL ); - event.SetPosition(new_pos); + event.SetPosition( new_pos ); event.SetEventObject( this ); - wxWindow* window = GetParent() ; - if (window && window->MacIsWindowScrollbar(this) ) + wxWindow* window = GetParent(); + if (window && window->MacIsWindowScrollbar( this )) // this is hardcoded - window->MacOnScroll(event); + window->MacOnScroll( event ); + else + GetEventHandler()->ProcessEvent( event ); + + return noErr; +} + + +wxSize wxScrollBar::DoGetBestSize() const +{ + int w = 100; + int h = 100; + + if ( IsVertical() ) + { + w = wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); + } else - GetEventHandler()->ProcessEvent(event); + { + h = wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y); + } - return noErr ; + wxSize best(w, h); + CacheBestSize(best); + return best; }