summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-04-17 09:47:06 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-04-17 09:47:06 -0400
commit3131ab8bbd9f57b6c59ff0a13460db634d5dafee (patch)
tree112381d28654a2e32891ae6d6c4dde31d3f45d2d /gtk2_ardour
parent59e6694405cb3fb49219b78f9b668657c8ccda3c (diff)
new transport option, "loop-is-mode" which optionally changes the role of the "play loop" button.
If enabled, then the button simply changes the behaviour of the "play" button rather than actually starting playback. If disabled transport behaviour should be unchanged from before.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc56
-rw-r--r--gtk2_ardour/audio_region_view.cc6
-rw-r--r--gtk2_ardour/rc_option_editor.cc12
3 files changed, 59 insertions, 15 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index b4399b03fa..ebdbc06517 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -1882,12 +1882,25 @@ ARDOUR_UI::transport_roll ()
bool rolling = _session->transport_rolling();
if (_session->get_play_loop()) {
- /* XXX it is not possible to just leave seamless loop and keep
- playing at present (nov 4th 2009)
+
+ /* If loop playback is not a mode, then we should cancel
+ it when this action is requested. If it is a mode
+ we just leave it in place.
*/
- if (!Config->get_seamless_loop()) {
- _session->request_play_loop (false, true);
- }
+
+ if (!Config->get_loop_is_mode()) {
+ /* XXX it is not possible to just leave seamless loop and keep
+ playing at present (nov 4th 2009)
+ */
+ if (!Config->get_seamless_loop()) {
+ /* stop loop playback and stop rolling */
+ _session->request_play_loop (false, true);
+ } else if (rolling) {
+ /* stop loop playback but keep rolling */
+ _session->request_play_loop (false, false);
+ }
+ }
+
} else if (_session->get_play_range () && !Config->get_always_play_range()) {
/* stop playing a range if we currently are */
_session->request_play_range (0, true);
@@ -1944,7 +1957,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
/* disk buffers are normal, so we can keep playing */
affect_transport = false;
}
- _session->request_play_loop (false, true);
+ _session->request_play_loop (false, affect_transport);
} else if (_session->get_play_range ()) {
affect_transport = false;
_session->request_play_range (0, true);
@@ -1975,16 +1988,23 @@ ARDOUR_UI::toggle_session_auto_loop ()
if (_session->get_play_loop()) {
- if (_session->transport_rolling()) {
+ /* looping enabled, our job is to disable it */
+
+ _session->request_play_loop (false);
+
+ } else {
- _session->request_locate (looploc->start(), true);
- _session->request_play_loop (false);
+ /* looping not enabled, our job is to enable it.
+ loop-is-NOT-mode: this action always starts the transport rolling.
+ loop-IS-mode: this action simply sets the loop play mechanism, but
+ does not start transport.
+ */
+ if (Config->get_loop_is_mode()) {
+ _session->request_play_loop (true, false);
} else {
- _session->request_play_loop (false);
+ _session->request_play_loop (true, true);
}
- } else {
- _session->request_play_loop (true);
}
//show the loop markers
@@ -2112,7 +2132,11 @@ ARDOUR_UI::map_transport_state ()
auto_loop_button.set_active (true);
play_selection_button.set_active (false);
- roll_button.set_active (false);
+ if (Config->get_loop_is_mode()) {
+ roll_button.set_active (true);
+ } else {
+ roll_button.set_active (false);
+ }
} else {
@@ -2134,7 +2158,11 @@ ARDOUR_UI::map_transport_state ()
stop_button.set_active (true);
roll_button.set_active (false);
play_selection_button.set_active (false);
- auto_loop_button.set_active (false);
+ if (Config->get_loop_is_mode ()) {
+ auto_loop_button.set_active (_session->get_play_loop());
+ } else {
+ auto_loop_button.set_active (false);
+ }
update_disk_space ();
}
}
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 408c8e654a..add985dd6f 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -1434,6 +1434,12 @@ AudioRegionView::set_one_waveform_color (ArdourCanvas::WaveView* wave)
ArdourCanvas::color_to_rgba (fill, r, g, b, a);
fill = ArdourCanvas::rgba_to_color (r, g, b, 0.85); /* magic number, not user controllable */
outline = ARDOUR_UI::config()->get_canvasvar_WaveForm();
+
+ if (!Config->get_show_name_highlight()) {
+ /* recolor name text because it needs to contrast with
+ the waveform background, not the name highlight.
+ */
+ }
}
wave->set_fill_color (fill);
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index d4a5c57705..7d6be32e22 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -1358,9 +1358,19 @@ RCOptionEditor::RCOptionEditor ()
Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
string_compose (_("<b>When enabled</b> %1 will stop recording if an over- or underrun is detected by the audio engine"),
PROGRAM_NAME));
- add_option (_("Transport"), tsf);
tsf = new BoolOption (
+ "loop-is-mode",
+ _("Play loop is a transport mode"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_loop_is_mode),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_loop_is_mode)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+ (_("<b>When enabled</b> the loop button does not start playback but forces playback to always play the loop\n\n"
+ "<b>When disabled</b> the loop button starts playing the loop, but stop then cancels loop playback")));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
"create-xrun-marker",
_("Create markers where xruns occur"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_create_xrun_marker),