X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fsmoothcontrol.cpp;h=6f4f5a487857deebe9fdaeaec277def92126937e;hb=49e19af2c599e7316b5a01983adc040421429f86;hp=f32e551d89c682e34e9de5157c83e400a6dd8938;hpb=821cea8627597a5458c1cb02c0652384bb3431a4;p=libs%2Fgui.git diff --git a/source/input/smoothcontrol.cpp b/source/input/smoothcontrol.cpp index f32e551..6f4f5a4 100644 --- a/source/input/smoothcontrol.cpp +++ b/source/input/smoothcontrol.cpp @@ -1,5 +1,8 @@ +#include #include "smoothcontrol.h" +using namespace std; + namespace Msp { namespace Input { @@ -33,11 +36,23 @@ SmoothControl::~SmoothControl() void SmoothControl::set_dead_zone(float d) { + if(d<0 || (threshold>0 && d>=threshold)) + throw invalid_argument("SmoothControl::set_dead_zone"); dead_zone = d; } void SmoothControl::set_threshold(float t) { + if(t>=0 && t<=dead_zone) + throw invalid_argument("SmoothControl::set_threshold"); + threshold = t; +} + +void SmoothControl::set_range(float d, float t) +{ + if(d<0 || (t>=0 && d>=t)) + throw invalid_argument("SmoothControl::set_range"); + dead_zone = d; threshold = t; } @@ -72,17 +87,23 @@ void SmoothControl::on_release() void SmoothControl::on_motion(float v, float r) { - if(v<-threshold) - value = -1; - else if(v>threshold) - value = 1; - else if(v<-dead_zone) - value = (v+dead_zone)/(threshold-dead_zone); + if(v<-dead_zone) + value = v+dead_zone; else if(v>dead_zone) - value = (v-dead_zone)/(threshold-dead_zone); + value = v-dead_zone; else value = 0; + if(threshold>=0) + { + if(v<-threshold) + value = -1; + else if(v>threshold) + value = 1; + else + value /= threshold-dead_zone; + } + signal_motion.emit(value); if(paired_ctrl && (v>0 || (v==0 && paired_ctrl->value!=0)))