X-Git-Url: http://git.tdb.fi/?p=libs%2Fgui.git;a=blobdiff_plain;f=source%2Finput%2Fsmoothcontrol.cpp;h=6f4f5a487857deebe9fdaeaec277def92126937e;hp=f32e551d89c682e34e9de5157c83e400a6dd8938;hb=84e5e859191eeca5cf8b58da29b5f369be25c93c;hpb=f9ebab54c3debe98e108790be9c21f43f4de116f 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)))