- else if(src.type==AXIS_POS && i==src.index && v>=0)
- on_motion(v, r);
- else if(src.type==AXIS_NEG && i==src.index && v<=0)
- on_motion(-v, -r);
+ else if(activator && !activator->get_state() && i==src.index)
+ origin = v;
+ else if(src.type==AXIS_POS && i==src.index && v>=origin)
+ on_motion(v-origin, r);
+ else if(src.type==AXIS_NEG && i==src.index && v<=origin)
+ on_motion(origin-v, -r);
+}
+
+void Control::deactivate()
+{
+ if(src.type==BUTTON)
+ on_release();
+ else if(src.type==AXIS_POS || src.type==AXIS_NEG)
+ {
+ float v = src.dev->get_axis_value(src.index);
+ on_motion(0, (src.type==AXIS_POS ? origin-v : v-origin));
+ origin = v;
+ }