summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-05-15 05:00:28 +0000
committerDavid Robillard <d@drobilla.net>2008-05-15 05:00:28 +0000
commit05801cc3d62298453385eae40ea7692386bf7f84 (patch)
tree75882f6f0c0c9bc5c8bf9c556ce302a8f2afd629 /gtk2_ardour
parenta65044d097105a1b9915ead5e51054bb7947771e (diff)
Eliminate excessive allocation (for every event) during MidiModel iteration.
git-svn-id: svn://localhost/ardour2/branches/3.0@3351 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/canvas-program-change.cc37
-rw-r--r--gtk2_ardour/canvas-program-change.h1
-rw-r--r--gtk2_ardour/midi_region_view.cc25
3 files changed, 22 insertions, 41 deletions
diff --git a/gtk2_ardour/canvas-program-change.cc b/gtk2_ardour/canvas-program-change.cc
index ccaf333ef5..6f7182e2cd 100644
--- a/gtk2_ardour/canvas-program-change.cc
+++ b/gtk2_ardour/canvas-program-change.cc
@@ -12,19 +12,16 @@ CanvasProgramChange::CanvasProgramChange(
double height,
double x,
double y)
- : Group(parent, x, y),
- _region(region),
- _event(event),
- _text(0),
- _line(0),
- _rect(0),
- _widget(0)
+ : Group(parent, x, y)
+ , _region(region)
+ , _event(event)
+ , _text(0)
+ , _line(0)
+ , _rect(0)
{
- _text = new Text(*this);
- assert(_text);
- ostringstream pgm(ios::ate);
- pgm << int(event->pgm_number());
- _text->property_text() = pgm.str();
+ char pgm_str[4];
+ snprintf(pgm_str, 4, "%d", (int)event->pgm_number());
+ _text = new Text(*this, 0.0, 0.0, pgm_str);
_text->property_justification() = Gtk::JUSTIFY_CENTER;
_text->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiProgramChangeOutline.get();
double flagwidth = _text->property_text_width() + 10.0;
@@ -39,22 +36,12 @@ CanvasProgramChange::CanvasProgramChange(
_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiProgramChangeFill.get();
_text->lower_to_bottom();
_text->raise(2);
- assert(_widget == 0);
- assert(_text != 0);
- assert(_line != 0);
- assert(_rect != 0);
}
CanvasProgramChange::~CanvasProgramChange()
{
- if(_line)
- delete _line;
- if(_rect)
- delete _rect;
- if(_text)
- delete _text;
- if(_widget)
- delete _widget;
+ delete _line;
+ delete _rect;
+ delete _text;
}
-
diff --git a/gtk2_ardour/canvas-program-change.h b/gtk2_ardour/canvas-program-change.h
index 37dc0cc8da..3ac9b10383 100644
--- a/gtk2_ardour/canvas-program-change.h
+++ b/gtk2_ardour/canvas-program-change.h
@@ -33,7 +33,6 @@ private:
Text* _text;
SimpleLine* _line;
SimpleRect* _rect;
- Widget* _widget;
};
} // namespace Canvas
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index b70e1c7b08..b9af0a81a2 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -466,29 +466,28 @@ MidiRegionView::redisplay_model()
<< " velocity: " << int((*i)->velocity())
<< endl;
}*/
-
- for (size_t i = 0; i < _model->n_notes(); ++i) {
+ for (size_t i = 0; i < _model->n_notes(); ++i)
add_note(_model->note_at(i));
- }
- for (Automatable::Controls::iterator
- control = _model->controls().begin();
+ // Draw program change 'flags'
+ for (Automatable::Controls::iterator control = _model->controls().begin();
control != _model->controls().end(); ++control) {
-
- if ( control->first.type() == MidiPgmChangeAutomation ) {
+ if (control->first.type() == MidiPgmChangeAutomation) {
Glib::Mutex::Lock list_lock (control->second->list()->lock());
for (AutomationList::const_iterator event = control->second->list()->begin();
- event != control->second->list()->end(); ++event) {
+ event != control->second->list()->end(); ++event) {
MidiControlIterator iter(control->second->list(), (*event)->when, (*event)->value);
- add_pgm_change(_model->control_to_midi_event(iter));
+ boost::shared_ptr<MIDI::Event> event(new MIDI::Event());
+ _model->control_to_midi_event(event, iter);
+ add_pgm_change(event);
}
break;
}
}
- // Is this necessary ??????????
+ // Is this necessary?
/*for (Automatable::Controls::const_iterator i = _model->controls().begin();
i != _model->controls().end(); ++i) {
@@ -821,12 +820,8 @@ MidiRegionView::add_pgm_change(boost::shared_ptr<MIDI::Event> event)
assert(event->time() >= 0);
// dont display notes beyond the region bounds
- if (
- event->time() - _region->start() >= _region->length() ||
- event->time() < _region->start()
- ) {
+ if (event->time() - _region->start() >= _region->length() || event->time() < _region->start())
return;
- }
ArdourCanvas::Group* const group = (ArdourCanvas::Group*)get_canvas_group();
const double x = trackview.editor.frame_to_pixel((nframes_t)event->time() - _region->start());