diff options
author | nick_m <mainsbridge@gmail.com> | 2015-05-17 04:26:05 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2015-05-17 04:26:05 +1000 |
commit | 91a34c596d1bb72f33ccaa17d6ebfa3a435f629c (patch) | |
tree | e4597f925fb4f65d7aba9b52eac61f13095f418b /gtk2_ardour/region_view.cc | |
parent | bbafb8f137bd9f8a18a7242e2628d309a1f8f991 (diff) |
Relative snap - support magnetic mode (hackishly for now)
Diffstat (limited to 'gtk2_ardour/region_view.cc')
-rw-r--r-- | gtk2_ardour/region_view.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index be96cd4058..cd83154a9f 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -962,3 +962,29 @@ RegionView::snap_frame_to_frame (frameoffset_t x) const /* back to region relative */ return frame - _region->position(); } + +/** Snap a frame offset within our region using the current snap settings. + * @param x Frame offset from this region's position. + * @return Snapped frame offset from this region's position. + */ +frameoffset_t +RegionView::snap_frame_to_frame_no_magnets (frameoffset_t x) const +{ + PublicEditor& editor = trackview.editor(); + + /* x is region relative, convert it to global absolute frames */ + framepos_t const session_frame = x + _region->position(); + + /* try a snap in either direction */ + framepos_t frame = session_frame; + editor.snap_to_no_magnets (frame, RoundNearest); + + /* if we went off the beginning of the region, snap forwards */ + if (frame < _region->position ()) { + frame = session_frame; + editor.snap_to_no_magnets (frame, RoundUpAlways); + } + + /* back to region relative */ + return frame - _region->position(); +} |