summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/shuttle_control.cc28
-rw-r--r--gtk2_ardour/shuttle_control.h9
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);