summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ghostregion.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2016-12-24 02:01:37 +1100
committernick_m <mainsbridge@gmail.com>2016-12-24 02:01:37 +1100
commitda92d2d7648d2625b69fff60a0d645d55e0fa9ac (patch)
tree6f4a1874e92083a0901082dc67a84278d4d6887a /gtk2_ardour/ghostregion.cc
parent0e8852963e2b9f0bb84258f0fc68d8b135e0a56c (diff)
speed up load/quit for sessions containing ~25k events.
- MGR uses a _note_group to hold events. - MRV & MGR delete canvas notes directly from their note group. - sysex is untested (it uses MRV note group).
Diffstat (limited to 'gtk2_ardour/ghostregion.cc')
-rw-r--r--gtk2_ardour/ghostregion.cc13
1 files changed, 6 insertions, 7 deletions
diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc
index e024a1a6e7..ba8ee05a46 100644
--- a/gtk2_ardour/ghostregion.cc
+++ b/gtk2_ardour/ghostregion.cc
@@ -179,6 +179,7 @@ MidiGhostRegion::MidiGhostRegion(RegionView& rv,
TimeAxisView& source_tv,
double initial_unit_pos)
: GhostRegion(rv, tv.ghost_group(), tv, source_tv, initial_unit_pos)
+ , _note_group (new ArdourCanvas::Container (group))
, _optimization_iterator(events.end())
{
_outline = UIConfiguration::instance().color ("ghost track midi outline");
@@ -200,6 +201,7 @@ MidiGhostRegion::MidiGhostRegion(RegionView& rv,
msv.trackview(),
source_tv,
initial_unit_pos)
+ , _note_group (new ArdourCanvas::Container (group))
, _optimization_iterator(events.end())
{
_outline = UIConfiguration::instance().color ("ghost track midi outline");
@@ -324,7 +326,7 @@ MidiGhostRegion::update_contents_height ()
void
MidiGhostRegion::add_note (NoteBase* n)
{
- GhostEvent* event = new GhostEvent (n, group);
+ GhostEvent* event = new GhostEvent (n, _note_group);
events.insert (make_pair (n->note(), event));
event->item->set_fill_color (UIConfiguration::instance().color_mod(n->base_color(), "ghost track midi fill"));
@@ -356,12 +358,9 @@ MidiGhostRegion::add_note (NoteBase* n)
void
MidiGhostRegion::clear_events()
{
- _optimization_iterator = events.begin();
-
- while (_optimization_iterator != events.end()) {
- delete (*_optimization_iterator).second;
- _optimization_iterator = events.erase (_optimization_iterator);
- }
+ _note_group->clear (true);
+ events.clear ();
+ _optimization_iterator = events.end();
}
/** Update the x positions of our representation of a parent's note.