set_colors ();
- boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion> (_region);
- mr->midi_source(0)->load_model();
+ if (wfd) {
+ midi_region()->midi_source(0)->load_model();
+ display_events();
+ }
+}
+
+void
+MidiRegionView::display_events()
+{
+ for (std::vector<ArdourCanvas::Item*>::iterator i = _events.begin(); i != _events.end(); ++i)
+ delete *i;
+
+ _events.clear();
begin_write();
- for (size_t i=0; i < mr->midi_source(0)->model().n_events(); ++i)
- add_event(mr->midi_source(0)->model().event_at(i));
+
+ for (size_t i=0; i < midi_region()->midi_source(0)->model()->n_events(); ++i)
+ add_event(midi_region()->midi_source(0)->model()->event_at(i));
+
end_write();
}
+
MidiRegionView::~MidiRegionView ()
{
in_destructor = true;
return boost::dynamic_pointer_cast<MidiRegion>(_region);
}
+void
+MidiRegionView::region_resized (Change what_changed)
+{
+ RegionView::region_resized(what_changed);
+
+ if (what_changed & ARDOUR::PositionChanged) {
+
+ display_events();
+
+ } else if (what_changed & Change (StartChanged)) {
+
+ //cerr << "MIDI RV START CHANGED" << endl;
+
+ } else if (what_changed & Change (LengthChanged)) {
+
+ //cerr << "MIDI RV LENGTH CHANGED" << endl;
+
+ }
+}
+
+void
+MidiRegionView::reset_width_dependent_items (double pixel_width)
+{
+ RegionView::reset_width_dependent_items(pixel_width);
+ assert(_pixel_width == pixel_width);
+
+ display_events();
+}
+
+void
+MidiRegionView::set_y_position_and_height (double y, double h)
+{
+ RegionView::set_y_position_and_height(y, h - 1);
+
+ display_events();
+
+ if (name_text) {
+ name_text->raise_to_top();
+ }
+}
+
void
MidiRegionView::show_region_editor ()
{
void
MidiRegionView::add_event (const MidiEvent& ev)
{
- /*printf("Event, time = %u, size = %zu, data = ",
- ev.time, ev.size);
- for (size_t i=0; i < ev.size; ++i) {
- printf("%X ", ev.buffer[i]);
- }
- printf("\n");*/
+ /*printf("Event, time = %f, size = %zu, data = ", ev.time, ev.size);
+ for (size_t i=0; i < ev.size; ++i) {
+ printf("%X ", ev.buffer[i]);
+ }
+ printf("\n\n");*/
+
double y1 = trackview.height / 2.0;
if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) {
const Byte& note = ev.buffer[1];
ArdourCanvas::SimpleRect * ev_rect = new Gnome::Canvas::SimpleRect(
*(ArdourCanvas::Group*)get_canvas_group());
ev_rect->property_x1() = trackview.editor.frame_to_pixel (
- ev.time);
+ (nframes_t)ev.time);
ev_rect->property_y1() = y1;
ev_rect->property_x2() = trackview.editor.frame_to_pixel (
_region->length());
} else if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_OFF) {
const Byte& note = ev.buffer[1];
if (_active_notes && _active_notes[note]) {
- _active_notes[note]->property_x2() = trackview.editor.frame_to_pixel(ev.time);
+ _active_notes[note]->property_x2() = trackview.editor.frame_to_pixel((nframes_t)ev.time);
_active_notes[note]->property_outline_what() = (guint32) 0xF; // all edges
_active_notes[note] = NULL;
}