diff options
author | nick_m <mainsbridge@gmail.com> | 2017-01-27 00:41:17 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2017-02-04 22:57:36 +1100 |
commit | 59daffea1d78cb55b35fe19c135cc4ab472bd01d (patch) | |
tree | 45e514f2e4f5a1935e360fd4fa3e2475ec217006 /gtk2_ardour/editor_keys.cc | |
parent | a21a414615505269bf770ad2358482e698e841af (diff) |
rework snap
snap now fills in a struct (MusicFrame) which contins a snapped frame
along with a music divisor.
this gives useful information wrt magnetic snap which may or may not
have rounded to an exact musical position.
region position may now be set musically (using quarter notes for now).
this patch fixes several problems in the current code:
- dragging a list of music-locked regions now maintains correct
musical offsets within the list.
- splitting regions using magnetic snap works correctly (#7192)
- cut drag should now work correctly with magnetic snap.
- musical length of split midi regions is no longer frame based.
Diffstat (limited to 'gtk2_ardour/editor_keys.cc')
-rw-r--r-- | gtk2_ardour/editor_keys.cc | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/gtk2_ardour/editor_keys.cc b/gtk2_ardour/editor_keys.cc index fba52014bc..2c64d6f4f3 100644 --- a/gtk2_ardour/editor_keys.cc +++ b/gtk2_ardour/editor_keys.cc @@ -43,9 +43,8 @@ Editor::keyboard_selection_finish (bool /*add*/, Editing::EditIgnoreOption ign) { if (_session) { - framepos_t start = selection->time.start(); + MusicFrame start (selection->time.start(), 0); framepos_t end; - if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) { end = _session->audible_frame(); } else { @@ -53,13 +52,13 @@ Editor::keyboard_selection_finish (bool /*add*/, Editing::EditIgnoreOption ign) } //snap the selection start/end - snap_to(start); + snap_to (start); //if no tracks are selected and we're working from the keyboard, enable all tracks (_something_ has to be selected for any range selection) if ( (_edit_point == EditAtPlayhead) && selection->tracks.empty() ) select_all_tracks(); - selection->set (start, end); + selection->set (start.frame, end); //if session is playing a range, cancel that if (_session->get_play_range()) @@ -73,26 +72,25 @@ Editor::keyboard_selection_begin (Editing::EditIgnoreOption ign) { if (_session) { - framepos_t start; - framepos_t end = selection->time.end_frame(); - + MusicFrame start (0, 0); + MusicFrame end (selection->time.end_frame(), 0); if ((_edit_point == EditAtPlayhead) && _session->transport_rolling()) { - start = _session->audible_frame(); + start.frame = _session->audible_frame(); } else { - start = get_preferred_edit_position(ign); + start.frame = get_preferred_edit_position(ign); } //snap the selection start/end snap_to(start); //if there's not already a sensible selection endpoint, go "forever" - if (start > end) { + if (start.frame > end.frame) { #ifdef MIXBUS // 4hours at most. // This works around a visual glitch in red-bordered selection rect. - end = start + _session->nominal_frame_rate() * 60 * 60 * 4; + end.frame = start.frame + _session->nominal_frame_rate() * 60 * 60 * 4; #else - end = max_framepos; + end.frame = max_framepos; #endif } @@ -100,7 +98,7 @@ Editor::keyboard_selection_begin (Editing::EditIgnoreOption ign) if ( selection->tracks.empty() ) select_all_tracks(); - selection->set (start, end); + selection->set (start.frame, end.frame); //if session is playing a range, cancel that if (_session->get_play_range()) |