Snap new automation points in AutomationRegionViews (#4297).

git-svn-id: svn://localhost/ardour2/branches/3.0@10059 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2011-09-06 23:28:55 +00:00
parent 853904aa26
commit 174c0d6831
5 changed files with 31 additions and 28 deletions

View File

@ -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;

View File

@ -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)
{

View File

@ -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 */

View File

@ -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();
}

View File

@ -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