]> git.tdb.fi Git - libs/gltk.git/blob - source/slider.h
Properly account for margins in sliders
[libs/gltk.git] / source / slider.h
1 #ifndef MSP_GLTK_SLIDER_H_
2 #define MSP_GLTK_SLIDER_H_
3
4 #include <sigc++/sigc++.h>
5 #include "widget.h"
6
7 namespace Msp {
8 namespace GLtk {
9
10 /**
11 Sliders are used to adjust numeric values visually.  This class provides the
12 common interface for sliders - see classes HSlider and VSlider for concrete
13 variations.
14 */
15 class Slider: public Widget
16 {
17 public:
18         class Loader: public DataFile::DerivedObjectLoader<Slider, Widget::Loader>
19         {
20         public:
21                 Loader(Slider &);
22         };
23
24         sigc::signal<void, double> signal_value_changed;
25
26 protected:
27         double min, max;
28         double value;
29         double step;
30
31         bool dragging;
32         double drag_start_pos;
33         double drag_start_value;
34         unsigned drag_area_size;
35         unsigned drag_area_offset;
36         unsigned slider_size;
37
38         Slider();
39
40 public:
41         void set_value(double);
42         void set_range(double, double);
43         void set_step(double);
44         double get_value() const { return value; }
45
46 protected:
47         void click(int);
48         void start_drag(int);
49         void drag(int);
50         void end_drag();
51 };
52
53 } // namespace GLtk
54 } // namespace Msp
55
56 #endif