OSC: Allow /bank_up to accept -1 as well as 1 so encoder can work.
authorLen Ovens <len@ovenwerks.net>
Sat, 24 Jun 2017 01:08:04 +0000 (18:08 -0700)
committerLen Ovens <len@ovenwerks.net>
Sat, 24 Jun 2017 01:08:04 +0000 (18:08 -0700)
libs/surfaces/osc/osc.cc
libs/surfaces/osc/osc.h

index 7d44efda26976d5283755893a16c895a74214192..9818514e3683b30f787c32dc189e6b915f9569df 100644 (file)
@@ -530,7 +530,7 @@ OSC::register_callbacks()
                REGISTER_CALLBACK (serv, "/scroll_dn_1_page", "f", scroll_dn_1_page);
                REGISTER_CALLBACK (serv, "/scroll_dn_1_page", "", scroll_dn_1_page);
                REGISTER_CALLBACK (serv, "/bank_up", "", bank_up);
-               REGISTER_CALLBACK (serv, "/bank_up", "f", bank_up);
+               REGISTER_CALLBACK (serv, "/bank_up", "f", bank_delta);
                REGISTER_CALLBACK (serv, "/bank_down", "", bank_down);
                REGISTER_CALLBACK (serv, "/bank_down", "f", bank_down);
 
@@ -1908,6 +1908,23 @@ OSC::bank_up (lo_message msg)
        return 0;
 }
 
+int
+OSC::bank_delta (float delta, lo_message msg)
+{
+       if (!session) {
+               return -1;
+       }
+       OSCSurface *s = get_surface(get_address (msg));
+       uint32_t new_bank = s->bank + (s->bank_size * (int) delta);
+       if ((int)new_bank < 1) {
+               new_bank = 1;
+       }
+       if (new_bank != s->bank) {
+               set_bank (new_bank, msg);
+       }
+       return 0;
+}
+
 int
 OSC::bank_down (lo_message msg)
 {
index 805a3df663d45687cff95ff8e61098069b80e2c8..06a2cdb6fc28efd442297552e901c86751864782 100644 (file)
@@ -419,6 +419,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK1_MSG(scrub,f);
        PATH_CALLBACK1_MSG(jog,f);
        PATH_CALLBACK1_MSG(jog_mode,f);
+       PATH_CALLBACK1_MSG(bank_delta,f);
        PATH_CALLBACK1_MSG(sel_recenable,i);
        PATH_CALLBACK1_MSG(sel_recsafe,i);
        PATH_CALLBACK1_MSG(sel_mute,i);
@@ -589,6 +590,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int set_bank (uint32_t bank_start, lo_message msg);
        int _set_bank (uint32_t bank_start, lo_address addr);
        int bank_up (lo_message msg);
+       int bank_delta (float delta, lo_message msg);
        int bank_down (lo_message msg);
        int set_surface (uint32_t b_size, uint32_t strips, uint32_t fb, uint32_t gmode, uint32_t se_size, uint32_t pi_size, lo_message msg);
        int set_surface_bank_size (uint32_t bs, lo_message msg);