Tempo ramps - consolidate meter dragging code.
authornick_m <mainsbridge@gmail.com>
Mon, 23 May 2016 16:50:42 +0000 (02:50 +1000)
committernick_m <mainsbridge@gmail.com>
Fri, 27 May 2016 13:38:17 +0000 (23:38 +1000)
gtk2_ardour/editor_drag.cc
libs/ardour/ardour/tempo.h
libs/ardour/tempo.cc

index 9cbeb1984af8423f75f4826134c78f1105f2546f..16c1862dd8fee3050f04df31135274ae0d2eabc2 100644 (file)
@@ -3185,25 +3185,16 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move)
                }
        }
 
-       framepos_t const pf = adjusted_current_frame (event, false);
-       if (_marker->meter().position_lock_style() == MusicTime) {
-               TempoMap& map (_editor->session()->tempo_map());
-               Timecode::BBT_Time bbt;
-               map.bbt_time (pf, bbt);
-               /* round bbt to bars */
-               map.round_bbt (bbt, -1, RoundNearest);
+       framepos_t pf = adjusted_current_frame (event);
 
-               if ((bbt.bars != _real_section->bbt().bars && pf > last_pointer_frame())
-                   || (bbt.bars < _real_section->bbt().bars && pf < last_pointer_frame())) {
-
-                       /* move meter beat-based */
-                       _editor->session()->tempo_map().gui_move_meter_bbt (_real_section, bbt);
-               }
-       } else {
-               /* AudioTime */
-               /* move meter frame-based */
-               _editor->session()->tempo_map().gui_move_meter_frame (_real_section, pf);
+       if (_real_section->position_lock_style() == AudioTime && _editor->snap_musical()) {
+               /* never snap to music for audio locked */
+               pf = adjusted_current_frame (event, false);
        }
+
+       _editor->session()->tempo_map().gui_move_meter (_real_section, pf);
+
+       setup_pointer_frame_offset ();
        _marker->set_position (pf);
        show_verbose_cursor_time (_real_section->frame());
 }
index db618a451384c0da5d64e917bcedae54fccafd60..5416ad3462b7b01a9f12b589cd2b76413b425960 100644 (file)
@@ -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);
index 75065917fd252013915dcde3b8316f1a477a1ec9..4a0151b22c7298df3c60b3ee446a656c638d5db3 100644 (file)
@@ -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);
+                       }
                }
        }