From ecd265222a6fe7a1d2dba1aa706a1ea95abeff87 Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Sat, 7 Feb 2015 23:22:59 +0000 Subject: Add/edit tempo/meter change at right position with 'delta to edit cursor' Find the absolute position of the main clock when 'display delta to edit cursor' is set when adding/editing tempo/meter changes from the context menu. --- gtk2_ardour/audio_clock.h | 1 + gtk2_ardour/main_clock.cc | 21 ++++++++++++++++----- gtk2_ardour/main_clock.h | 1 + 3 files changed, 18 insertions(+), 5 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index 83bc3233c2..f00b6db8ec 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -96,6 +96,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr protected: void render (cairo_t*, cairo_rectangle_t*); + bool get_is_duration () const { return is_duration; } ; virtual void build_ops_menu (); Gtk::Menu *ops_menu; diff --git a/gtk2_ardour/main_clock.cc b/gtk2_ardour/main_clock.cc index b8bc733ea6..8bb685da4b 100644 --- a/gtk2_ardour/main_clock.cc +++ b/gtk2_ardour/main_clock.cc @@ -73,6 +73,17 @@ MainClock::build_ops_menu () ops_items.push_back (MenuElem (_("Insert Meter Change"), sigc::mem_fun(*this, &MainClock::insert_new_meter))); } +framepos_t +MainClock::absolute_time () const +{ + if (get_is_duration ()) { + // delta to edit cursor + return current_time () + PublicEditor::instance().get_preferred_edit_position (true); + } else { + return current_time (); + } +} + void MainClock::display_delta_to_edit_cursor () { @@ -86,27 +97,27 @@ MainClock::display_delta_to_edit_cursor () void MainClock::edit_current_tempo () { - ARDOUR::TempoSection ts = PublicEditor::instance().session()->tempo_map().tempo_section_at(current_time()); + ARDOUR::TempoSection ts = PublicEditor::instance().session()->tempo_map().tempo_section_at (absolute_time()); PublicEditor::instance().edit_tempo_section (&ts); } void MainClock::edit_current_meter () { - ARDOUR::Meter m = PublicEditor::instance().session()->tempo_map().meter_at(current_time()); - ARDOUR::MeterSection ms(current_time(), m.divisions_per_bar(), m.note_divisor()); + ARDOUR::Meter m = PublicEditor::instance().session()->tempo_map().meter_at (absolute_time()); + ARDOUR::MeterSection ms (absolute_time(), m.divisions_per_bar(), m.note_divisor()); PublicEditor::instance().edit_meter_section (&ms); } void MainClock::insert_new_tempo () { - PublicEditor::instance().mouse_add_new_tempo_event (current_time ()); + PublicEditor::instance().mouse_add_new_tempo_event (absolute_time ()); } void MainClock::insert_new_meter () { - PublicEditor::instance().mouse_add_new_meter_event (current_time ()); + PublicEditor::instance().mouse_add_new_meter_event (absolute_time ()); } diff --git a/gtk2_ardour/main_clock.h b/gtk2_ardour/main_clock.h index f5f9096b39..fc9075432f 100644 --- a/gtk2_ardour/main_clock.h +++ b/gtk2_ardour/main_clock.h @@ -38,5 +38,6 @@ private: void edit_current_meter (); void insert_new_tempo (); void insert_new_meter (); + framepos_t absolute_time () const; bool _primary; }; -- cgit v1.2.3