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
This commit is contained in:
David Robillard 2007-06-09 06:10:30 +00:00
parent 7ff7f4013d
commit 13151b43f0
8 changed files with 73 additions and 15 deletions

View file

@ -400,7 +400,7 @@ AudioRegionView::region_muted ()
void void
AudioRegionView::set_y_position_and_height (double y, double h) 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; _y_position = y;
_height = h; _height = h;

View file

@ -147,7 +147,6 @@ class AudioRegionView : public RegionView
void fade_out_active_changed (); void fade_out_active_changed ();
void region_resized (ARDOUR::Change); void region_resized (ARDOUR::Change);
void region_moved (void *);
void region_muted (); void region_muted ();
void region_scale_amplitude_changed (); void region_scale_amplitude_changed ();
void region_renamed (); void region_renamed ();

View file

@ -89,14 +89,27 @@ MidiRegionView::init (Gdk::Color& basic_color, bool wfd)
if (wfd) { if (wfd) {
midi_region()->midi_source(0)->load_model(); midi_region()->midi_source(0)->load_model();
display_events();
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();
} }
} }
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 () MidiRegionView::~MidiRegionView ()
{ {
in_destructor = true; in_destructor = true;
@ -112,6 +125,47 @@ MidiRegionView::midi_region() const
return boost::dynamic_pointer_cast<MidiRegion>(_region); 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 void
MidiRegionView::show_region_editor () MidiRegionView::show_region_editor ()
{ {
@ -150,11 +204,11 @@ MidiRegionView::end_write()
void void
MidiRegionView::add_event (const MidiEvent& ev) 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) { for (size_t i=0; i < ev.size; ++i) {
printf("%X ", ev.buffer[i]); printf("%X ", ev.buffer[i]);
} }
printf("\n\n"); printf("\n\n");*/
double y1 = trackview.height / 2.0; double y1 = trackview.height / 2.0;
if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) { if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) {

View file

@ -58,6 +58,8 @@ class MidiRegionView : public RegionView
boost::shared_ptr<ARDOUR::MidiRegion> midi_region() const; boost::shared_ptr<ARDOUR::MidiRegion> midi_region() const;
void set_y_position_and_height (double, double);
void show_region_editor (); void show_region_editor ();
GhostRegion* add_ghost (AutomationTimeAxisView&); GhostRegion* add_ghost (AutomationTimeAxisView&);
@ -82,13 +84,17 @@ class MidiRegionView : public RegionView
Gdk::Color& basic_color, Gdk::Color& basic_color,
TimeAxisViewItem::Visibility); TimeAxisViewItem::Visibility);
void region_moved (void *); void region_resized (ARDOUR::Change);
void set_flags (XMLNode *); void set_flags (XMLNode *);
void store_flags (); void store_flags ();
void reset_width_dependent_items (double pixel_width);
private: private:
void display_events();
std::vector<ArdourCanvas::Item*> _events; std::vector<ArdourCanvas::Item*> _events;
ArdourCanvas::SimpleRect** _active_notes; ArdourCanvas::SimpleRect** _active_notes;
}; };

View file

@ -137,7 +137,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd)
reset_width_dependent_items ((double) _region->length() / samples_per_unit); 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)); _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed));

View file

@ -100,7 +100,6 @@ class RegionView : public TimeAxisViewItem
TimeAxisViewItem::Visibility); TimeAxisViewItem::Visibility);
virtual void region_resized (ARDOUR::Change); virtual void region_resized (ARDOUR::Change);
void region_moved (void *);
virtual void region_muted (); virtual void region_muted ();
void region_locked (); void region_locked ();
void region_opacity (); void region_opacity ();

View file

@ -75,7 +75,7 @@ MidiModel::append(double time, size_t size, Byte* in_buffer)
{ {
assert(_events.empty() || time >= _events.back().time); 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]; Byte* my_buffer = new Byte[size];
memcpy(my_buffer, in_buffer, size); memcpy(my_buffer, in_buffer, size);

View file

@ -137,7 +137,7 @@ SMFSource::init (string pathstr, bool must_exist)
int int
SMFSource::open() SMFSource::open()
{ {
cerr << "Opening SMF file " << path() << " writeable: " << writable() << endl; //cerr << "Opening SMF file " << path() << " writeable: " << writable() << endl;
assert(writable()); // FIXME; assert(writable()); // FIXME;
@ -149,7 +149,7 @@ SMFSource::open()
uint32_t track_size_be = 0; uint32_t track_size_be = 0;
fread(&track_size_be, 4, 1, _fd); fread(&track_size_be, 4, 1, _fd);
_track_size = GUINT32_FROM_BE(track_size_be); _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 // We're making a new file
} else { } else {