summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/editor_drag.cc13
-rw-r--r--libs/ardour/ardour/tempo.h2
-rw-r--r--libs/ardour/tempo.cc16
3 files changed, 24 insertions, 7 deletions
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<double, BBT_Time> b_bbt = make_pair (beat_at_frame_locked (frame), BBT_Time (1, 1, 0));
-
section->set_beat (b_bbt);
prev_ms = section;
continue;
@@ -1150,6 +1149,21 @@ TempoMap::gui_move_meter (MeterSection* ms, const Meter& mt, const framepos_t&
}
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)
{
{