diff options
author | nick_m <mainsbridge@gmail.com> | 2016-05-24 02:50:42 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-05-27 23:38:17 +1000 |
commit | f54b75c869348501a4603bfe7adce46b50781b5b (patch) | |
tree | d4d94435c26dacf76d36b4d5b96a9f91ee662b50 /libs | |
parent | 8b2f73d5ac73c9f05000aa0204b033f9de0dd3c3 (diff) |
Tempo ramps - consolidate meter dragging code.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/tempo.h | 7 | ||||
-rw-r--r-- | libs/ardour/tempo.cc | 50 |
2 files changed, 26 insertions, 31 deletions
diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index db618a4513..5416ad3462 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -399,10 +399,8 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible std::pair<double, framepos_t> predict_tempo_position (TempoSection* section, const Timecode::BBT_Time& bbt); - void gui_move_tempo (TempoSection*, const std::pair<const double&, const framepos_t&>& pulse); - - void gui_move_meter_frame (MeterSection*, const framepos_t& frame); - void gui_move_meter_bbt (MeterSection*, const Timecode::BBT_Time& bbt); + void gui_move_tempo (TempoSection*, const std::pair<double, framepos_t>& pulse); + void gui_move_meter (MeterSection*, const framepos_t& frame); bool gui_change_tempo (TempoSection*, const Tempo& bpm); void gui_dilate_tempo (TempoSection* tempo, const framepos_t& frame, const framepos_t& end_frame, const double& pulse); @@ -481,6 +479,7 @@ private: bool check_solved (const Metrics& metrics) const; bool set_active_tempos (const Metrics& metrics, const framepos_t& frame); + bool solve_map_frame (Metrics& metrics, TempoSection* section, const framepos_t& frame); bool solve_map_pulse (Metrics& metrics, TempoSection* section, const double& pulse); bool solve_map_frame (Metrics& metrics, MeterSection* section, const framepos_t& frame); diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index 75065917fd..4a0151b22c 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -2352,7 +2352,7 @@ TempoMap::predict_tempo_position (TempoSection* section, const BBT_Time& bbt) } void -TempoMap::gui_move_tempo (TempoSection* ts, const pair<const double&, const framepos_t&>& pulse) +TempoMap::gui_move_tempo (TempoSection* ts, const pair<double, framepos_t>& pulse) { Metrics future_map; @@ -2388,37 +2388,33 @@ TempoMap::gui_move_tempo (TempoSection* ts, const pair<const double&, const fram } void -TempoMap::gui_move_meter_frame (MeterSection* ms, const framepos_t& frame) +TempoMap::gui_move_meter (MeterSection* ms, const framepos_t& frame) { Metrics future_map; - { - Glib::Threads::RWLock::WriterLock lm (lock); - MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms); - if (solve_map_frame (future_map, copy, frame)) { - solve_map_frame (_metrics, ms, frame); - recompute_tempos (_metrics); - } - } - Metrics::const_iterator d = future_map.begin(); - while (d != future_map.end()) { - delete (*d); - ++d; - } + if (ms->position_lock_style() == AudioTime) { - MetricPositionChanged (); // Emit Signal -} + { + Glib::Threads::RWLock::WriterLock lm (lock); + MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms); -void -TempoMap::gui_move_meter_bbt (MeterSection* ms, const Timecode::BBT_Time& bbt) -{ - Metrics future_map; - { - Glib::Threads::RWLock::WriterLock lm (lock); - MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms); - if (solve_map_bbt (future_map, copy, bbt)) { - solve_map_bbt (_metrics, ms, bbt); - recompute_tempos (_metrics); + if (solve_map_frame (future_map, copy, frame)) { + solve_map_frame (_metrics, ms, frame); + recompute_tempos (_metrics); + } + } + } else { + { + Glib::Threads::RWLock::WriterLock lm (lock); + MeterSection* copy = copy_metrics_and_point (_metrics, future_map, ms); + + const double beat = beat_at_frame_locked (_metrics, frame); + const Timecode::BBT_Time bbt = beats_to_bbt_locked (_metrics, beat); + + if (solve_map_bbt (future_map, copy, bbt)) { + solve_map_bbt (_metrics, ms, bbt); + recompute_tempos (_metrics); + } } } |