Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_GUI_SCROLLBARGADGET_H__
00009 #define __SP_GUI_SCROLLBARGADGET_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013
00014 #ifdef SP_COMPILE_WITH_GUI
00015
00016
00017 #include "GUI/spGUIGadget.hpp"
00018
00019
00020 namespace sp
00021 {
00022 namespace gui
00023 {
00024
00025
00026 enum EScrollbarFlags
00027 {
00028 GUIFLAG_VERTICAL = 0x00000001,
00029 GUIFLAG_HATCHEDFACE = 0x00000002,
00030 };
00031
00032
00037 class SP_EXPORT GUIScrollbarGadget : public GUIGadget
00038 {
00039
00040 public:
00041
00042 GUIScrollbarGadget();
00043 ~GUIScrollbarGadget();
00044
00045 bool update();
00046 void draw();
00047
00048 void setSize(const dim::size2di &Size);
00049
00050 void setState(s32 State);
00051 void setRange(s32 Range);
00052
00053
00054
00055 inline s32 getState() const
00056 {
00057 return State_;
00058 }
00059 inline s32 getRange() const
00060 {
00061 return Range_;
00062 }
00063
00064 inline void scroll(s32 Speed)
00065 {
00066 setState(getState() + Speed);
00067 }
00068
00069 private:
00070
00071
00072
00073 enum EFocusUsages
00074 {
00075 USAGE_DRAG,
00076 USAGE_FORWARDS,
00077 USAGE_BACKWARDS,
00078 };
00079
00080
00081
00082 void drawScrollbar(const dim::rect2di &Rect);
00083 void drawScrollbarButton(const dim::rect2di &Rect, const dim::rect2df &Mapping, s32 UsageType);
00084
00085 void updateBarLocation();
00086 void updateDrag();
00087 void updateState();
00088
00089 void getButtonRects(
00090 dim::rect2di &BarRect,
00091 dim::rect2di &ButtonARect, dim::rect2di &ButtonBRect,
00092 dim::rect2di &PageARect, dim::rect2di &PageBRect
00093 ) const;
00094
00095
00096
00097 s32 State_, Range_, MaxState_, PageSize_;
00098 s32 BarPos_, BarLen_;
00099
00100 dim::point2di CursorPosBias_;
00101
00102 };
00103
00104
00105 }
00106
00107 }
00108
00109
00110 #endif
00111
00112 #endif
00113
00114
00115
00116