summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2016-05-12 05:32:38 +1000
committernick_m <mainsbridge@gmail.com>2016-05-27 23:38:16 +1000
commitabac4ce854982c48b1cc825e573bdea5b13e8eb7 (patch)
tree1da2d12d70829beedab7ca8a23103aa7b11a62b9 /gtk2_ardour
parent49bd710b9b1cd721c8d2e3ee3eacb6b60dac9422 (diff)
Tempo ramps - more bbt ruler dragging work.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_drag.cc10
-rw-r--r--gtk2_ardour/editor_drag.h3
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;
};