summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-11-07 23:48:19 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-11-07 23:48:19 +0000
commit5574b46de4ec67d680e8c5ceddaf5a4d8a554694 (patch)
treebb0cdaf83e12409095d82b018ee35e612ae02558
parentc033e6f87525b6e0e405b672cf288cf1627bca87 (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.cc6
-rw-r--r--gtk2_ardour/editor_mouse.cc5
-rw-r--r--gtk2_ardour/editor_ops.cc2
-rw-r--r--libs/ardour/ardour/session.h7
-rw-r--r--libs/ardour/session_events.cc2
-rw-r--r--libs/ardour/session_transport.cc83
-rw-r--r--libs/surfaces/control_protocol/basic_ui.cc3
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) {