diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-04-17 09:47:06 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-04-17 09:47:06 -0400 |
commit | 3131ab8bbd9f57b6c59ff0a13460db634d5dafee (patch) | |
tree | 112381d28654a2e32891ae6d6c4dde31d3f45d2d /gtk2_ardour | |
parent | 59e6694405cb3fb49219b78f9b668657c8ccda3c (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.cc | 56 | ||||
-rw-r--r-- | gtk2_ardour/audio_region_view.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/rc_option_editor.cc | 12 |
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), |