summaryrefslogtreecommitdiff
path: root/gtk2_ardour/region_view.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2015-05-17 04:26:05 +1000
committernick_m <mainsbridge@gmail.com>2015-05-17 04:26:05 +1000
commit91a34c596d1bb72f33ccaa17d6ebfa3a435f629c (patch)
treee4597f925fb4f65d7aba9b52eac61f13095f418b /gtk2_ardour/region_view.cc
parentbbafb8f137bd9f8a18a7242e2628d309a1f8f991 (diff)
Relative snap - support magnetic mode (hackishly for now)
Diffstat (limited to 'gtk2_ardour/region_view.cc')
-rw-r--r--gtk2_ardour/region_view.cc26
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();
+}