From c2a012545bb3b4f5e5c3c63fc40ffd7230ab56d9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 24 May 2021 12:26:21 -0600 Subject: [PATCH] API infrastructure for dragging region/cue markers --- libs/ardour/ardour/region.h | 1 + libs/ardour/ardour/source.h | 1 + libs/ardour/region.cc | 8 ++++++++ libs/ardour/source.cc | 12 ++++++++++++ 4 files changed, 22 insertions(+) diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index b107ea8be4..69c58babe4 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -375,6 +375,7 @@ public: } void get_cue_markers (CueMarkers&, bool abs = false) const; + void move_cue_marker (CueMarker const &, samplepos_t region_relative_position); protected: virtual XMLNode& state (); diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h index 1faa4dd4bc..72303feb2d 100644 --- a/libs/ardour/ardour/source.h +++ b/libs/ardour/ardour/source.h @@ -114,6 +114,7 @@ public: CueMarkers const & cue_markers() const { return _cue_markers; } void add_cue_marker (CueMarker const &); + void move_cue_marker (CueMarker const &, samplepos_t source_relative_position); bool remove_cue_marker (CueMarker const &); bool clear_cue_markers (); PBD::Signal0 CueMarkersChanged; diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index a38f30a24e..573bfad12c 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -1937,6 +1937,14 @@ Region::get_cue_markers (CueMarkers& cues, bool abs) const } } +void +Region::move_cue_marker (CueMarker const & cm, samplepos_t region_relative_position) +{ + for (SourceList::const_iterator s = _sources.begin (); s != _sources.end(); ++s) { + (*s)->move_cue_marker (cm, start() + region_relative_position); + } +} + void Region::drop_sources () { diff --git a/libs/ardour/source.cc b/libs/ardour/source.cc index c03495c118..2ed5ebf073 100644 --- a/libs/ardour/source.cc +++ b/libs/ardour/source.cc @@ -420,6 +420,18 @@ Source::add_cue_marker (CueMarker const & cm) CueMarkersChanged(); /* EMIT SIGNAL */ } +void +Source::move_cue_marker (CueMarker const & cm, samplepos_t source_relative_position) +{ + if (source_relative_position > length (0)) { + return; + } + + if (remove_cue_marker (cm)) { + add_cue_marker (CueMarker (cm.text(), source_relative_position)); + } +} + bool Source::remove_cue_marker (CueMarker const & cm) {