From 7eea9fac9d23cdb2a6b39c2fbd4b680fafb40a5c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 15 Sep 2010 16:54:17 +0000 Subject: cleaner version of previous commit git-svn-id: svn://localhost/ardour2/branches/3.0@7783 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_drag.cc | 10 ++-------- gtk2_ardour/midi_region_view.cc | 19 ++++++++++++++++--- gtk2_ardour/midi_region_view.h | 3 +-- 3 files changed, 19 insertions(+), 13 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 35183c59f5..14b0bd83d3 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3715,21 +3715,15 @@ NoteDrag::motion (GdkEvent *, bool) double const tdy = dy * _note_height - _cumulative_dy; if (tdx || tdy) { - _region->move_selection (tdx, tdy); _cumulative_dx += tdx; _cumulative_dy += tdy; + _region->move_selection (tdx, tdy, _cumulative_dy); + 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)); - if (dy) { - boost::shared_ptr > - moved_note (new Evoral::Note (*(_primary->note()))); - moved_note->set_note (moved_note->note() + dy); - _region->play_midi_note (moved_note); - } - _editor->show_verbose_canvas_cursor_with (buf); } } diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index ee86a38697..cd26a0c81f 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -1316,7 +1316,10 @@ MidiRegionView::play_midi_note(boost::shared_ptr note) } RouteUI* route_ui = dynamic_cast (&trackview); - assert(route_ui); + + if (!route_ui || !route_ui->midi_track()) { + return; + } route_ui->midi_track()->write_immediate_event( note->on_event().size(), note->on_event().buffer()); @@ -1337,7 +1340,10 @@ bool MidiRegionView::play_midi_note_off(boost::shared_ptr note) { RouteUI* route_ui = dynamic_cast (&trackview); - assert(route_ui); + + if (!route_ui || !route_ui->midi_track()) { + return false; + } route_ui->midi_track()->write_immediate_event( note->off_event().size(), note->off_event().buffer()); @@ -1953,10 +1959,17 @@ MidiRegionView::add_to_selection (CanvasNoteEvent* ev) } void -MidiRegionView::move_selection(double dx, double dy) +MidiRegionView::move_selection(double dx, double dy, double cumulative_dy) { for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) { (*i)->move_event(dx, dy); + + if (dy) { + boost::shared_ptr + moved_note (new NoteType (*((*i)->note()))); + moved_note->set_note (moved_note->note() + cumulative_dy); + play_midi_note (moved_note); + } } } diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index ce7b3082c1..b0cc505aee 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -199,7 +199,7 @@ class MidiRegionView : public RegionView void delete_note (boost::shared_ptr); size_t selection_size() { return _selection.size(); } - void move_selection(double dx, double dy); + void move_selection(double dx, double dy, double cumulative_dy); void note_dropped (ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::frameoffset_t, int8_t d_note); void select_matching_notes (uint8_t notenum, uint16_t channel_mask, bool add, bool extend); @@ -303,7 +303,6 @@ class MidiRegionView : public RegionView private: friend class EditNoteDialog; - friend class NoteDrag; /** Play the NoteOn event of the given note immediately * and schedule the playback of the corresponding NoteOff event. -- cgit v1.2.3