summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-06-02 00:55:32 +0000
committerDavid Robillard <d@drobilla.net>2007-06-02 00:55:32 +0000
commitb6814c48395b5911f831e4b107fd3458d0d5443e (patch)
treed68865b1f12e8eb76efa52d284eb67af4a78fd7f /gtk2_ardour
parent7bfe236ba7975d102f80cae6c997c56a321d50f9 (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.cc20
-rw-r--r--gtk2_ardour/midi_region_view.h1
-rw-r--r--gtk2_ardour/midi_streamview.cc1
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();
}
}