summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-09-15 16:54:17 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-09-15 16:54:17 +0000
commit7eea9fac9d23cdb2a6b39c2fbd4b680fafb40a5c (patch)
tree5ad9cb4d1afd63e022d54280d8c47876015b4c31 /gtk2_ardour
parent5f948f6961c948831e259c06de9821369d46f794 (diff)
cleaner version of previous commit
git-svn-id: svn://localhost/ardour2/branches/3.0@7783 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_drag.cc10
-rw-r--r--gtk2_ardour/midi_region_view.cc19
-rw-r--r--gtk2_ardour/midi_region_view.h3
3 files changed, 19 insertions, 13 deletions
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<Evoral::Note<Evoral::MusicalTime> >
- moved_note (new Evoral::Note<Evoral::MusicalTime> (*(_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<NoteType> note)
}
RouteUI* route_ui = dynamic_cast<RouteUI*> (&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<NoteType> note)
{
RouteUI* route_ui = dynamic_cast<RouteUI*> (&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<NoteType>
+ 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<NoteType>);
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.