X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/524c47aa3adf2af11a3069fd5da035a604f08f66..33820d94285c0004acce756e7d10d9698e6387d1:/src/osx/scrolbar_osx.cpp diff --git a/src/osx/scrolbar_osx.cpp b/src/osx/scrolbar_osx.cpp index f9e695b48b..6767de28b6 100644 --- a/src/osx/scrolbar_osx.cpp +++ b/src/osx/scrolbar_osx.cpp @@ -21,6 +21,8 @@ #include "wx/osx/private.h" +#if wxUSE_SCROLLBAR + IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl) BEGIN_EVENT_TABLE(wxScrollBar, wxControl) @@ -39,7 +41,7 @@ bool wxScrollBar::Create( wxWindow *parent, if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) ) return false; - + m_peer = wxWidgetImpl::CreateScrollBar( this, parent, id, pos, size, style, GetExtraStyle() ); MacPostControlCreate( pos, size ); @@ -72,7 +74,7 @@ void wxScrollBar::SetScrollbar( int position, m_objectSize = range; int range1 = wxMax( (m_objectSize - m_viewSize), 0 ); - + m_peer->SetMaximum( range1 ); m_peer->SetScrollThumb( position, m_viewSize ); } @@ -83,7 +85,7 @@ void wxScrollBar::Command( wxCommandEvent& event ) ProcessCommand( event ); } -bool wxScrollBar::HandleClicked( double timestampsec ) +bool wxScrollBar::OSXHandleClicked( double WXUNUSED(timestampsec) ) { int new_pos = m_peer->GetValue(); @@ -124,3 +126,56 @@ wxSize wxScrollBar::DoGetBestSize() const CacheBestSize(best); return best; } + +void wxScrollBar::TriggerScrollEvent( wxEventType scrollEvent ) +{ + int position = m_peer->GetValue(); + int minPos = 0 ; + int maxPos = m_peer->GetMaximum(); + int nScrollInc = 0; + + if ( scrollEvent == wxEVT_SCROLL_LINEUP ) + { + nScrollInc = -1; + } + else if ( scrollEvent == wxEVT_SCROLL_LINEDOWN ) + { + nScrollInc = 1; + } + else if ( scrollEvent == wxEVT_SCROLL_PAGEUP ) + { + nScrollInc = -m_pageSize; + } + else if ( scrollEvent == wxEVT_SCROLL_PAGEDOWN ) + { + nScrollInc = m_pageSize; + } + + 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 ); +} + +#endif \ No newline at end of file