fix errors in midi note drag preview (#3446)

git-svn-id: svn://localhost/ardour2/branches/3.0@7793 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2010-09-17 20:32:18 +00:00
parent ede4ecbb00
commit 9a8cd09b19
3 changed files with 14 additions and 31 deletions

View File

@ -3718,11 +3718,13 @@ NoteDrag::motion (GdkEvent *, bool)
_cumulative_dx += tdx;
_cumulative_dy += tdy;
_region->move_selection (tdx, tdy, _cumulative_dy);
int8_t note_delta = total_dy();
_region->move_selection (tdx, tdy, note_delta);
char buf[12];
snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (_primary->note()->note() + dy).c_str(),
(int) floor (_primary->note()->note() + dy));
snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (_primary->note()->note() + note_delta).c_str(),
(int) floor (_primary->note()->note() + note_delta));
_editor->show_verbose_canvas_cursor_with (buf);
}

View File

@ -92,7 +92,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &
, _step_edit_cursor (0)
, _step_edit_cursor_width (1.0)
, _step_edit_cursor_position (0.0)
, _earliest_selected_time (Evoral::MaxMusicalTime)
, _mouse_state(None)
, _pressed_button(0)
, _sort_needed (true)
@ -117,7 +116,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &
, _diff_command(0)
, _ghost_note(0)
, _drag_rect (0)
, _earliest_selected_time (Evoral::MaxMusicalTime)
, _mouse_state(None)
, _pressed_button(0)
, _sort_needed (true)
@ -141,7 +139,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
, _diff_command(0)
, _ghost_note(0)
, _drag_rect (0)
, _earliest_selected_time (Evoral::MaxMusicalTime)
, _mouse_state(None)
, _pressed_button(0)
, _sort_needed (true)
@ -169,7 +166,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
, _diff_command(0)
, _ghost_note(0)
, _drag_rect (0)
, _earliest_selected_time (Evoral::MaxMusicalTime)
, _mouse_state(None)
, _pressed_button(0)
, _sort_needed (true)
@ -1695,7 +1691,6 @@ MidiRegionView::clear_selection_except(ArdourCanvas::CanvasNoteEvent* ev)
}
_selection.clear();
_earliest_selected_time = Evoral::MaxMusicalTime;
}
void
@ -1832,7 +1827,7 @@ MidiRegionView::note_selected(ArdourCanvas::CanvasNoteEvent* ev, bool add, bool
} else {
/* find end of latest note selected, select all between that and the start of "ev" */
Evoral::MusicalTime earliest = DBL_MAX;
Evoral::MusicalTime earliest = Evoral::MaxMusicalTime;
Evoral::MusicalTime latest = 0;
for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
@ -1937,25 +1932,9 @@ MidiRegionView::remove_from_selection (CanvasNoteEvent* ev)
ev->set_selected (false);
ev->hide_velocity ();
if (Evoral::musical_time_equal (ev->note()->time(), _earliest_selected_time)) {
_earliest_selected_time = Evoral::MaxMusicalTime;
/* compute new earliest time */
for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
if (!Evoral::musical_time_equal ((*i)->note()->time(), _earliest_selected_time) &&
(*i)->note()->time() < _earliest_selected_time) {
_earliest_selected_time = (*i)->note()->time();
}
}
}
if (_selection.empty()) {
PublicEditor& editor (trackview.editor());
editor.get_selection().remove (this);
_earliest_selected_time = Evoral::MaxMusicalTime;
}
}
@ -1971,10 +1950,6 @@ MidiRegionView::add_to_selection (CanvasNoteEvent* ev)
if (_selection.insert (ev).second) {
ev->set_selected (true);
play_midi_note ((ev)->note());
if (ev->note()->time() < _earliest_selected_time) {
_earliest_selected_time = ev->note()->time();
}
}
if (add_mrv_selection) {
@ -1988,9 +1963,16 @@ MidiRegionView::move_selection(double dx, double dy, double cumulative_dy)
{
typedef vector<boost::shared_ptr<NoteType> > PossibleChord;
PossibleChord to_play;
Evoral::MusicalTime earliest = Evoral::MaxMusicalTime;
for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
if (Evoral::musical_time_equal ((*i)->note()->time(), _earliest_selected_time)) {
if ((*i)->note()->time() < earliest) {
earliest = (*i)->note()->time();
}
}
for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
if (Evoral::musical_time_equal ((*i)->note()->time(), earliest)) {
to_play.push_back ((*i)->note());
}
(*i)->move_event(dx, dy);

View File

@ -372,7 +372,6 @@ class MidiRegionView : public RegionView
ArdourCanvas::SimpleRect* _step_edit_cursor;
Evoral::MusicalTime _step_edit_cursor_width;
Evoral::MusicalTime _step_edit_cursor_position;
Evoral::MusicalTime _earliest_selected_time;
MouseState _mouse_state;
int _pressed_button;