From cadb5c481c9aabebe9a6801dca3d00f0b15d989c Mon Sep 17 00:00:00 2001 From: nick_m Date: Sat, 17 Jun 2017 05:11:38 +1000 Subject: Disable tempo end/twist drag for meter-locked tempi It was assumed that the drag takes place within an area of musical time. This is not true for the space before any non-initial meter-locked tempo. In the case of the initial tempo, there is no previous section to perform an end-drag on. --- gtk2_ardour/editor_drag.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'gtk2_ardour/editor_drag.cc') diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index b65c0825ef..e59e047f1c 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3701,6 +3701,11 @@ TempoTwistDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) _before_state = &map.get_state(); _tempo = const_cast (&map.tempo_section_at_frame (raw_grab_frame())); + if (_tempo->locked_to_meter()) { + _drag_valid = false; + return; + } + _next_tempo = map.next_tempo_section (_tempo); if (_next_tempo) { if (!map.next_tempo_section (_next_tempo)) { @@ -3784,8 +3789,6 @@ TempoTwistDrag::motion (GdkEvent* event, bool first_move) void TempoTwistDrag::finished (GdkEvent* event, bool movement_occurred) { - TempoMap& map (_editor->session()->tempo_map()); - if (!movement_occurred || !_drag_valid) { return; } @@ -3793,6 +3796,7 @@ TempoTwistDrag::finished (GdkEvent* event, bool movement_occurred) _editor->tempo_curve_selected (_tempo, false); _editor->tempo_curve_selected (_next_tempo, false); + TempoMap& map (_editor->session()->tempo_map()); XMLNode &after = map.get_state(); _editor->session()->add_command(new MementoCommand(map, _before_state, &after)); _editor->commit_reversible_command (); @@ -3811,6 +3815,7 @@ TempoEndDrag::TempoEndDrag (Editor* e, ArdourCanvas::Item* i) , _grab_qn (0.0) , _tempo (0) , _before_state (0) + , _drag_valid (true) { DEBUG_TRACE (DEBUG::Drags, "New TempoEndDrag\n"); TempoMarker* marker = reinterpret_cast (_item->get_data ("marker")); @@ -3827,6 +3832,10 @@ TempoEndDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) /* get current state */ _before_state = &tmap.get_state(); + if (_tempo->locked_to_meter()) { + _drag_valid = false; + return; + } ostringstream sstr; @@ -3856,14 +3865,16 @@ TempoEndDrag::setup_pointer_frame_offset () void TempoEndDrag::motion (GdkEvent* event, bool first_move) { + if (!_drag_valid) { + return; + } + TempoMap& map (_editor->session()->tempo_map()); if (first_move) { _editor->begin_reversible_command (_("stretch end tempo")); } - - framepos_t const pf = adjusted_current_frame (event, false); map.gui_stretch_tempo_end (&map.tempo_section_at_frame (_tempo->frame() - 1), map.frame_at_quarter_note (_grab_qn), pf); @@ -3880,7 +3891,7 @@ TempoEndDrag::motion (GdkEvent* event, bool first_move) void TempoEndDrag::finished (GdkEvent* event, bool movement_occurred) { - if (!movement_occurred) { + if (!movement_occurred || !_drag_valid) { return; } -- cgit v1.2.3