diff options
author | David Robillard <d@drobilla.net> | 2009-05-09 23:59:01 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-05-09 23:59:01 +0000 |
commit | 5465c4af1c7b18cba31fa3d15ab1741f2613e9d4 (patch) | |
tree | a7331689f196cef1e979afa313ba60122fa64a97 /src/Patchage.cpp | |
parent | 43e673a183844709ecd41e08d97f96d9228a544c (diff) | |
download | patchage-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.cpp | 26 |
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(); +} + |