diff options
author | nick_m <mainsbridge@gmail.com> | 2016-05-24 05:49:58 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-05-27 23:38:17 +1000 |
commit | 43922a1fe13bddd71b37e9d654f7d2da88b39166 (patch) | |
tree | f426ab3b9691bab7374005bb0199c98fc9211883 /gtk2_ardour/editor_drag.cc | |
parent | 6309807bc77347ad2889a3e08fa2721ffa345194 (diff) |
Tempo ramps - clean up tempo dragging.
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 95 |
1 files changed, 24 insertions, 71 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 13bc2f73d1..e7fa7023e1 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3293,54 +3293,18 @@ TempoMarkerDrag::motion (GdkEvent* event, bool first_move) TempoMap& map (_editor->session()->tempo_map()); /* get current state */ before_state = &map.get_state(); + if (!_copy) { _editor->begin_reversible_command (_("move tempo mark")); - } else { - _editor->begin_reversible_command (_("copy tempo mark")); - framepos_t frame; - bool use_snap = false; - if (!_editor->snap_musical()) { - frame = adjusted_current_frame (event); - } else { - frame = adjusted_current_frame (event, false); - if (ArdourKeyboard::indicates_snap (event->button.state)) { - if (_editor->snap_mode() == Editing::SnapOff) { - use_snap = true; - } else { - use_snap = false; - } - } else { - if (_editor->snap_mode() == Editing::SnapOff) { - use_snap = false; - } else { - use_snap = true; - } - } - } - - Timecode::BBT_Time bbt; - map.bbt_time (frame, bbt); + } else { + const framepos_t frame = adjusted_current_frame (event) + 1; - /* add new tempo section to map, ensuring we don't refer to existing tempos for snap */ + _editor->begin_reversible_command (_("copy tempo mark")); if (_real_section->position_lock_style() == MusicTime) { - if (use_snap && _editor->snap_type() == SnapToBar) { - map.round_bbt (bbt, -1, (frame > _real_section->frame()) ? RoundUpMaybe : RoundDownMaybe); - } else if (use_snap) { - map.round_bbt (bbt, _editor->get_grid_beat_divisions (0), RoundNearest); - } - double const pulse = map.predict_tempo_position (_real_section, bbt).first; - _real_section = map.add_tempo (_marker->tempo(), pulse, 0, _real_section->type(), MusicTime); + _real_section = map.add_tempo (_marker->tempo(), map.pulse_at_frame (frame), 0, _real_section->type(), MusicTime); } else { - if (use_snap && _editor->snap_type() == SnapToBar) { - map.round_bbt (bbt, -1, (frame > _real_section->frame()) ? RoundUpMaybe : RoundDownMaybe); - } else if (use_snap) { - map.round_bbt (bbt, _editor->get_grid_beat_divisions (0), RoundNearest); - } - if (use_snap) { - frame = map.predict_tempo_position (_real_section, bbt).second; - } _real_section = map.add_tempo (_marker->tempo(), 0.0, frame, _real_section->type(), AudioTime); } } @@ -3359,45 +3323,34 @@ TempoMarkerDrag::motion (GdkEvent* event, bool first_move) show_verbose_cursor_text (strs.str()); } else if (_movable && !_real_section->locked_to_meter()) { + TempoMap& map (_editor->session()->tempo_map()); + const bool was_music = _real_section->position_lock_style() == MusicTime; - if (!_editor->snap_musical()) { - /* snap normally (this is not self-referential).*/ - pf = adjusted_current_frame (event); + pf = adjusted_current_frame (event); - } else { - /* but this is. - we can't use the map for anything related to tempo, - so we round bbt using meters, which have no dependency - on pulse for this kind of thing. - */ - TempoMap& map (_editor->session()->tempo_map()); - Timecode::BBT_Time when; - bool use_snap; + if (!_editor->snap_musical()) { - if (ArdourKeyboard::indicates_snap (event->button.state)) { - if (_editor->snap_mode() == Editing::SnapOff) { - use_snap = true; - } else { - use_snap = false; - } - } else { - if (_editor->snap_mode() == Editing::SnapOff) { - use_snap = false; - } else { - use_snap = true; - } + if (was_music) { + _real_section->set_position_lock_style (AudioTime); } - pf = adjusted_current_frame (event); - map.bbt_time (pf, when); + map.gui_move_tempo (_real_section, pf); + + if (was_music) { + _real_section->set_position_lock_style (MusicTime); + } - if (use_snap && _editor->snap_type() == SnapToBar) { - map.round_bbt (when, -1, (pf > _real_section->frame()) ? RoundUpMaybe : RoundDownMaybe); + } else { + if (!was_music) { + _real_section->set_position_lock_style (MusicTime); } - const pair<double, framepos_t> future_pos = map.predict_tempo_position (_real_section, when); - map.gui_move_tempo (_real_section, future_pos); + map.gui_move_tempo (_real_section, pf); + + if (!was_music) { + _real_section->set_position_lock_style (AudioTime); + } } show_verbose_cursor_time (_real_section->frame()); |