X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fslider.cpp;h=1e763c639bf5309fba69d3a3ce3e680aba97eff1;hb=3bdb7fd6873ca45ce7e7754040b69b0d941eef31;hp=de4d12e3d69646f4960d65c5ee4316901cbc9bcd;hpb=2accd84fb2f8cc96efea8b3f27e381c2d2749160;p=libs%2Fgltk.git diff --git a/source/slider.cpp b/source/slider.cpp index de4d12e..1e763c6 100644 --- a/source/slider.cpp +++ b/source/slider.cpp @@ -9,7 +9,9 @@ Slider::Slider(): value(0), step(0.1), dragging(false), - drag_area_size(0) + drag_area_size(0), + drag_area_offset(0), + slider_size(1) { } void Slider::set_value(double v) @@ -27,7 +29,10 @@ void Slider::set_value(double v) } if(value!=old_value) + { signal_value_changed.emit(value); + rebuild(); + } } void Slider::set_range(double a, double b) @@ -43,6 +48,21 @@ void Slider::set_step(double s) set_value(value); } +void Slider::click(int p) +{ + p -= drag_area_offset; + if(p<0 || p>=static_cast(drag_area_size)) + return; + + int sp = static_cast((drag_area_size-slider_size)*(value-min)/(max-min)); + if(p=static_cast(sp+slider_size)) + set_value(value+step*10); + else + start_drag(drag_area_offset+p); +} + void Slider::start_drag(int p) { dragging = true; @@ -54,7 +74,7 @@ void Slider::start_drag(int p) void Slider::drag(int p) { if(max>min) - set_value(drag_start_value+(p-drag_start_pos)*(max-min)/drag_area_size); + set_value(drag_start_value+(p-drag_start_pos)*(max-min)/(drag_area_size-slider_size)); } void Slider::end_drag() @@ -65,17 +85,12 @@ void Slider::end_drag() Slider::Loader::Loader(Slider &s): - Widget::Loader(s) + DataFile::DerivedObjectLoader(s) { add("range", &Slider::min, &Slider::max); add("step", &Slider::step); add("value", &Slider::value); } -Slider &Slider::Loader::get_object() const -{ - return static_cast(obj); -} - } // namespace GLtk } // namespace Msp