]> git.tdb.fi Git - libs/gui.git/blobdiff - source/smoothcontrol.cpp
Bugfixes
[libs/gui.git] / source / smoothcontrol.cpp
index e878ed850a76d9432368d280bf2d47dd5174af10..69dfacf955049f38000f170cd45e8aa91ddaefe0 100644 (file)
@@ -27,6 +27,18 @@ SmoothControl::SmoothControl(Device &d, ControlSrcType t, unsigned i):
        paired_ctrl(0)
 { }
 
+SmoothControl &SmoothControl::operator=(const SmoothControl &sc)
+{
+       Control::operator=(sc);
+
+       return *this;
+}
+
+SmoothControl::~SmoothControl()
+{
+       pair(0);
+}
+
 void SmoothControl::pair(SmoothControl *ctrl)
 {
        if(ctrl==paired_ctrl)
@@ -34,8 +46,9 @@ void SmoothControl::pair(SmoothControl *ctrl)
 
        if(paired_ctrl)
        {
+               SmoothControl *old_pair=paired_ctrl;
                paired_ctrl=0;
-               paired_ctrl->pair(0);
+               old_pair->pair(0);
        }
 
        paired_ctrl=ctrl;
@@ -51,7 +64,8 @@ void SmoothControl::on_press()
 
 void SmoothControl::on_release()
 {
-       on_motion(0, -value);
+       if(value>0)
+               on_motion(0, -value);
 }
 
 void SmoothControl::on_motion(float v, float)
@@ -59,8 +73,8 @@ void SmoothControl::on_motion(float v, float)
        value=v;
        signal_motion.emit(value);
        
-       if(paired_ctrl)
-               paired_ctrl->signal_motion.emit(-value);
+       if(paired_ctrl && paired_ctrl->get_value()!=-value)
+               paired_ctrl->on_motion(-value, -value-paired_ctrl->get_value());
 }
 
 } // namespace Input