]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/scrolbar_osx.cpp
Fix hangups when using sockets under OS X.
[wxWidgets.git] / src / osx / scrolbar_osx.cpp
index f9e695b48b509b14b1d07a239a728f6b352354c7..3a992ca618f18e9b4337060d43f32ba2a621498f 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "wx/osx/private.h"
 
+#if wxUSE_SCROLLBAR
+
 IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl)
 
 BEGIN_EVENT_TABLE(wxScrollBar, wxControl)
@@ -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