Fix some bugs I introduced with the last commit.
git-svn-id: svn://localhost/ardour2/branches/3.0@10973 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
ab4e7cf472
commit
b4d7120a58
@ -4281,26 +4281,31 @@ NoteCreateDrag::~NoteCreateDrag ()
|
||||
delete _drag_rect;
|
||||
}
|
||||
|
||||
framecnt_t
|
||||
NoteCreateDrag::grid_frames (framepos_t t) const
|
||||
{
|
||||
bool success;
|
||||
Evoral::MusicalTime grid_beats = _editor->get_grid_type_as_beats (success, t);
|
||||
if (!success) {
|
||||
grid_beats = 1;
|
||||
}
|
||||
|
||||
return _region_view->region_beats_to_region_frames (grid_beats);
|
||||
}
|
||||
|
||||
void
|
||||
NoteCreateDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
|
||||
{
|
||||
_drag_rect = new ArdourCanvas::SimpleRect (*_region_view->get_canvas_group ());
|
||||
|
||||
framepos_t pf = _drags->current_pointer_frame ();
|
||||
|
||||
bool success;
|
||||
Evoral::MusicalTime grid_beats = _editor->get_grid_type_as_beats (success, pf);
|
||||
if (!success) {
|
||||
grid_beats = 1;
|
||||
}
|
||||
|
||||
framecnt_t grid_frames = _region_view->region_beats_to_region_frames (grid_beats);
|
||||
framecnt_t const g = grid_frames (pf);
|
||||
|
||||
/* Hack so that we always snap to the note that we are over, instead of snapping
|
||||
to the next one if we're more than halfway through the one we're over.
|
||||
*/
|
||||
if (_editor->snap_mode() == SnapNormal && pf > grid_frames / 2) {
|
||||
pf -= grid_frames / 2;
|
||||
if (_editor->snap_mode() == SnapNormal && pf > g / 2) {
|
||||
pf -= g / 2;
|
||||
}
|
||||
|
||||
_note[0] = adjusted_frame (pf, event) - _region_view->region()->position ();
|
||||
@ -4332,14 +4337,19 @@ NoteCreateDrag::motion (GdkEvent* event, bool)
|
||||
}
|
||||
|
||||
void
|
||||
NoteCreateDrag::finished (GdkEvent* event, bool)
|
||||
NoteCreateDrag::finished (GdkEvent* event, bool had_movement)
|
||||
{
|
||||
if (_drag_rect->property_x2() < _drag_rect->property_x1() + 2) {
|
||||
if (!had_movement) {
|
||||
abort ();
|
||||
}
|
||||
|
||||
framepos_t const start = min (_note[0], _note[1]);
|
||||
framecnt_t const length = abs (_note[0] - _note[1]);
|
||||
framecnt_t length = abs (_note[0] - _note[1]);
|
||||
|
||||
framecnt_t const g = grid_frames (start);
|
||||
if (_editor->snap_mode() == SnapNormal && length < g) {
|
||||
length = g;
|
||||
}
|
||||
|
||||
_region_view->create_note_at (start, _drag_rect->property_y1(), _region_view->region_frames_to_region_beats (length), true, false);
|
||||
}
|
||||
|
@ -471,6 +471,7 @@ public:
|
||||
|
||||
private:
|
||||
double y_to_region (double) const;
|
||||
framecnt_t grid_frames (framepos_t) const;
|
||||
|
||||
MidiRegionView* _region_view;
|
||||
ArdourCanvas::SimpleRect* _drag_rect;
|
||||
|
Loading…
Reference in New Issue
Block a user