summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/automation_region_view.cc4
-rw-r--r--gtk2_ardour/midi_region_view.cc26
-rw-r--r--gtk2_ardour/midi_region_view.h2
-rw-r--r--gtk2_ardour/region_view.cc25
-rw-r--r--gtk2_ardour/region_view.h2
5 files changed, 31 insertions, 28 deletions
diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc
index cd734ac791..161b6a88d6 100644
--- a/gtk2_ardour/automation_region_view.cc
+++ b/gtk2_ardour/automation_region_view.cc
@@ -147,6 +147,10 @@ AutomationRegionView::add_automation_event (GdkEvent *, framepos_t when, double
const double h = trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2;
y = 1.0 - (y / h);
+ /* snap frame */
+
+ when = snap_frame_to_frame (when - _region->start ());
+
/* map using line */
double when_d = when;
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 0900ecc34e..8fb14796e0 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -2360,32 +2360,6 @@ MidiRegionView::snap_pixel_to_frame(double x)
return snap_frame_to_frame (editor.pixel_to_frame (x));
}
-/** 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
-MidiRegionView::snap_frame_to_frame (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 (frame, 0);
-
- /* if we went off the beginning of the region, snap forwards */
- if (frame < _region->position ()) {
- frame = session_frame;
- editor.snap_to (frame, 1);
- }
-
- /* back to region relative */
- return frame - _region->position();
-}
-
double
MidiRegionView::snap_to_pixel(double x)
{
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index ffce48dea0..5eaef05b18 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -251,8 +251,6 @@ public:
*/
framepos_t snap_pixel_to_frame(double x);
- ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t) const;
-
/** Convert a timestamp in beats into frames (both relative to region start) */
framepos_t region_beats_to_region_frames(double beats) const;
/** Convert a timestamp in beats into absolute frames */
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index df26452934..534c7ef0d6 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -950,3 +950,28 @@ RegionView::trim_contents (framepos_t frame_delta, bool left_direction, bool swa
region_changed (PropertyChange (ARDOUR::Properties::start));
}
+/** 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 (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 (frame, 0);
+
+ /* if we went off the beginning of the region, snap forwards */
+ if (frame < _region->position ()) {
+ frame = session_frame;
+ editor.snap_to (frame, 1);
+ }
+
+ /* back to region relative */
+ return frame - _region->position();
+}
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index 896b3f26a0..901e2a8596 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -120,6 +120,8 @@ class RegionView : public TimeAxisViewItem
void drop_silent_frames ();
void hide_silent_frames ();
+ ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t) const;
+
protected:
/** Allows derived types to specify their visibility requirements