From 273049a5a10d4a915697cd638895624bea9ccbe8 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 4 May 2021 21:30:22 -0600 Subject: [PATCH] Mackie Control: if master surface has a jog wheel *and* a scrub button, button toggles between scroll and shuttle behavior --- libs/surfaces/mackie/jog_wheel.cc | 13 +++++++++++++ libs/surfaces/mackie/jog_wheel.h | 2 +- libs/surfaces/mackie/mcp_buttons.cc | 4 ++-- libs/surfaces/mackie/surface.cc | 12 +++++++++++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/libs/surfaces/mackie/jog_wheel.cc b/libs/surfaces/mackie/jog_wheel.cc index 8a0156aeba..0614c64888 100644 --- a/libs/surfaces/mackie/jog_wheel.cc +++ b/libs/surfaces/mackie/jog_wheel.cc @@ -21,6 +21,7 @@ #include "ardour/session.h" +#include "button.h" #include "jog_wheel.h" #include "mackie_control_protocol.h" #include "surface_port.h" @@ -36,12 +37,19 @@ JogWheel::JogWheel (MackieControlProtocol & mcp) : _mcp (mcp) , _mode (scroll) { + /* do it again to get the LED in the correct state */ + set_mode (scroll); } void JogWheel::set_mode (Mode m) { _mode = m; + if (_mode == shuttle) { + _mcp.update_global_button (Button::Scrub, on); + } else { + _mcp.update_global_button (Button::Scrub, off); + } } void JogWheel::jog_event (float delta) @@ -64,6 +72,11 @@ void JogWheel::jog_event (float delta) _mcp.ScrollTimeline (delta/4.0); break; default: + if (delta > 0) { + _mcp.button_varispeed (true); + } else if (delta < 0) { + _mcp.button_varispeed (false); + } break; } } diff --git a/libs/surfaces/mackie/jog_wheel.h b/libs/surfaces/mackie/jog_wheel.h index 96fa6d16d0..8c0a711f46 100644 --- a/libs/surfaces/mackie/jog_wheel.h +++ b/libs/surfaces/mackie/jog_wheel.h @@ -36,7 +36,7 @@ namespace Mackie class JogWheel { public: - enum Mode { scroll }; + enum Mode { scroll, shuttle }; JogWheel (MackieControlProtocol & mcp); diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc index aea864cd0a..71eb2159a7 100644 --- a/libs/surfaces/mackie/mcp_buttons.cc +++ b/libs/surfaces/mackie/mcp_buttons.cc @@ -353,10 +353,10 @@ MackieControlProtocol::zoom_release (Mackie::Button &) Mackie::LedState MackieControlProtocol::scrub_press (Mackie::Button &) { - if (!surfaces.empty()) { - // surfaces.front()->next_jog_mode (); + if (_master_surface) { _master_surface->next_jog_mode (); } + return none; } diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index 16c7ad86fb..88582dff2f 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -1217,11 +1217,21 @@ Surface::say_hello () void Surface::next_jog_mode () { + if (_jog_wheel) { + if (_jog_wheel->mode() == JogWheel::scroll) { + _jog_wheel->set_mode (JogWheel::shuttle); + } else { + _jog_wheel->set_mode (JogWheel::scroll); + } + } } void -Surface::set_jog_mode (JogWheel::Mode) +Surface::set_jog_mode (JogWheel::Mode m) { + if (_jog_wheel) { + _jog_wheel->set_mode (m); + } } bool