When creating notes with the pencil tool, make them 1 frame shorter than the grid subdivision to prevent overlaps. Fixes #3237.

git-svn-id: svn://localhost/ardour2/branches/3.0@7281 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2010-06-20 21:24:48 +00:00
parent 6c19e1c7ea
commit c4e6b368ae
2 changed files with 11 additions and 5 deletions

View file

@ -348,7 +348,7 @@ MidiRegionView::button_release (GdkEventButton* ev)
if (!success) { if (!success) {
beats = 1; beats = 1;
} }
create_note_at (event_x, event_y, beats); create_note_at (event_x, event_y, beats, true);
break; break;
} }
default: default:
@ -369,7 +369,7 @@ MidiRegionView::button_release (GdkEventButton* ev)
const double length = trackview.editor().pixel_to_frame const double length = trackview.editor().pixel_to_frame
(_drag_rect->property_x2() - _drag_rect->property_x1()); (_drag_rect->property_x2() - _drag_rect->property_x1());
create_note_at (x, _drag_rect->property_y1(), frames_to_beats(length)); create_note_at (x, _drag_rect->property_y1(), frames_to_beats(length), false);
} }
delete _drag_rect; delete _drag_rect;
@ -650,9 +650,11 @@ MidiRegionView::show_list_editor ()
/** Add a note to the model, and the view, at a canvas (click) coordinate. /** Add a note to the model, and the view, at a canvas (click) coordinate.
* \param x horizontal position in pixels * \param x horizontal position in pixels
* \param y vertical position in pixels * \param y vertical position in pixels
* \param length duration of the note in beats */ * \param length duration of the note in beats, which will be snapped to the grid
* \param sh true to make the note 1 frame shorter than the snapped version of \a length.
*/
void void
MidiRegionView::create_note_at(double x, double y, double length) MidiRegionView::create_note_at(double x, double y, double length, bool sh)
{ {
MidiTimeAxisView* const mtv = dynamic_cast<MidiTimeAxisView*>(&trackview); MidiTimeAxisView* const mtv = dynamic_cast<MidiTimeAxisView*>(&trackview);
MidiStreamView* const view = mtv->midi_view(); MidiStreamView* const view = mtv->midi_view();
@ -672,6 +674,10 @@ MidiRegionView::create_note_at(double x, double y, double length)
assert (length != 0); assert (length != 0);
if (sh) {
length = frames_to_beats (beats_to_frames (length) - 1);
}
const boost::shared_ptr<NoteType> new_note(new NoteType(0, const boost::shared_ptr<NoteType> new_note(new NoteType(0,
frames_to_beats(start_frames + _region->start()), length, frames_to_beats(start_frames + _region->start()), length,
(uint8_t)note, 0x40)); (uint8_t)note, 0x40));

View file

@ -169,7 +169,7 @@ class MidiRegionView : public RegionView
void end_write(); void end_write();
void extend_active_notes(); void extend_active_notes();
void create_note_at(double x, double y, double length); void create_note_at(double x, double y, double length, bool);
void display_model(boost::shared_ptr<ARDOUR::MidiModel> model); void display_model(boost::shared_ptr<ARDOUR::MidiModel> model);