OSC: Constrain master pan position as width requires.
authorLen Ovens <len@ovenwerks.net>
Fri, 10 Jun 2016 20:45:07 +0000 (13:45 -0700)
committerLen Ovens <len@ovenwerks.net>
Fri, 10 Jun 2016 20:45:07 +0000 (13:45 -0700)
libs/surfaces/osc/osc.cc
libs/surfaces/osc/osc.h

index d6dc4277e8181784148671eddc5093137927d753..8507869235ae1082c5319c79bba1786ead43d075 100644 (file)
@@ -1455,17 +1455,28 @@ OSC::master_set_trim (float dB)
 }
 
 int
-OSC::master_set_pan_stereo_position (float position)
+OSC::master_set_pan_stereo_position (float position, lo_message msg)
 {
        if (!session) return -1;
 
+       float endposition = .5;
        boost::shared_ptr<Stripable> s = session->master_out();
 
        if (s) {
                if (s->pan_azimuth_control()) {
                        s->pan_azimuth_control()->set_value (position, PBD::Controllable::NoGroup);
+                       endposition = s->pan_azimuth_control()->get_value ();
                }
        }
+       OSCSurface *sur = get_surface(lo_message_get_source (msg));
+
+       if (sur->feedback[4]) {
+               lo_message reply = lo_message_new ();
+               lo_message_add_float (reply, endposition);
+
+               lo_send_message (lo_message_get_source (msg), "/master/pan_stereo_position", reply);
+               lo_message_free (reply);
+       }
 
        return 0;
 }
index e337fbb6695d15563aaef64b5c83a9e3387531c4..4d277fb8220b8f679d29832f666053dc17e5739c 100644 (file)
@@ -306,7 +306,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK1(master_set_gain,f,);
        PATH_CALLBACK1(master_set_fader,i,);
        PATH_CALLBACK1(master_set_trim,f,);
-       PATH_CALLBACK1(master_set_pan_stereo_position,f,);
        PATH_CALLBACK1(master_set_mute,i,);
        PATH_CALLBACK1(monitor_set_gain,f,);
        PATH_CALLBACK1(monitor_set_fader,i,);
@@ -323,6 +322,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                return 0;                                               \
        }
 
+       // pan position needs message info to send feedback
+       PATH_CALLBACK1_MSG(master_set_pan_stereo_position,f);
+
        PATH_CALLBACK1_MSG(set_surface_bank_size,i);
        PATH_CALLBACK1_MSG(set_surface_strip_types,i);
        PATH_CALLBACK1_MSG(set_surface_feedback,i);
@@ -451,7 +453,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int master_set_gain (float dB);
        int master_set_fader (uint32_t position);
        int master_set_trim (float dB);
-       int master_set_pan_stereo_position (float position);
+       int master_set_pan_stereo_position (float position, lo_message msg);
        int master_set_mute (uint32_t state);
        int monitor_set_gain (float dB);
        int monitor_set_fader (uint32_t position);