X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/489468feaa08b8f504735eecca522fb8d0f825d2..bb69632a56a827bed4cfae842bfffa88259ac1aa:/src/osx/carbon/scrolbar.cpp?ds=sidebyside diff --git a/src/osx/carbon/scrolbar.cpp b/src/osx/carbon/scrolbar.cpp index c7c1263451..7fc53b8ae5 100644 --- a/src/osx/carbon/scrolbar.cpp +++ b/src/osx/carbon/scrolbar.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/mac/carbon/scrolbar.cpp +// Name: src/osx/carbon/scrolbar.cpp // Purpose: wxScrollBar // Author: Stefan Csomor // Modified by: @@ -19,84 +19,49 @@ #include "wx/settings.h" #endif -#include "wx/mac/uma.h" +#include "wx/osx/private.h" -IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl) - -BEGIN_EVENT_TABLE(wxScrollBar, wxControl) -END_EVENT_TABLE() - - -bool wxScrollBar::Create( wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - long style, - const wxValidator& validator, - const wxString& name ) +class wxOSXScrollBarCarbonImpl : public wxMacControl { - m_macIsUserPane = false; - - if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) ) - return false; - - Rect bounds = wxMacGetBoundsForControl( this, pos, size ); +public : + wxOSXScrollBarCarbonImpl( wxWindowMac* peer) : wxMacControl( peer ) + { + } + + void SetScrollThumb( wxInt32 value, wxInt32 thumbSize ) + { + SetValue( value ); + SetControlViewSize(m_controlRef , thumbSize ); + } +protected: +}; + +wxWidgetImplType* wxWidgetImpl::CreateScrollBar( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) +{ + Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size ); - m_peer = new wxMacControl( this ); + wxMacControl* peer = new wxOSXScrollBarCarbonImpl( wxpeer ); OSStatus err = CreateScrollBarControl( MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, 0, 0, 100, 1, true /* liveTracking */, GetwxMacLiveScrollbarActionProc(), - m_peer->GetControlRefAddr() ); + peer->GetControlRefAddr() ); verify_noerr( err ); - - MacPostControlCreate( pos, size ); - - return true; -} - -wxScrollBar::~wxScrollBar() -{ -} - -void wxScrollBar::SetThumbPosition( int viewStart ) -{ - m_peer->SetValue( viewStart ); -} - -int wxScrollBar::GetThumbPosition() const -{ - return m_peer->GetValue(); -} - -void wxScrollBar::SetScrollbar( int position, - int thumbSize, - int range, - int pageSize, - bool WXUNUSED(refresh) ) -{ - m_pageSize = pageSize; - m_viewSize = thumbSize; - m_objectSize = range; - - int range1 = wxMax( (m_objectSize - m_viewSize), 0 ); - - m_peer->SetMinimum( 0 ); - m_peer->SetMaximum( range1 ); - m_peer->SetValue( position ); - m_peer->SetViewSize( m_viewSize ); -} - -void wxScrollBar::Command( wxCommandEvent& event ) -{ - SetThumbPosition( event.GetInt() ); - ProcessCommand( event ); + return peer; } void wxScrollBar::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 controlpart, bool mouseStillDown ) { +#if wxOSX_USE_CARBON + int position = m_peer->GetValue(); - int minPos = m_peer->GetMinimum(); + int minPos = 0 ; int maxPos = m_peer->GetMaximum(); wxEventType scrollEvent = wxEVT_NULL; @@ -166,82 +131,5 @@ void wxScrollBar::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 con window->MacOnScroll( event ); else HandleWindowEvent( event ); -} - -wxInt32 wxScrollBar::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler), WXEVENTREF mevent ) -{ - 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); - - // 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; - - switch ( controlpart ) - { - case kControlIndicatorPart: - nScrollInc = 0; - scrollEvent = wxEVT_SCROLL_THUMBRELEASE; - break; - - default: - wxFAIL_MSG(wxT("unknown scrollbar selector")); - break; - } - - int new_pos = position + nScrollInc; - - if (new_pos < minPos) - new_pos = minPos; - else if (new_pos > maxPos) - new_pos = maxPos; - - if ( nScrollInc ) - SetThumbPosition( new_pos ); - - wxScrollEvent event( scrollEvent, m_windowId ); - if ( m_windowStyle & wxHORIZONTAL ) - event.SetOrientation( wxHORIZONTAL ); - else - event.SetOrientation( wxVERTICAL ); - - event.SetPosition( new_pos ); - event.SetEventObject( this ); - wxWindow* window = GetParent(); - if (window && window->MacIsWindowScrollbar( this )) - // this is hardcoded - window->MacOnScroll( event ); - else - HandleWindowEvent( event ); - - return noErr; -} - - -wxSize wxScrollBar::DoGetBestSize() const -{ - int w = 100; - int h = 100; - - if ( IsVertical() ) - { - w = wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); - } - else - { - h = wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y); - } - - wxSize best(w, h); - CacheBestSize(best); - return best; -} +#endif +} \ No newline at end of file