diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index c1ece46fd8..f3cebf9a9c 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3178,17 +3178,18 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move) TempoMap& map (_editor->session()->tempo_map()); /* get current state */ before_state = &map.get_state(); - /* remove the section while we drag it */ - //map.remove_meter (section, true); } _marker->hide(); } framepos_t const pf = adjusted_current_frame (event); - + double const baf = _editor->session()->tempo_map().beat_at_frame (pf); _marker->set_position (pf); - _editor->session()->tempo_map().gui_move_meter (_real_section, _marker->meter(), pf); - + if (_marker->meter().position_lock_style() == MusicTime) { + _editor->session()->tempo_map().gui_move_meter (_real_section, _marker->meter(), baf); + } else { + _editor->session()->tempo_map().gui_move_meter (_real_section, _marker->meter(), pf); + } show_verbose_cursor_time (pf); } @@ -3206,7 +3207,7 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred) return; } - motion (event, false); + //motion (event, false); Timecode::BBT_Time when; diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index ce87d59fd2..ab752916f4 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -384,6 +384,8 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible void gui_move_tempo (TempoSection*, const Tempo& bpm, const framepos_t& frame); void gui_move_meter (MeterSection*, const Meter& mt, const framepos_t& frame); + void gui_move_meter (MeterSection*, const Meter& mt, const double& beat); + void replace_meter (const MeterSection&, const Meter&, const Timecode::BBT_Time& where); void replace_meter (const MeterSection&, const Meter&, const framepos_t& frame); diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index 378164e86e..abaadc1f0a 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -1079,7 +1079,6 @@ TempoMap::get_new_order(MeterSection* section, const Meter& mt, const framepos_t if (prev_ms) { if (m->frame() > frame){ pair b_bbt = make_pair (beat_at_frame_locked (frame), BBT_Time (1, 1, 0)); - section->set_beat (b_bbt); prev_ms = section; continue; @@ -1149,6 +1148,21 @@ TempoMap::gui_move_meter (MeterSection* ms, const Meter& mt, const framepos_t& MetricPositionChanged (); // Emit Signal } +void +TempoMap::gui_move_meter (MeterSection* ms, const Meter& mt, const double& beat) +{ + { + Glib::Threads::RWLock::WriterLock lm (lock); + Metrics new_order = get_new_order (ms, mt, beat); + + metrics.clear(); + metrics = new_order; + recompute_meters (); + } + + MetricPositionChanged (); // Emit Signal +} + void TempoMap::add_tempo (const Tempo& tempo, double where, ARDOUR::TempoSection::Type type) {