diff options
author | David Robillard <d@drobilla.net> | 2011-06-10 01:45:19 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-06-10 01:45:19 +0000 |
commit | 15611d1f9d7a6aba34b70ccaf63f564d565b55f3 (patch) | |
tree | 28b1e5ecb67fb5807d607a2e38e691884c121c56 /src/gui/PatchCanvas.cpp | |
parent | 49bd2b972d10cfab035805d7ffae77e056569c66 (diff) | |
download | ingen-15611d1f9d7a6aba34b70ccaf63f564d565b55f3.tar.gz ingen-15611d1f9d7a6aba34b70ccaf63f564d565b55f3.tar.bz2 ingen-15611d1f9d7a6aba34b70ccaf63f564d565b55f3.zip |
Avoid resizing entirely when adding a port and new size/etc is simple to compute.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3382 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui/PatchCanvas.cpp')
-rw-r--r-- | src/gui/PatchCanvas.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/gui/PatchCanvas.cpp b/src/gui/PatchCanvas.cpp index 0b5d4056..13836154 100644 --- a/src/gui/PatchCanvas.cpp +++ b/src/gui/PatchCanvas.cpp @@ -380,7 +380,7 @@ void PatchCanvas::add_node(SharedPtr<const NodeModel> nm) { SharedPtr<const PatchModel> pm = PtrCast<const PatchModel>(nm); - SharedPtr<NodeModule> module; + NodeModule* module; if (pm) { module = SubpatchModule::create(*this, pm, _human_names); } else { @@ -400,6 +400,7 @@ PatchCanvas::remove_node(SharedPtr<const NodeModel> nm) Views::iterator i = _views.find(nm); if (i != _views.end()) { + delete i->second; _views.erase(i); } } @@ -407,7 +408,7 @@ PatchCanvas::remove_node(SharedPtr<const NodeModel> nm) void PatchCanvas::add_port(SharedPtr<const PortModel> pm) { - SharedPtr<PatchPortModule> view = PatchPortModule::create(*this, pm, _human_names); + PatchPortModule* view = PatchPortModule::create(*this, pm, _human_names); _views.insert(std::make_pair(pm, view)); view->show(); } @@ -419,10 +420,11 @@ PatchCanvas::remove_port(SharedPtr<const PortModel> pm) // Port on this patch if (i != _views.end()) { + delete i->second; _views.erase(i); } else { - SharedPtr<NodeModule> module = PtrCast<NodeModule>(_views[pm->parent()]); + NodeModule* module = dynamic_cast<NodeModule*>(_views[pm->parent()]); module->delete_port_view(pm); } @@ -432,15 +434,16 @@ PatchCanvas::remove_port(SharedPtr<const PortModel> pm) FlowCanvas::Port* PatchCanvas::get_port_view(SharedPtr<PortModel> port) { - SharedPtr<FlowCanvas::Module> module = _views[port]; + FlowCanvas::Module* module = _views[port]; // Port on this patch if (module) { - return (dynamic_cast<PatchPortModule*>(module.get())) - ? *(dynamic_cast<PatchPortModule*>(module.get())->ports().begin()) - : dynamic_cast<FlowCanvas::Port*>(module.get()); + PatchPortModule* ppm = dynamic_cast<PatchPortModule*>(module); + return ppm + ? *ppm->ports().begin() + : dynamic_cast<FlowCanvas::Port*>(module); } else { - module = PtrCast<NodeModule>(_views[port->parent()]); + module = dynamic_cast<NodeModule*>(_views[port->parent()]); if (module) { for (Module::Ports::const_iterator p = module->ports().begin(); p != module->ports().end(); ++p) { |