summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_drag.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2017-02-27 02:26:08 +1100
committerRobin Gareus <robin@gareus.org>2017-02-27 20:16:10 +0100
commitf8a6f8918d0b7f719748bc26e4abf5d2c25174db (patch)
treed7b13bb0659ce3148ceb699dfe818863b6beec70 /gtk2_ardour/editor_drag.cc
parentd06e7104026140f5921f03d640afec80f84f1e7d (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.cc45
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));