#include "wx/univ/renderer.h"
#include "wx/univ/inphand.h"
#include "wx/univ/theme.h"
+#include "wx/log.h"
#define WXDEBUG_SCROLLBAR
#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
{
}
+bool wxScrollBar::AcceptsFocus() const
+{
+ if (!wxWindow::AcceptsFocus()) return FALSE;
+
+ wxWindow *parent = (wxWindow*) GetParent();
+
+ if (parent)
+ {
+ if ((parent->GetScrollbar( wxHORIZONTAL ) == this) ||
+ (parent->GetScrollbar( wxVERTICAL ) == this))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
// ----------------------------------------------------------------------------
// scrollbar API
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
void wxScrollBar::OnIdle(wxIdleEvent& event)
+{
+ UpdateThumb();
+ event.Skip();
+}
+
+void wxScrollBar::UpdateThumb()
{
if ( m_dirty )
{
}
#endif // WXDEBUG_SCROLLBAR
- Refresh(TRUE, &rect);
+ Refresh(FALSE, &rect);
}
m_elementsState[n] &= ~wxCONTROL_DIRTY;
m_dirty = FALSE;
}
-
- event.Skip();
}
void wxScrollBar::DoDraw(wxControlRenderer *renderer)
{
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 )
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;
}