diff options
author | nick_m <mainsbridge@gmail.com> | 2016-03-04 00:08:21 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-05-27 23:38:11 +1000 |
commit | 452e484faf67810788c55bb9a1a2b4c5b5925456 (patch) | |
tree | 1e106d879a23624643b316db8b622ae1085828ed /gtk2_ardour/editor_drag.cc | |
parent | 38df1063d3c6423dc3eda3f7d5f20a5dc6b57e45 (diff) |
Tempo ramps - rework mouse dragging of tempo marks, derive beat_at_tempo() and tempo_at_beat().
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index b8339cc557..00ebdeb125 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3122,6 +3122,8 @@ MeterMarkerDrag::MeterMarkerDrag (Editor* e, ArdourCanvas::Item* i, bool c) DEBUG_TRACE (DEBUG::Drags, "New MeterMarkerDrag\n"); _marker = reinterpret_cast<MeterMarker*> (_item->get_data ("marker")); assert (_marker); + _real_section = &_marker->meter(); + } void @@ -3151,15 +3153,15 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move) // leave or lose the original marker (leave if its a copy; lose if its // not, because we'll remove it from the map). + char name[64]; + snprintf (name, sizeof(name), "%g/%g", _marker->meter().divisions_per_bar(), _marker->meter().note_divisor ()); + MeterSection section (_marker->meter()); if (!section.movable()) { return; } - char name[64]; - snprintf (name, sizeof(name), "%g/%g", _marker->meter().divisions_per_bar(), _marker->meter().note_divisor ()); - _marker = new MeterMarker ( *_editor, *_editor->meter_group, @@ -3172,17 +3174,22 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move) swap_grab (&_marker->the_item(), 0, GDK_CURRENT_TIME); if (!_copy) { + _editor->begin_reversible_command (_("move meter mark")); TempoMap& map (_editor->session()->tempo_map()); /* get current state */ before_state = &map.get_state(); /* remove the section while we drag it */ - map.remove_meter (section, true); + //map.remove_meter (section, true); } + _marker->hide(); } - framepos_t const pf = adjusted_current_frame (event); + framepos_t const pf = adjusted_current_frame (event, false); + double const baf = _editor->session()->tempo_map().beat_at_frame (pf); _marker->set_position (pf); + _editor->session()->tempo_map().gui_move_meter (_real_section, _marker->meter(), pf, baf); + show_verbose_cursor_time (pf); } @@ -3222,8 +3229,6 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred) _editor->commit_reversible_command (); } else { - _editor->begin_reversible_command (_("move meter mark")); - /* we removed it before, so add it back now */ if (_marker->meter().position_lock_style() == AudioTime) { map.add_meter (_marker->meter(), _marker->position()); @@ -3325,9 +3330,9 @@ TempoMarkerDrag::motion (GdkEvent* event, bool first_move) framepos_t const pf = adjusted_current_frame (event, false); double const baf = _editor->session()->tempo_map().beat_at_frame (pf); - - _marker->set_position (adjusted_current_frame (event, false)); - _editor->session()->tempo_map().gui_set_tempo_frame (*_real_section, pf, baf); + Tempo const tp = _marker->tempo(); + _marker->set_position (pf); + _editor->session()->tempo_map().gui_move_tempo (_real_section, tp, pf, baf); show_verbose_cursor_time (pf); } |