summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/editor.cc18
-rw-r--r--gtk2_ardour/editor.h9
-rw-r--r--gtk2_ardour/editor_drag.cc4
-rw-r--r--gtk2_ardour/midi_region_view.cc27
-rw-r--r--gtk2_ardour/midi_region_view.h18
-rw-r--r--gtk2_ardour/public_editor.h7
-rw-r--r--gtk2_ardour/region_view.cc32
-rw-r--r--gtk2_ardour/region_view.h3
8 files changed, 23 insertions, 95 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 05f9b0ca93..45c7ca94b0 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -2609,23 +2609,13 @@ Editor::snap_to_with_modifier (framepos_t& start, GdkEvent const * event, RoundM
}
void
-Editor::snap_to (framepos_t& start, RoundMode direction, bool for_mark)
+Editor::snap_to (framepos_t& start, RoundMode direction, bool for_mark, bool explicitly)
{
if (!_session || _snap_mode == SnapOff) {
return;
}
- snap_to_internal (start, direction, for_mark);
-}
-
-void
-Editor::snap_to_no_magnets (framepos_t& start, RoundMode direction, bool for_mark)
-{
- if (!_session || _snap_mode == SnapOff) {
- return;
- }
-
- snap_to_internal (start, direction, for_mark, true);
+ snap_to_internal (start, direction, for_mark, explicitly);
}
void
@@ -2695,7 +2685,7 @@ Editor::timecode_snap_to_internal (framepos_t& start, RoundMode direction, bool
}
void
-Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark, bool no_magnets)
+Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark, bool explicitly)
{
const framepos_t one_second = _session->frame_rate();
const framepos_t one_minute = _session->frame_rate() * 60;
@@ -2865,7 +2855,7 @@ Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark,
case SnapMagnetic:
- if (no_magnets) {
+ if (explicitly) {
return;
}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 8362b00551..663a97a56d 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -436,11 +436,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void snap_to (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
-
- void snap_to_no_magnets (framepos_t& first,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ bool for_mark = false,
+ bool explicitly = false);
void snap_to_with_modifier (framepos_t& first,
GdkEvent const * ev,
@@ -2136,7 +2133,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void snap_to_internal (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
bool for_mark = false,
- bool no_magnets = false);
+ bool explicitly = false);
void timecode_snap_to_internal (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index 18a3b5115b..3f08a8c750 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -366,7 +366,7 @@ void
Drag::setup_snap_delta (framepos_t pos)
{
framepos_t temp = pos;
- _editor->snap_to_no_magnets (temp);
+ _editor->snap_to (temp, ARDOUR::RoundNearest, false, true);
_snap_delta = temp - pos;
}
@@ -2347,7 +2347,7 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/)
region = &cnote->region_view();
double temp;
- temp = region->snap_to_pixel_no_magnets (cnote->x0 ());
+ temp = region->snap_to_pixel (cnote->x0 (), true);
_snap_delta = temp - cnote->x0 ();
_item->grab ();
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index be280001d2..2fa8f4a3cd 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -2627,38 +2627,19 @@ MidiRegionView::note_dropped(NoteBase *, frameoffset_t dt, int8_t dnote)
* @return Snapped frame relative to the region position.
*/
framepos_t
-MidiRegionView::snap_pixel_to_sample(double x)
+MidiRegionView::snap_pixel_to_sample(double x, bool explicitly)
{
PublicEditor& editor (trackview.editor());
- return snap_frame_to_frame (editor.pixel_to_sample (x));
-}
-
-/** @param x Pixel relative to the region position explicitly (no magnetic snap)
- * @return Snapped frame relative to the region position.
- */
-framepos_t
-MidiRegionView::snap_pixel_to_sample_no_magnets (double x)
-{
- PublicEditor& editor (trackview.editor());
- return snap_frame_to_frame_no_magnets (editor.pixel_to_sample (x));
+ return snap_frame_to_frame (editor.pixel_to_sample (x), explicitly);
}
/** @param x Pixel relative to the region position.
* @return Snapped pixel relative to the region position.
*/
double
-MidiRegionView::snap_to_pixel(double x)
-{
- return (double) trackview.editor().sample_to_pixel(snap_pixel_to_sample(x));
-}
-
-/** @param x Pixel relative to the region position.
- * @return Explicitly snapped pixel relative to the region position (no magnetic snap).
- */
-double
-MidiRegionView::snap_to_pixel_no_magnets (double x)
+MidiRegionView::snap_to_pixel(double x, bool explicitly)
{
- return (double) trackview.editor().sample_to_pixel(snap_pixel_to_sample_no_magnets(x));
+ return (double) trackview.editor().sample_to_pixel(snap_pixel_to_sample(x, explicitly));
}
double
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 7329c6facc..37a66aa398 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -250,27 +250,17 @@ public:
/** Snap a region relative pixel coordinate to pixel units.
* @param x a pixel coordinate relative to region start
+ * @param explicitly do not use magnetic snap (required for snap delta calculation)
* @return the snapped pixel coordinate relative to region start
*/
- double snap_to_pixel(double x);
-
- /** Snap a region relative pixel coordinate to pixel units explicitly (no magnetic snap).
- * @param x a pixel coordinate relative to region start
- * @return the explicitly snapped pixel coordinate relative to region start
- */
- double snap_to_pixel_no_magnets (double x);
+ double snap_to_pixel(double x, bool explicitly = false);
/** Snap a region relative pixel coordinate to frame units.
* @param x a pixel coordinate relative to region start
+ * @param explicitly do not use magnetic snap (required for snap delta calculation)
* @return the snapped framepos_t coordinate relative to region start
*/
- framepos_t snap_pixel_to_sample(double x);
-
- /** Explicitly snap a region relative pixel coordinate to frame units (no magnetic snap).
- * @param x a pixel coordinate relative to region start
- * @return the explicitly snapped framepos_t coordinate relative to region start
- */
- framepos_t snap_pixel_to_sample_no_magnets (double x);
+ framepos_t snap_pixel_to_sample(double x, bool explicitly = false);
/** Convert a timestamp in beats into frames (both relative to region position) */
framepos_t region_beats_to_region_frames(Evoral::Beats beats) const;
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index a89993a479..463d7614d2 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -144,11 +144,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
/** Snap a value according to the current snap setting. */
virtual void snap_to (framepos_t& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false) = 0;
- /** Snap a value according to the current snap setting. */
- virtual void snap_to_no_magnets (framepos_t& first,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false) = 0;
+ bool for_mark = false,
+ bool explicitly = false) = 0;
/** Undo some transactions.
* @param n Number of transactions to undo.
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index cd83154a9f..5a8e3f235b 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -942,7 +942,7 @@ RegionView::move_contents (frameoffset_t distance)
* @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 explicitly) const
{
PublicEditor& editor = trackview.editor();
@@ -951,38 +951,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, explicitly);
/* if we went off the beginning of the region, snap forwards */
if (frame < _region->position ()) {
frame = session_frame;
- editor.snap_to (frame, RoundUpAlways);
- }
-
- /* 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);
+ editor.snap_to (frame, RoundUpAlways, false, explicitly);
}
/* back to region relative */
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index 77abb5e2a9..23b08f4b12 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -121,8 +121,7 @@ class RegionView : public TimeAxisViewItem
}
};
- ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t) const;
- ARDOUR::frameoffset_t snap_frame_to_frame_no_magnets (ARDOUR::frameoffset_t) const;
+ ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t, bool explicitly = false) const;
protected: