#ifndef _WX_UNIV_SCROLBAR_H_
#define _WX_UNIV_SCROLBAR_H_
-class WXDLLEXPORT wxScrollTimer;
+class WXDLLIMPEXP_FWD_CORE wxScrollTimer;
#include "wx/univ/scrarrow.h"
#include "wx/renderer.h"
// ----------------------------------------------------------------------------
// scroll the bar
-#define wxACTION_SCROLL_START _T("start") // to the beginning
-#define wxACTION_SCROLL_END _T("end") // to the end
-#define wxACTION_SCROLL_LINE_UP _T("lineup") // one line up/left
-#define wxACTION_SCROLL_PAGE_UP _T("pageup") // one page up/left
-#define wxACTION_SCROLL_LINE_DOWN _T("linedown") // one line down/right
-#define wxACTION_SCROLL_PAGE_DOWN _T("pagedown") // one page down/right
+#define wxACTION_SCROLL_START wxT("start") // to the beginning
+#define wxACTION_SCROLL_END wxT("end") // to the end
+#define wxACTION_SCROLL_LINE_UP wxT("lineup") // one line up/left
+#define wxACTION_SCROLL_PAGE_UP wxT("pageup") // one page up/left
+#define wxACTION_SCROLL_LINE_DOWN wxT("linedown") // one line down/right
+#define wxACTION_SCROLL_PAGE_DOWN wxT("pagedown") // one page down/right
// the scrollbar thumb may be dragged
-#define wxACTION_SCROLL_THUMB_DRAG _T("thumbdrag")
-#define wxACTION_SCROLL_THUMB_MOVE _T("thumbmove")
-#define wxACTION_SCROLL_THUMB_RELEASE _T("thumbrelease")
+#define wxACTION_SCROLL_THUMB_DRAG wxT("thumbdrag")
+#define wxACTION_SCROLL_THUMB_MOVE wxT("thumbmove")
+#define wxACTION_SCROLL_THUMB_RELEASE wxT("thumbrelease")
// ----------------------------------------------------------------------------
// wxScrollBar
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxScrollBar : public wxScrollBarBase,
+class WXDLLIMPEXP_CORE wxScrollBar : public wxScrollBarBase,
public wxControlWithArrows
{
public:
// for wxControlRenderer::DrawScrollbar() only
const wxScrollArrows& GetArrows() const { return m_arrows; }
+ // returns one of wxHT_SCROLLBAR_XXX constants
+ wxHitTest HitTestBar(const wxPoint& pt) const;
+
// idle processing
virtual void OnInternalIdle();
// is this scrollbar attached to a window or a standalone control?
bool IsStandalone() const;
+ // scrollbar geometry methods:
+
+ // gets the bounding box for a scrollbar element for the given (by default
+ // - current) thumb position
+ wxRect GetScrollbarRect(wxScrollBar::Element elem, int thumbPos = -1) const;
+
+ // returns the size of the scrollbar shaft excluding the arrows
+ wxCoord GetScrollbarSize() const;
+
+ // translate the scrollbar position (in logical units) into physical
+ // coordinate (in pixels) and the other way round
+ wxCoord ScrollbarToPixel(int thumbPos = -1);
+ int PixelToScrollbar(wxCoord coord);
+
+ // return the starting and ending positions, in pixels, of the thumb of a
+ // scrollbar with the given logical position, thumb size and range and the
+ // given physical length
+ static void GetScrollBarThumbSize(wxCoord length,
+ int thumbPos,
+ int thumbSize,
+ int range,
+ wxCoord *thumbStart,
+ wxCoord *thumbEnd);
+
private:
// total range of the scrollbar in logical units
int m_range;
// the object handling the arrows
wxScrollArrows m_arrows;
+ friend WXDLLIMPEXP_CORE class wxControlRenderer; // for geometry methods
+ friend class wxStdScrollBarInputHandler; // for geometry methods
+
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxScrollBar)
};
// Standard scrollbar input handler which can be used as a base class
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxStdScrollBarInputHandler : public wxStdInputHandler
+class WXDLLIMPEXP_CORE wxStdScrollBarInputHandler : public wxStdInputHandler
{
public:
// constructor takes a renderer (used for scrollbar hit testing) and the