diff options
author | nick_m <mainsbridge@gmail.com> | 2017-02-27 02:26:08 +1100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-02-27 20:16:10 +0100 |
commit | f8a6f8918d0b7f719748bc26e4abf5d2c25174db (patch) | |
tree | d7b13bb0659ce3148ceb699dfe818863b6beec70 /gtk2_ardour/editor_drag.cc | |
parent | d06e7104026140f5921f03d640afec80f84f1e7d (diff) |
back to using shift-ctrl for pinch drag. set colours of affected curves.
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 815acd3e94..882251e1f6 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3626,6 +3626,8 @@ TempoTwistDrag::TempoTwistDrag (Editor* e, ArdourCanvas::Item* i) , _grab_qn (0.0) , _grab_tempo (0.0) , _tempo (0) + , _next_tempo (0) + , _drag_valid (true) , before_state (0) { DEBUG_TRACE (DEBUG::Drags, "New TempoTwistDrag\n"); @@ -3638,12 +3640,28 @@ TempoTwistDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) Drag::start_grab (event, cursor); TempoMap& map (_editor->session()->tempo_map()); _tempo = const_cast<TempoSection*> (&map.tempo_section_at_frame (raw_grab_frame())); - _grab_tempo = Tempo (_tempo->note_types_per_minute(), _tempo->note_type()); - ostringstream sstr; - sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute() << "\n"; - sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute(); - show_verbose_cursor_text (sstr.str()); + _next_tempo = map.next_tempo_section (_tempo); + if (_next_tempo) { + if (!map.next_tempo_section (_next_tempo)) { + _drag_valid = false; + finished (event, false); + + return; + } + _editor->tempo_curve_selected (_tempo, true); + _editor->tempo_curve_selected (_next_tempo, true); + + ostringstream sstr; + sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute() << "\n"; + sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute() << "\n"; + sstr << "start: " << fixed << setprecision(3) << _next_tempo->note_types_per_minute(); + show_verbose_cursor_text (sstr.str()); + } else { + _drag_valid = false; + } + + _grab_tempo = Tempo (_tempo->note_types_per_minute(), _tempo->note_type()); } void @@ -3673,6 +3691,11 @@ TempoTwistDrag::setup_pointer_frame_offset () void TempoTwistDrag::motion (GdkEvent* event, bool first_move) { + + if (!_next_tempo || !_drag_valid) { + return; + } + TempoMap& map (_editor->session()->tempo_map()); if (first_move) { @@ -3694,19 +3717,23 @@ TempoTwistDrag::motion (GdkEvent* event, bool first_move) _editor->session()->tempo_map().gui_twist_tempi (_tempo, new_bpm, map.frame_at_quarter_note (_grab_qn), pf); ostringstream sstr; - sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute(); - sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute(); + sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute() << "\n"; + sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute() << "\n"; + sstr << "start: " << fixed << setprecision(3) << _next_tempo->note_types_per_minute(); show_verbose_cursor_text (sstr.str()); } void TempoTwistDrag::finished (GdkEvent* event, bool movement_occurred) { - if (!movement_occurred) { + TempoMap& map (_editor->session()->tempo_map()); + + if (!movement_occurred || !_drag_valid) { return; } - TempoMap& map (_editor->session()->tempo_map()); + _editor->tempo_curve_selected (_tempo, false); + _editor->tempo_curve_selected (_next_tempo, false); XMLNode &after = map.get_state(); _editor->session()->add_command(new MementoCommand<TempoMap>(map, before_state, &after)); |