diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-07 23:48:19 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-07 23:48:19 +0000 |
commit | 5574b46de4ec67d680e8c5ceddaf5a4d8a554694 (patch) | |
tree | bb0cdaf83e12409095d82b018ee35e612ae02558 | |
parent | c033e6f87525b6e0e405b672cf288cf1627bca87 (diff) |
clean up that godawful programming style in the last transport commit, and fix dynamic range playback
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6031 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 7 | ||||
-rw-r--r-- | libs/ardour/session_events.cc | 2 | ||||
-rw-r--r-- | libs/ardour/session_transport.cc | 83 | ||||
-rw-r--r-- | libs/surfaces/control_protocol/basic_ui.cc | 3 |
7 files changed, 53 insertions, 55 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 32b2bc3794..ba20dbd56a 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1484,8 +1484,7 @@ ARDOUR_UI::transport_roll () return; } } else if (session->get_play_range ()) { - list<AudioRange> empty; - session->request_play_range (empty, false, true); + session->request_play_range (0, true); } if (!rolling) { @@ -1536,8 +1535,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) session->request_play_loop (false, true); } else if (session->get_play_range ()) { affect_transport = false; - list<AudioRange> empty; - session->request_play_range (empty, false, true); + session->request_play_range (0, true); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index ffdf3de9e4..8275b50347 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -4657,6 +4657,11 @@ Editor::end_selection_op (ArdourCanvas::Item* item, GdkEvent* event) } } + /* XXX what if its a music time selection? */ + if (session->get_play_range() && session->transport_rolling()) { + session->request_play_range (&selection->time, true); + } + stop_canvas_autoscroll (); } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 803c34b2c0..c3464033b3 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2428,7 +2428,7 @@ Editor::play_selection () return; } - session->request_play_range (selection->time, true); + session->request_play_range (&selection->time, true); } void diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 312f0f3628..e46b96b594 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -926,14 +926,13 @@ class Session : public PBD::StatefulDestructible /* ranges */ - void request_play_range (list<AudioRange>&, bool yn, bool leave_rolling = false); + void request_play_range (list<AudioRange>*, bool leave_rolling = false); bool get_play_range () const { return _play_range; } /* favorite dirs */ typedef vector<string> FavoriteDirs; static int read_favorite_dirs (FavoriteDirs&); - static int write_favorite_dirs (FavoriteDirs&); /* file suffixes */ @@ -1734,8 +1733,8 @@ class Session : public PBD::StatefulDestructible list<AudioRange> current_audio_range; bool _play_range; - void set_play_range (list<AudioRange>&, bool yn, bool leave_rolling); - void setup_auto_play (list<AudioRange>&); + void set_play_range (list<AudioRange>&, bool leave_rolling); + void unset_play_range (); /* main outs */ uint32_t main_outs; diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc index 58702c133b..10201cd638 100644 --- a/libs/ardour/session_events.cc +++ b/libs/ardour/session_events.cc @@ -427,7 +427,7 @@ Session::process_event (Event* ev) break; case Event::SetPlayAudioRange: - set_play_range (ev->audio_range, ev->yes_or_no, (ev->speed == 1.0f)); + set_play_range (ev->audio_range, (ev->speed == 1.0f)); break; default: diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 2ed8746c99..2f05d329de 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -140,10 +140,14 @@ Session::request_play_loop (bool yn, bool leave_rolling) } void -Session::request_play_range (list<AudioRange>& range, bool yn, bool leave_rolling) +Session::request_play_range (list<AudioRange>* range, bool leave_rolling) { - Event* ev = new Event (Event::SetPlayAudioRange, Event::Add, Event::Immediate, 0, (leave_rolling ? 1.0 : 0.0), yn); - ev->audio_range = range; + Event* ev = new Event (Event::SetPlayAudioRange, Event::Add, Event::Immediate, 0, (leave_rolling ? 1.0 : 0.0)); + if (range) { + ev->audio_range = *range; + } else { + ev->audio_range.clear (); + } queue_event (ev); } @@ -617,8 +621,7 @@ Session::set_play_loop (bool yn) if (loc) { - list<AudioRange> empty; - set_play_range (empty, false, true); + unset_play_range (); if (Config->get_seamless_loop()) { // set all diskstreams to use internal looping @@ -1186,56 +1189,38 @@ Session::set_diskstream_speed (Diskstream* stream, float speed) } void -Session::set_play_range (list<AudioRange>& range, bool yn, bool leave_rolling) +Session::unset_play_range () { - /* Called from event-processing context */ - - if (yn) { - if (range.empty()) { - /* make it a no-op */ - return; - } - /* cancel loop play */ - unset_play_loop (); - } - - _play_range = yn; - - setup_auto_play (range); - - if (!_play_range && !leave_rolling) { - /* stop transport */ - Event* ev = new Event (Event::SetTransportSpeed, Event::Add, Event::Immediate, 0, 0.0f, false); - merge_event (ev); - } - - TransportStateChange (); + _play_range = false; + _clear_event_type (Event::RangeStop); + _clear_event_type (Event::RangeLocate); } void -Session::request_bounded_roll (nframes_t start, nframes_t end) +Session::set_play_range (list<AudioRange>& range, bool leave_rolling) { - AudioRange ar (start, end, 0); - list<AudioRange> lar; - - lar.push_back (ar); - request_play_range (lar, true, true); -} + Event* ev; -void -Session::setup_auto_play (list<AudioRange>& range) -{ /* Called from event-processing context */ - Event* ev; + unset_play_range (); - _clear_event_type (Event::RangeStop); - _clear_event_type (Event::RangeLocate); - - if (!_play_range) { + if (range.empty()) { + /* _play_range set to false in unset_play_range() + */ + if (!leave_rolling) { + /* stop transport */ + Event* ev = new Event (Event::SetTransportSpeed, Event::Add, Event::Immediate, 0, 0.0f, false); + merge_event (ev); + } return; } + _play_range = true; + + /* cancel loop play */ + unset_play_loop (); + list<AudioRange>::size_type sz = range.size(); if (sz > 1) { @@ -1285,6 +1270,18 @@ Session::setup_auto_play (list<AudioRange>& range) ev = new Event (Event::LocateRoll, Event::Add, Event::Immediate, range.front().start, 0.0f, false); merge_event (ev); + + TransportStateChange (); +} + +void +Session::request_bounded_roll (nframes_t start, nframes_t end) +{ + AudioRange ar (start, end, 0); + list<AudioRange> lar; + + lar.push_back (ar); + request_play_range (&lar, true); } void diff --git a/libs/surfaces/control_protocol/basic_ui.cc b/libs/surfaces/control_protocol/basic_ui.cc index 8f7c0ed771..d8c1caa0c1 100644 --- a/libs/surfaces/control_protocol/basic_ui.cc +++ b/libs/surfaces/control_protocol/basic_ui.cc @@ -122,8 +122,7 @@ BasicUI::transport_play (bool from_last_start) } if (session->get_play_range ()) { - list<AudioRange> empty; - session->request_play_range (empty, false); + session->request_play_range (0); } if (from_last_start && rolling) { |