From: David Robillard Date: Sat, 9 Jun 2007 06:10:30 +0000 (+0000) Subject: Redraw MIDI region views on zoom and track height changes. X-Git-Tag: 3.0-alpha5~4805 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=13151b43f058ae97408a39b4c5160974c512c9ae;hp=7ff7f4013dfbbf18d08e397230ad2486fa7ff58f;p=ardour.git Redraw MIDI region views on zoom and track height changes. Disable excessive/old debug prints. Fix region view heights. git-svn-id: svn://localhost/ardour2/trunk@1982 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index bc0e3671c3..3fb1a016e4 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -400,7 +400,7 @@ AudioRegionView::region_muted () void AudioRegionView::set_y_position_and_height (double y, double h) { - RegionView::set_y_position_and_height(y, h - 2); + RegionView::set_y_position_and_height(y, h - 1); _y_position = y; _height = h; diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h index e581e01146..1facc652a9 100644 --- a/gtk2_ardour/audio_region_view.h +++ b/gtk2_ardour/audio_region_view.h @@ -147,7 +147,6 @@ class AudioRegionView : public RegionView void fade_out_active_changed (); void region_resized (ARDOUR::Change); - void region_moved (void *); void region_muted (); void region_scale_amplitude_changed (); void region_renamed (); diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 1750ece8a4..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,11 +204,11 @@ MidiRegionView::end_write() void MidiRegionView::add_event (const MidiEvent& ev) { - printf("Event, time = %f, size = %zu, data = ", ev.time, ev.size); + /*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"); + printf("\n\n");*/ double y1 = trackview.height / 2.0; if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) { diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 597ae646bf..4a00102cec 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -57,6 +57,8 @@ class MidiRegionView : public RegionView virtual void init (Gdk::Color& base_color, bool wait_for_data = false); boost::shared_ptr midi_region() const; + + void set_y_position_and_height (double, double); void show_region_editor (); @@ -82,13 +84,17 @@ class MidiRegionView : public RegionView Gdk::Color& basic_color, TimeAxisViewItem::Visibility); - void region_moved (void *); + void region_resized (ARDOUR::Change); void set_flags (XMLNode *); void store_flags (); + + void reset_width_dependent_items (double pixel_width); private: + void display_events(); + std::vector _events; ArdourCanvas::SimpleRect** _active_notes; }; diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index 9ee64d27d7..2d3346df56 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -137,7 +137,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd) reset_width_dependent_items ((double) _region->length() / samples_per_unit); - set_y_position_and_height (0, trackview.height); + set_y_position_and_height (0, trackview.height - 2); _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed)); diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h index c444d19fdc..6277354519 100644 --- a/gtk2_ardour/region_view.h +++ b/gtk2_ardour/region_view.h @@ -100,7 +100,6 @@ class RegionView : public TimeAxisViewItem TimeAxisViewItem::Visibility); virtual void region_resized (ARDOUR::Change); - void region_moved (void *); virtual void region_muted (); void region_locked (); void region_opacity (); diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index dc58afa8ea..bfc1e4b300 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -75,7 +75,7 @@ MidiModel::append(double time, size_t size, Byte* in_buffer) { assert(_events.empty() || time >= _events.back().time); - cerr << "Model event: time = " << time << endl; + //cerr << "Model event: time = " << time << endl; Byte* my_buffer = new Byte[size]; memcpy(my_buffer, in_buffer, size); diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index d1192f5186..4f3fbd1fd9 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -137,7 +137,7 @@ SMFSource::init (string pathstr, bool must_exist) int SMFSource::open() { - cerr << "Opening SMF file " << path() << " writeable: " << writable() << endl; + //cerr << "Opening SMF file " << path() << " writeable: " << writable() << endl; assert(writable()); // FIXME; @@ -149,7 +149,7 @@ SMFSource::open() uint32_t track_size_be = 0; fread(&track_size_be, 4, 1, _fd); _track_size = GUINT32_FROM_BE(track_size_be); - cerr << "SMF - read track size " << _track_size << endl; + //cerr << "SMF - read track size " << _track_size << endl; // We're making a new file } else {