X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fsmoothcontrol.cpp;h=6f4f5a487857deebe9fdaeaec277def92126937e;hb=917222bae696465f99024e0e15f73ba1058add44;hp=eb308784b3175e86611186dd7622a94e3f5df099;hpb=c9626e6953c16efc66575eff80c4c0de2f739041;p=libs%2Fgui.git diff --git a/source/input/smoothcontrol.cpp b/source/input/smoothcontrol.cpp index eb30878..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,12 +36,24 @@ SmoothControl::~SmoothControl() void SmoothControl::set_dead_zone(float d) { - dead_zone=d; + if(d<0 || (threshold>0 && d>=threshold)) + throw invalid_argument("SmoothControl::set_dead_zone"); + dead_zone = d; } void SmoothControl::set_threshold(float t) { - threshold=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; } void SmoothControl::pair(SmoothControl *ctrl) @@ -48,12 +63,12 @@ void SmoothControl::pair(SmoothControl *ctrl) if(paired_ctrl) { - SmoothControl *old_pair=paired_ctrl; - paired_ctrl=0; + SmoothControl *old_pair = paired_ctrl; + paired_ctrl = 0; old_pair->pair(0); } - paired_ctrl=ctrl; + paired_ctrl = ctrl; if(paired_ctrl) paired_ctrl->pair(this); @@ -72,16 +87,22 @@ 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; + 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);