summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2016-05-24 02:50:42 +1000
committernick_m <mainsbridge@gmail.com>2016-05-27 23:38:17 +1000
commitf54b75c869348501a4603bfe7adce46b50781b5b (patch)
treed4d94435c26dacf76d36b4d5b96a9f91ee662b50 /libs
parent8b2f73d5ac73c9f05000aa0204b033f9de0dd3c3 (diff)
Tempo ramps - consolidate meter dragging code.
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/tempo.h7
-rw-r--r--libs/ardour/tempo.cc50
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);
+ }
}
}