From 67fa5282cbc6862b719d13f6dc474351444b6de0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 6 Mar 2025 17:04:26 -0700 Subject: [PATCH] Remove Region::absolute_time_to_region_beats() This method did not do what its name suggested. Replace it with ::absolute_time_to_source_beats() which already existed and computed the same result. Also in a NoteCreateDrag, correctly adjust note start depending on whether we are viewing the whole source or just the region. This part may be amended later. --- gtk2_ardour/editor_drag.cc | 11 +++++++++-- gtk2_ardour/midi_view.cc | 2 +- libs/ardour/ardour/region.h | 2 +- libs/ardour/region.cc | 6 ------ 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 3fc110df37..d88c5c79a3 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -6837,7 +6837,14 @@ NoteCreateDrag::finished (GdkEvent* ev, bool had_movement) /* Compute start within region, rather than absolute time start */ - Beats const start = _midi_view->midi_region ()->absolute_time_to_region_beats (min (_note[0], _note[1])); + Beats start; + + if (_midi_view->show_source()) { + Beats spos = _midi_view->midi_region()->source_position().beats() + min (_note[0], _note[1]).beats(); + start = _midi_view->midi_region ()->absolute_time_to_source_beats (timepos_t (spos)); + } else { + start = _midi_view->midi_region ()->absolute_time_to_source_beats (timepos_t (min (_note[0], _note[1]))); + } if (!had_movement) { /* we create a note even if there was no movement */ @@ -6899,7 +6906,7 @@ HitCreateDrag::finished (GdkEvent* event, bool had_movement) editing_context.snap_to (pos, RoundNearest, SnapToGrid_Scaled); Temporal::Beats aligned_beats (pos.beats ()); - Beats const start = _midi_view->midi_region ()->absolute_time_to_region_beats (timepos_t (aligned_beats)); + Beats const start = _midi_view->midi_region ()->absolute_time_to_source_beats (timepos_t (aligned_beats)); /* Percussive hits are as short as possible */ Beats length (0, 1); diff --git a/gtk2_ardour/midi_view.cc b/gtk2_ardour/midi_view.cc index 454b4d24af..d24a5facd8 100644 --- a/gtk2_ardour/midi_view.cc +++ b/gtk2_ardour/midi_view.cc @@ -4378,7 +4378,7 @@ MidiView::update_ghost_note (double x, double y, uint32_t state) Temporal::timepos_t snapped_pos = timepos_t (unsnapped_sample); _editing_context.snap_to (snapped_pos, RoundNearest, SnapToGrid_Scaled); - const Temporal::Beats snapped_beats = _midi_region->absolute_time_to_region_beats(snapped_pos); + const Temporal::Beats snapped_beats = _midi_region->absolute_time_to_source_beats(snapped_pos); /* prevent Percussive mode from displaying a ghost hit at region end */ if ((_midi_context.note_mode() == Percussive) && (snapped_beats >= _midi_region->length().beats())) { diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 628b557df2..d682ac9e0f 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -389,7 +389,7 @@ public: /** Convert a timestamp in absolute time to beats measured from source start*/ Temporal::Beats absolute_time_to_source_beats(Temporal::timepos_t const &) const; - Temporal::Beats absolute_time_to_region_beats (Temporal::timepos_t const &) const; + Temporal::Beats absolute_time_to_soucre_beats (Temporal::timepos_t const &) const; Temporal::timepos_t absolute_time_to_region_time (Temporal::timepos_t const &) const; diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index f6d85bade3..de8a4de327 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -2299,12 +2299,6 @@ Region::source_beats_to_absolute_beats (Temporal::Beats beats) const return source_position().beats() + beats; } -Temporal::Beats -Region::absolute_time_to_region_beats(timepos_t const & b) const -{ - return (position().distance (b)).beats () + start().beats(); -} - Temporal::timepos_t Region::absolute_time_to_region_time (timepos_t const & t) const {