]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/scrolbar.cpp
do NOT hard code univ sources in x11 port
[wxWidgets.git] / src / univ / scrolbar.cpp
index b848808a1445d04df6f9c2ec80db89ab49c14ebf..e2f146b7d42f1d7e270f74545f21c7c65c47fde1 100644 (file)
@@ -18,7 +18,7 @@
 // ----------------------------------------------------------------------------
 
 #ifdef __GNUG__
-    #pragma implementation "scrolbar.h"
+    #pragma implementation "univscrolbar.h"
 #endif
 
 #include "wx/wxprec.h"
     #undef WXDEBUG_SCROLLBAR
 #endif // !__WXDEBUG__
 
+#if defined(WXDEBUG_SCROLLBAR) && defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#include "wx/msw/private.h"
+#endif
+
 // ----------------------------------------------------------------------------
 // wxScrollBarTimer: this class is used to repeatedly scroll the scrollbar
 // when the mouse is help pressed on the arrow or on the bar. It generates the
@@ -296,6 +300,12 @@ wxScrollArrows::Arrow wxScrollBar::HitTest(const wxPoint& pt) const
 // ----------------------------------------------------------------------------
 
 void wxScrollBar::OnIdle(wxIdleEvent& event)
+{
+    UpdateThumb();
+    event.Skip();
+}
+
+void wxScrollBar::UpdateThumb()
 {
     if ( m_dirty )
     {
@@ -369,8 +379,6 @@ void wxScrollBar::OnIdle(wxIdleEvent& event)
 
         m_dirty = FALSE;
     }
-
-    event.Skip();
 }
 
 void wxScrollBar::DoDraw(wxControlRenderer *renderer)
@@ -460,6 +468,10 @@ bool wxScrollBar::PerformAction(const wxControlAction& action,
     {
         DoSetThumb(numArg);
 
+        // VS: we have to force redraw here, otherwise the thumb will lack
+        //     behind mouse cursor
+        UpdateThumb();
+
         scrollType = wxEVT_SCROLLWIN_THUMBTRACK;
     }
     else if ( action == wxACTION_SCROLL_LINE_UP )
@@ -531,14 +543,16 @@ void wxScrollBar::ScrollToEnd()
     DoSetThumb(m_range - m_thumbSize);
 }
 
-void wxScrollBar::ScrollLines(int nLines)
+bool wxScrollBar::ScrollLines(int nLines)
 {
     DoSetThumb(m_thumbPos + nLines);
+    return TRUE;
 }
 
-void wxScrollBar::ScrollPages(int nPages)
+bool wxScrollBar::ScrollPages(int nPages)
 {
     DoSetThumb(m_thumbPos + nPages*m_pageSize);
+    return TRUE;
 }
 
 // ============================================================================
@@ -653,7 +667,7 @@ void wxStdScrollBarInputHandler::HandleThumbMove(wxScrollBar *scrollbar,
     scrollbar->PerformAction(wxACTION_SCROLL_THUMB_MOVE, thumbPos);
 }
 
-bool wxStdScrollBarInputHandler::HandleKey(wxControl *control,
+bool wxStdScrollBarInputHandler::HandleKey(wxInputConsumer *consumer,
                                            const wxKeyEvent& event,
                                            bool pressed)
 {
@@ -669,22 +683,24 @@ bool wxStdScrollBarInputHandler::HandleKey(wxControl *control,
             case WXK_LEFT:      action = wxACTION_SCROLL_LINE_UP;   break;
             case WXK_HOME:      action = wxACTION_SCROLL_START;     break;
             case WXK_END:       action = wxACTION_SCROLL_END;       break;
+            case WXK_PAGEUP:
             case WXK_PRIOR:     action = wxACTION_SCROLL_PAGE_UP;   break;
+            case WXK_PAGEDOWN:
             case WXK_NEXT:      action = wxACTION_SCROLL_PAGE_DOWN; break;
         }
 
         if ( !!action )
         {
-            control->PerformAction(action);
+            consumer->PerformAction(action);
 
             return TRUE;
         }
     }
 
-    return wxStdInputHandler::HandleKey(control, event, pressed);
+    return wxStdInputHandler::HandleKey(consumer, event, pressed);
 }
 
-bool wxStdScrollBarInputHandler::HandleMouse(wxControl *control,
+bool wxStdScrollBarInputHandler::HandleMouse(wxInputConsumer *consumer,
                                              const wxMouseEvent& event)
 {
     // is this a click event from an acceptable button?
@@ -692,7 +708,7 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxControl *control,
     if ( (btn != -1) && IsAllowedButton(btn) )
     {
         // determine which part of the window mouse is in
-        wxScrollBar *scrollbar = wxStaticCast(control, wxScrollBar);
+        wxScrollBar *scrollbar = wxStaticCast(consumer->GetInputWindow(), wxScrollBar);
         wxHitTest ht = m_renderer->HitTestScrollbar
                                    (
                                     scrollbar,
@@ -706,7 +722,7 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxControl *control,
             if ( !m_winCapture )
             {
                 m_btnCapture = btn;
-                m_winCapture = control;
+                m_winCapture = consumer->GetInputWindow();
                 m_winCapture->CaptureMouse();
 
                 // generate the command
@@ -733,7 +749,7 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxControl *control,
                         break;
 
                     case wxHT_SCROLLBAR_THUMB:
-                        control->PerformAction(wxACTION_SCROLL_THUMB_DRAG);
+                        consumer->PerformAction(wxACTION_SCROLL_THUMB_DRAG);
                         m_ofsMouse = GetMouseCoord(scrollbar, event) -
                                      m_renderer->ScrollbarToPixel(scrollbar);
 
@@ -791,13 +807,13 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxControl *control,
         }
     }
 
-    return wxStdInputHandler::HandleMouse(control, event);
+    return wxStdInputHandler::HandleMouse(consumer, event);
 }
 
-bool wxStdScrollBarInputHandler::HandleMouseMove(wxControl *control,
+bool wxStdScrollBarInputHandler::HandleMouseMove(wxInputConsumer *consumer,
                                                  const wxMouseEvent& event)
 {
-    wxScrollBar *scrollbar = wxStaticCast(control, wxScrollBar);
+    wxScrollBar *scrollbar = wxStaticCast(consumer->GetInputWindow(), wxScrollBar);
 
     if ( m_winCapture )
     {