X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fslider.cpp;h=4565675916433920d47e3699fe8155a7cd16e652;hb=73afd124ab87e8bace98db55517a56c797a9b8c7;hp=0b1d8b066ee2e992644d9cc0254dc672a6ac8db5;hpb=8f6f543758fb1b2b17ae2db519198d420eb9982d;p=libs%2Fgltk.git diff --git a/source/slider.cpp b/source/slider.cpp index 0b1d8b0..4565675 100644 --- a/source/slider.cpp +++ b/source/slider.cpp @@ -10,26 +10,27 @@ Distributed under the LGPL namespace Msp { namespace GLtk { -Slider::Slider(const Resources &r): - Widget(r), +Slider::Slider(): min(0), max(1), value(0), - step(0.1) + step(0.1), + dragging(false), + drag_area_size(0) { } void Slider::set_value(double v) { - double old_value=value; + double old_value = value; if(vmax) - value=max; + value = max; else { - unsigned steps=static_cast((v-min)/step+0.5); - value=min+steps*step; + unsigned steps = static_cast((v-min)/step+0.5); + value = min+steps*step; } if(value!=old_value) @@ -38,17 +39,37 @@ void Slider::set_value(double v) void Slider::set_range(double a, double b) { - min=a; - max=b; + min = a; + max = b; set_value(value); } void Slider::set_step(double s) { - step=s; + step = s; set_value(value); } +void Slider::start_drag(int p) +{ + dragging = true; + drag_start_pos = p; + drag_start_value = value; + state |= ACTIVE; +} + +void Slider::drag(int p) +{ + if(max>min) + set_value(drag_start_value+(p-drag_start_pos)*(max-min)/drag_area_size); +} + +void Slider::end_drag() +{ + dragging = false; + state &= ~ACTIVE; +} + Slider::Loader::Loader(Slider &s): Widget::Loader(s) @@ -60,7 +81,7 @@ Slider::Loader::Loader(Slider &s): Slider &Slider::Loader::get_object() const { - return static_cast(wdg); + return static_cast(obj); } } // namespace GLtk