From f5d941f575396901c8d751b4c97db49cdf9b3fc9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 25 Mar 2025 11:17:00 -0600 Subject: [PATCH] move playhead during (MIDI) clip recording --- gtk2_ardour/pianoroll.cc | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/gtk2_ardour/pianoroll.cc b/gtk2_ardour/pianoroll.cc index 934f5c9aa9..a8a0c7009c 100644 --- a/gtk2_ardour/pianoroll.cc +++ b/gtk2_ardour/pianoroll.cc @@ -642,29 +642,37 @@ Pianoroll::bindings_changed () void Pianoroll::maybe_update () { - ARDOUR::TriggerPtr trigger; + ARDOUR::TriggerPtr playing_trigger; if (_track) { - trigger = _track->triggerbox()->currently_playing (); + playing_trigger = _track->triggerbox()->currently_playing (); } - if (!trigger) { + if (!playing_trigger) { if (_drags->active() || !view) { return; } + if (_track->triggerbox()->record_enabled() == Recording) { - samplepos_t pos = _session->transport_sample(); - samplepos_t spos = view->midi_region()->source_position().samples(); - if (pos < spos) { - _playhead_cursor->set_position (0); + _playhead_cursor->set_position (data_capture_duration); + + } else if (view->midi_region()) { + + samplepos_t pos = _session->transport_sample(); + samplepos_t spos = view->midi_region()->source_position().samples(); + if (pos < spos) { + _playhead_cursor->set_position (0); + } else { + _playhead_cursor->set_position (pos - spos); + } } else { - _playhead_cursor->set_position (pos - spos); + _playhead_cursor->set_position (0); } } else { - if (trigger->active ()) { - _playhead_cursor->set_position (trigger->current_pos().samples() + trigger->the_region()->start().samples()); + if (playing_trigger->active ()) { + _playhead_cursor->set_position (playing_trigger->current_pos().samples() + playing_trigger->the_region()->start().samples()); } else { _playhead_cursor->set_position (0); } @@ -865,8 +873,6 @@ Pianoroll::data_captured (samplecnt_t total_duration) if (!idle_update_queued.exchange (1)) { Glib::signal_idle().connect (sigc::mem_fun (*this, &Pianoroll::idle_data_captured)); } - - _playhead_cursor->set_position (data_capture_duration); } bool @@ -2297,6 +2303,8 @@ Pianoroll::set (TriggerReference & tref) } else { view->set_region (nullptr); } + + _update_connection = Timers::rapid_connect (sigc::mem_fun (*this, &Pianoroll::maybe_update)); } void