diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-09-17 20:32:18 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-09-17 20:32:18 +0000 |
commit | 9a8cd09b19db14cef0349439ab6f5197fffb7f71 (patch) | |
tree | 90580a16ac5334705df4a8784aedf2db4329e954 | |
parent | ede4ecbb00ecc866c502454c81e711baea780ccd (diff) |
fix errors in midi note drag preview (#3446)
git-svn-id: svn://localhost/ardour2/branches/3.0@7793 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 36 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.h | 1 |
3 files changed, 14 insertions, 31 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 87d7b6a1a9..675a722509 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -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); } diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index f5a0d98f20..6f582b3518 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -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 ((*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_selected_time)) { + if (Evoral::musical_time_equal ((*i)->note()->time(), earliest)) { to_play.push_back ((*i)->note()); } (*i)->move_event(dx, dy); diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 4e4e9544c5..53b8c1ef0b 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -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; |