diff options
author | nick_m <mainsbridge@gmail.com> | 2016-05-12 05:32:38 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-05-27 23:38:16 +1000 |
commit | abac4ce854982c48b1cc825e573bdea5b13e8eb7 (patch) | |
tree | 1da2d12d70829beedab7ca8a23103aa7b11a62b9 /gtk2_ardour/editor_drag.cc | |
parent | 49bd710b9b1cd721c8d2e3ee3eacb6b60dac9422 (diff) |
Tempo ramps - more bbt ruler dragging work.
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 0116f9feaa..4ccb1c0ba5 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3478,6 +3478,7 @@ TempoMarkerDrag::aborted (bool moved) BBTRulerDrag::BBTRulerDrag (Editor* e, ArdourCanvas::Item* i) : Drag (e, i) + , _tempo (0) , before_state (0) { DEBUG_TRACE (DEBUG::Drags, "New BBTRulerDrag\n"); @@ -3491,13 +3492,18 @@ BBTRulerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) ostringstream sstr; sstr << fixed << setprecision(3) << map.tempo_at (adjusted_current_frame (event)).beats_per_minute(); show_verbose_cursor_text (sstr.str()); + _tempo = const_cast<TempoSection*> (&map.tempo_section_at (adjusted_current_frame (event, false))); + + if (!_tempo) { + Drag::abort(); + } } void BBTRulerDrag::setup_pointer_frame_offset () { TempoMap& map (_editor->session()->tempo_map()); - _pointer_frame_offset = raw_grab_frame() - map.frame_at_beat (ceil (map.beat_at_frame (raw_grab_frame()))); + _pointer_frame_offset = raw_grab_frame() - map.frame_at_beat (floor (map.beat_at_frame (raw_grab_frame()))); } void @@ -3515,7 +3521,7 @@ BBTRulerDrag::motion (GdkEvent* event, bool first_move) if (Keyboard::modifier_state_contains (event->button.state, ArdourKeyboard::constraint_modifier())) { /* adjust previous tempo to match pointer frame */ - _editor->session()->tempo_map().gui_dilate_tempo (last_pointer_frame(), pf); + _editor->session()->tempo_map().gui_dilate_tempo (_tempo, last_pointer_frame(), pf); } ostringstream sstr; sstr << fixed << setprecision(3) << map.tempo_at (pf).beats_per_minute(); |