X-Git-Url: http://git.tdb.fi/?p=libs%2Fgltk.git;a=blobdiff_plain;f=source%2Fslider.cpp;h=1e763c639bf5309fba69d3a3ce3e680aba97eff1;hp=15621db5b9b06e8035523cf2a479d3549ab7e587;hb=a380303d852a3ad3f9b73ccbfbec4cf7f118123e;hpb=08b66dd1b4478fef61525ad2dad1a1fb54eab0f0 diff --git a/source/slider.cpp b/source/slider.cpp index 15621db..1e763c6 100644 --- a/source/slider.cpp +++ b/source/slider.cpp @@ -10,6 +10,7 @@ Slider::Slider(): step(0.1), dragging(false), drag_area_size(0), + drag_area_offset(0), slider_size(1) { } @@ -49,13 +50,17 @@ void Slider::set_step(double s) void Slider::click(int p) { - int sp = static_cast(drag_area_size*(value-min)/(max-min)); + 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(p); + start_drag(drag_area_offset+p); } void Slider::start_drag(int p) @@ -69,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()