+void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown )
+{
+ 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 ;
+
+ switch ( controlpart )
+ {
+ case kControlUpButtonPart :
+ nScrollInc = -1;
+ scrollEvent = wxEVT_SCROLL_LINEUP;
+ break ;
+
+ case kControlDownButtonPart :
+ nScrollInc = 1;
+ scrollEvent = wxEVT_SCROLL_LINEDOWN;
+ break ;
+
+ case kControlPageUpPart :
+ nScrollInc = -m_pageSize;
+ scrollEvent = wxEVT_SCROLL_PAGEUP;
+ break ;
+
+ case kControlPageDownPart :
+ nScrollInc = m_pageSize;
+ scrollEvent = wxEVT_SCROLL_PAGEDOWN;
+ break ;
+
+ case kControlIndicatorPart :
+ nScrollInc = 0 ;
+ if ( mouseStillDown )
+ scrollEvent = wxEVT_SCROLL_THUMBTRACK;
+ else
+ scrollEvent = wxEVT_SCROLL_THUMBRELEASE;
+ break ;
+
+ default :
+ wxFAIL_MSG(wxT("illegal 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
+ GetEventHandler()->ProcessEvent(event);
+}
+
+wxInt32 wxScrollBar::MacControlHit( WXEVENTHANDLERREF 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<ControlPartCode>(kEventParamControlPart, typeControlPartCode) ;
+
+ // all events have already been reported during mouse down, except for THUMBRELEASE
+ if ( controlpart != kControlIndicatorPart )
+ return eventNotHandledErr ;
+
+ switch ( controlpart )
+ {
+ case kControlIndicatorPart :
+ nScrollInc = 0 ;
+ scrollEvent = wxEVT_SCROLL_THUMBRELEASE;
+ break ;
+
+ default :
+ wxFAIL_MSG(wxT("illegal 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
+ GetEventHandler()->ProcessEvent(event);
+
+ return noErr ;
+}