diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/shuttle_control.cc | 28 | ||||
-rw-r--r-- | gtk2_ardour/shuttle_control.h | 9 |
2 files changed, 16 insertions, 21 deletions
diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc index b4095f7c0c..7096cd31bb 100644 --- a/gtk2_ardour/shuttle_control.cc +++ b/gtk2_ardour/shuttle_control.cc @@ -427,10 +427,10 @@ ShuttleControl::mouse_shuttle (double x, bool force) } void -ShuttleControl::set_shuttle_fract (double f) +ShuttleControl::set_shuttle_fract (double f, bool zero_ok) { shuttle_fract = f; - use_shuttle_fract (false); + use_shuttle_fract (false, zero_ok); } int @@ -472,7 +472,7 @@ ShuttleControl::fract_as_semitones (float fract, bool& reverse) } void -ShuttleControl::use_shuttle_fract (bool force) +ShuttleControl::use_shuttle_fract (bool force, bool zero_ok) { microseconds_t now = get_microseconds(); @@ -503,7 +503,11 @@ ShuttleControl::use_shuttle_fract (bool force) speed = shuttle_max_speed * shuttle_fract; } - _session->request_transport_speed_nonzero (speed, Config->get_shuttle_behaviour() == Wheel); + if (zero_ok) { + _session->request_transport_speed (speed, Config->get_shuttle_behaviour() == Wheel); + } else { + _session->request_transport_speed_nonzero (speed, Config->get_shuttle_behaviour() == Wheel); + } } void @@ -657,25 +661,13 @@ ShuttleControl::ShuttleControllable::ShuttleControllable (ShuttleControl& s) void ShuttleControl::ShuttleControllable::set_value (double val) { - double fract; - - if (val == 0.5) { - fract = 0.0; - } else { - if (val < 0.5) { - fract = -((0.5 - val)/0.5); - } else { - fract = ((val - 0.5)/0.5); - } - } - - sc.set_shuttle_fract (fract); + sc.set_shuttle_fract ((val - lower()) / (upper() - lower()), true); } double ShuttleControl::ShuttleControllable::get_value () const { - return sc.get_shuttle_fract (); + return lower() + (sc.get_shuttle_fract () * (upper() - lower())); } void diff --git a/gtk2_ardour/shuttle_control.h b/gtk2_ardour/shuttle_control.h index c16328e384..a8c2e71d59 100644 --- a/gtk2_ardour/shuttle_control.h +++ b/gtk2_ardour/shuttle_control.h @@ -40,7 +40,7 @@ class ShuttleControl : public CairoWidget, public ARDOUR::SessionHandlePtr void map_transport_state (); void update_speed_display (); - void set_shuttle_fract (double); + void set_shuttle_fract (double, bool zero_ok = false); double get_shuttle_fract () const { return shuttle_fract; } void set_session (ARDOUR::Session*); @@ -49,6 +49,9 @@ class ShuttleControl : public CairoWidget, public ARDOUR::SessionHandlePtr void set_value (double); double get_value (void) const; + double lower() const { return -1.0; } + double upper() const { return 1.0; } + ShuttleControl& sc; }; @@ -89,8 +92,8 @@ class ShuttleControl : public CairoWidget, public ARDOUR::SessionHandlePtr void on_size_allocate (Gtk::Allocation&); bool on_query_tooltip (int, int, bool, const Glib::RefPtr<Gtk::Tooltip>&); - gint mouse_shuttle (double x, bool force); - void use_shuttle_fract (bool force); + gint mouse_shuttle (double x, bool force); + void use_shuttle_fract (bool force, bool zero_ok = false); void parameter_changed (std::string); void set_shuttle_units (ARDOUR::ShuttleUnits); |