diff options
author | David Robillard <d@drobilla.net> | 2007-06-09 06:10:30 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-06-09 06:10:30 +0000 |
commit | 13151b43f058ae97408a39b4c5160974c512c9ae (patch) | |
tree | 538375aa592eda4fd4bd828ff726a73f97f84d61 /gtk2_ardour | |
parent | 7ff7f4013dfbbf18d08e397230ad2486fa7ff58f (diff) |
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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/audio_region_view.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/audio_region_view.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 68 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.h | 8 | ||||
-rw-r--r-- | gtk2_ardour/region_view.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/region_view.h | 1 |
6 files changed, 70 insertions, 12 deletions
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<ArdourCanvas::Item*>::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; @@ -113,6 +126,47 @@ MidiRegionView::midi_region() const } 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 () { cerr << "No MIDI region editor." << endl; @@ -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<ARDOUR::MidiRegion> 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<ArdourCanvas::Item*> _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 (); |