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 | |
parent | 49bd710b9b1cd721c8d2e3ee3eacb6b60dac9422 (diff) |
Tempo ramps - more bbt ruler dragging work.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/editor_drag.h | 3 |
2 files changed, 10 insertions, 3 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(); diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index 5b5ca6d432..f75c9a681d 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -37,6 +37,7 @@ namespace ARDOUR { class Location; + class TempoSection; } namespace ArdourCanvas { @@ -763,7 +764,7 @@ public: void setup_pointer_frame_offset (); private: - + ARDOUR::TempoSection* _tempo; XMLNode* before_state; }; |