+ unsigned steps = static_cast<unsigned>((v-min)/step+0.5);
+ value = min+steps*step;
+ }
+
+ if(value!=old_value)
+ signal_value_changed.emit(value);
+}
+
+void Slider::set_range(double a, double b)
+{
+ min = a;
+ max = b;
+ set_value(value);
+}
+
+void Slider::set_step(double s)
+{
+ step = s;
+ set_value(value);
+}
+
+void Slider::start_drag(int p)
+{
+ dragging = true;
+ drag_start_pos = p;
+ drag_start_value = value;
+ set_state(ACTIVE);
+}
+
+void Slider::drag(int p)
+{
+ if(max>min)
+ {
+ set_value(drag_start_value+(p-drag_start_pos)*(max-min)/drag_area_size);
+ rebuild();