summaryrefslogtreecommitdiffstats
path: root/src/Patchage.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-05-09 23:59:01 +0000
committerDavid Robillard <d@drobilla.net>2009-05-09 23:59:01 +0000
commit5465c4af1c7b18cba31fa3d15ab1741f2613e9d4 (patch)
treea7331689f196cef1e979afa313ba60122fa64a97 /src/Patchage.cpp
parent43e673a183844709ecd41e08d97f96d9228a544c (diff)
downloadpatchage-5465c4af1c7b18cba31fa3d15ab1741f2613e9d4.tar.gz
patchage-5465c4af1c7b18cba31fa3d15ab1741f2613e9d4.tar.bz2
patchage-5465c4af1c7b18cba31fa3d15ab1741f2613e9d4.zip
Dramatically reduce resize overhead everywhere.
Make alsa driver create individual ports and do minimal work vs naive full refresh when anything changes. Fixes ticket #355. git-svn-id: http://svn.drobilla.net/lad/trunk/patchage@1967 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/Patchage.cpp')
-rw-r--r--src/Patchage.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/Patchage.cpp b/src/Patchage.cpp
index 0a6d5e0..b00013b 100644
--- a/src/Patchage.cpp
+++ b/src/Patchage.cpp
@@ -23,6 +23,7 @@
#include <libglademm/xml.h>
#include <gtk/gtkwindow.h>
#include "raul/SharedPtr.hpp"
+#include "flowcanvas/Module.hpp"
#include "patchage-config.h"
#include "GladeFile.hpp"
@@ -342,6 +343,7 @@ Patchage::idle_callback()
_refresh = false;
}
+ flush_resize();
update_load();
return true;
@@ -414,9 +416,7 @@ Patchage::refresh()
_alsa_driver->refresh();
#endif
- for (ItemList::iterator i = _canvas->items().begin(); i != _canvas->items().end(); ++i) {
- (*i)->resize();
- }
+ flush_resize();
}
}
@@ -692,3 +692,23 @@ Patchage::buffer_size_changed()
#endif
}
+
+void
+Patchage::enqueue_resize(boost::shared_ptr<FlowCanvas::Module> module)
+{
+ if (module)
+ _pending_resize.insert(module);
+}
+
+
+void
+Patchage::flush_resize()
+{
+ for (set< boost::shared_ptr<FlowCanvas::Module> >::iterator i = _pending_resize.begin();
+ i != _pending_resize.end(); ++i) {
+ (*i)->resize();
+ }
+
+ _pending_resize.clear();
+}
+