make editor_drag.h fully self-contained as a header file (it was missing more than...
[ardour.git] / gtk2_ardour / region_view.cc
index be96cd4058bb0b4fbbec286abd7aaae57eecaacd..75e091f2d02ec68334a96fcee6ab2c43fe625be9 100644 (file)
@@ -939,10 +939,12 @@ RegionView::move_contents (frameoffset_t distance)
 
 /** Snap a frame offset within our region using the current snap settings.
  *  @param x Frame offset from this region's position.
+ *  @param ensure_snap whether to ignore snap_mode (in the case of SnapOff) and magnetic snap.
+ *  Used when inverting snap mode logic with key modifiers, or snap distance calculation.
  *  @return Snapped frame offset from this region's position.
  */
 frameoffset_t
-RegionView::snap_frame_to_frame (frameoffset_t x) const
+RegionView::snap_frame_to_frame (frameoffset_t x, bool ensure_snap) const
 {
        PublicEditor& editor = trackview.editor();
 
@@ -951,12 +953,12 @@ RegionView::snap_frame_to_frame (frameoffset_t x) const
 
        /* try a snap in either direction */
        framepos_t frame = session_frame;
-       editor.snap_to (frame, RoundNearest);
+       editor.snap_to (frame, RoundNearest, false, ensure_snap);
 
        /* if we went off the beginning of the region, snap forwards */
        if (frame < _region->position ()) {
                frame = session_frame;
-               editor.snap_to (frame, RoundUpAlways);
+               editor.snap_to (frame, RoundUpAlways, false, ensure_snap);
        }
 
        /* back to region relative */