X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_region_view.cc;h=678f97b6c6798b252231861f49d629766b28a2e9;hb=13151b43f058ae97408a39b4c5160974c512c9ae;hp=b4b3f18e3b595c6e052b3324e8d957124c511a10;hpb=9091ba932d9f440c73b35f02b3f0a89c12f92185;p=ardour.git diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index b4b3f18e3b..678f97b6c6 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -89,14 +89,27 @@ MidiRegionView::init (Gdk::Color& basic_color, bool wfd) if (wfd) { midi_region()->midi_source(0)->load_model(); - - begin_write(); - 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(); + display_events(); } } + +void +MidiRegionView::display_events() +{ + for (std::vector::iterator i = _events.begin(); i != _events.end(); ++i) + delete *i; + + _events.clear(); + begin_write(); + + 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; @@ -112,6 +125,47 @@ MidiRegionView::midi_region() const return boost::dynamic_pointer_cast(_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 () { @@ -150,12 +204,12 @@ MidiRegionView::end_write() 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]; @@ -164,7 +218,7 @@ MidiRegionView::add_event (const MidiEvent& ev) 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()); @@ -181,7 +235,7 @@ MidiRegionView::add_event (const MidiEvent& ev) } 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; }