diff options
author | David Robillard <d@drobilla.net> | 2007-06-02 00:55:32 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-06-02 00:55:32 +0000 |
commit | b6814c48395b5911f831e4b107fd3458d0d5443e (patch) | |
tree | d68865b1f12e8eb76efa52d284eb67af4a78fd7f /gtk2_ardour | |
parent | 7bfe236ba7975d102f80cae6c997c56a321d50f9 (diff) |
Fix vertical order of MIDI notes.
Extend current active notes to end of region while recording.
Initialize note state correctly.
git-svn-id: svn://localhost/ardour2/trunk@1945 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 20 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/midi_streamview.cc | 1 |
3 files changed, 20 insertions, 2 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index e7a9547d48..1144bb2011 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -122,7 +122,9 @@ MidiRegionView::add_ghost (AutomationTimeAxisView& atv) void MidiRegionView::begin_write() { - _active_notes = new ArdourCanvas::SimpleRect*[127]; + _active_notes = new ArdourCanvas::SimpleRect*[128]; + for (unsigned i=0; i < 128; ++i) + _active_notes[i] = NULL; } @@ -148,7 +150,7 @@ MidiRegionView::add_event (const MidiEvent& ev) double y1 = trackview.height / 2.0; if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) { const Byte& note = ev.buffer[1]; - y1 = (trackview.height / 127.0) * note; + y1 = trackview.height - ((trackview.height / 127.0) * note); ArdourCanvas::SimpleRect * ev_rect = new Gnome::Canvas::SimpleRect( *(ArdourCanvas::Group*)get_canvas_group()); @@ -179,4 +181,18 @@ MidiRegionView::add_event (const MidiEvent& ev) } +/** Extend active notes to rightmost edge of region (if length is changed) + */ +void +MidiRegionView::extend_active_notes() +{ + if (!_active_notes) + return; + + for (unsigned i=0; i < 128; ++i) + if (_active_notes[i]) + _active_notes[i]->property_x2() = trackview.editor.frame_to_pixel(_region->length()); +} + + diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 32a96a5f7c..597ae646bf 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -66,6 +66,7 @@ class MidiRegionView : public RegionView void begin_write(); void end_write(); + void extend_active_notes(); protected: diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 06cb8b84c8..ee6cff28dc 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -356,6 +356,7 @@ MidiStreamView::update_rec_regions (boost::shared_ptr<MidiBuffer> data, nframes_ for (size_t i = 0; i < data->size(); ++i) { const MidiEvent& ev = (*data.get())[i]; mrv->add_event(ev); + mrv->extend_active_notes(); } } |