Fix snap modifiers not working on notes when grid is set to off.

This commit is contained in:
nick_m 2015-10-31 06:02:54 +11:00
parent fcc626132e
commit d5c4d068b0
2 changed files with 9 additions and 5 deletions

View File

@ -5451,7 +5451,8 @@ NoteDrag::total_dx (const guint state) const
frameoffset_t ret;
if (snap) {
ret = _region->snap_frame_to_frame (st - rp) + rp - n - snap_delta (state);
bool const ensure_snap = _editor->snap_mode () != SnapMagnetic;
ret = _region->snap_frame_to_frame (st - rp, ensure_snap) + rp - n - snap_delta (state);
} else {
ret = st - n - snap_delta (state);
}

View File

@ -2748,6 +2748,7 @@ void
MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative, double snap_delta, bool with_snap)
{
bool cursor_set = false;
bool const ensure_snap = trackview.editor().snap_mode () != SnapMagnetic;
for (std::vector<NoteResizeData *>::iterator i = _resize_data.begin(); i != _resize_data.end(); ++i) {
ArdourCanvas::Rectangle* resize_rect = (*i)->resize_rect;
@ -2779,14 +2780,14 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
if (at_front) {
if (with_snap) {
resize_rect->set_x0 (snap_to_pixel(current_x) - snap_delta);
resize_rect->set_x0 (snap_to_pixel (current_x, ensure_snap) - snap_delta);
} else {
resize_rect->set_x0 (current_x - snap_delta);
}
resize_rect->set_x1 (canvas_note->x1());
} else {
if (with_snap) {
resize_rect->set_x1 (snap_to_pixel(current_x) - snap_delta);
resize_rect->set_x1 (snap_to_pixel (current_x, ensure_snap) - snap_delta);
} else {
resize_rect->set_x1 (current_x - snap_delta);
}
@ -2807,7 +2808,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
sign = -1;
}
const double snapped_x = (with_snap ? snap_pixel_to_sample (current_x) : trackview.editor ().pixel_to_sample (current_x));
const double snapped_x = (with_snap ? snap_pixel_to_sample (current_x, ensure_snap) : trackview.editor ().pixel_to_sample (current_x));
Evoral::Beats beats = region_frames_to_region_beats (snapped_x);
Evoral::Beats len = Evoral::Beats();
@ -2843,6 +2844,8 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_
{
_note_diff_command = _model->new_note_diff_command (_("resize notes"));
bool const ensure_snap = trackview.editor().snap_mode () != SnapMagnetic;
for (std::vector<NoteResizeData *>::iterator i = _resize_data.begin(); i != _resize_data.end(); ++i) {
Note* canvas_note = (*i)->note;
ArdourCanvas::Rectangle* resize_rect = (*i)->resize_rect;
@ -2889,7 +2892,7 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_
/* Convert the new x position to a frame within the source */
framepos_t current_fr;
if (with_snap) {
current_fr = snap_pixel_to_sample (current_x) + _region->start ();
current_fr = snap_pixel_to_sample (current_x, ensure_snap) + _region->start ();
} else {
current_fr = trackview.editor().pixel_to_sample (current_x) + _region->start ();
}