diff options
-rw-r--r-- | gtk2_ardour/main_clock.cc | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/tempo.h | 1 | ||||
-rw-r--r-- | libs/ardour/tempo.cc | 27 |
3 files changed, 29 insertions, 2 deletions
diff --git a/gtk2_ardour/main_clock.cc b/gtk2_ardour/main_clock.cc index f90599de13..26d780ea8a 100644 --- a/gtk2_ardour/main_clock.cc +++ b/gtk2_ardour/main_clock.cc @@ -99,8 +99,7 @@ MainClock::edit_current_tempo () void MainClock::edit_current_meter () { - ARDOUR::Meter m = PublicEditor::instance().session()->tempo_map().meter_at (absolute_time()); - ARDOUR::MeterSection ms (absolute_time(), m.divisions_per_bar(), m.note_divisor()); + ARDOUR::MeterSection ms = PublicEditor::instance().session()->tempo_map().meter_section_at (absolute_time()); PublicEditor::instance().edit_meter_section (&ms); } diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index f2d314651d..29f1f25643 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -287,6 +287,7 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible const Meter& meter_at (framepos_t) const; const TempoSection& tempo_section_at (framepos_t) const; + const MeterSection& meter_section_at (framepos_t) const; void add_tempo (const Tempo&, Timecode::BBT_Time where); void add_meter (const Meter&, Timecode::BBT_Time where); diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index ff6553e820..8c4011cefd 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -1583,6 +1583,33 @@ TempoMap::tempo_at (framepos_t frame) const return m.tempo(); } +const MeterSection& +TempoMap::meter_section_at (framepos_t frame) const +{ + Glib::Threads::RWLock::ReaderLock lm (lock); + Metrics::const_iterator i; + MeterSection* prev = 0; + + for (i = metrics.begin(); i != metrics.end(); ++i) { + MeterSection* t; + + if ((t = dynamic_cast<MeterSection*> (*i)) != 0) { + + if ((*i)->frame() > frame) { + break; + } + + prev = t; + } + } + + if (prev == 0) { + fatal << endmsg; + abort(); /*NOTREACHED*/ + } + + return *prev; +} const Meter& TempoMap::meter_at (framepos_t frame) const |