From 30e15b2f613d93eae8a4a122583dd0a16b1ab609 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 3 Jun 2011 18:14:32 +0000 Subject: Remove use of boost::enable_shared_from_this. Instead, just store a pointer to the containing canvas in Items, since it should not be possible for an Item to outlive its containing Canvas anyway. Shrinks Item memory overhead a tad and gives a minor performance boost as an added bonus. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3354 a436a847-0d15-0410-975c-d299462d15a1 --- src/gui/Connection.cpp | 2 +- src/gui/Connection.hpp | 2 +- src/gui/NodeModule.cpp | 16 ++++++++-------- src/gui/NodeModule.hpp | 10 +++++----- src/gui/PatchCanvas.cpp | 17 ++++------------- src/gui/PatchPortModule.cpp | 15 +++++++-------- src/gui/PatchPortModule.hpp | 10 +++++----- src/gui/SubpatchModule.cpp | 5 ++--- src/gui/SubpatchModule.hpp | 5 +++-- 9 files changed, 36 insertions(+), 46 deletions(-) (limited to 'src/gui') diff --git a/src/gui/Connection.cpp b/src/gui/Connection.cpp index 60380537..5d1ceed7 100644 --- a/src/gui/Connection.cpp +++ b/src/gui/Connection.cpp @@ -25,7 +25,7 @@ using namespace std; namespace Ingen { namespace GUI { -Connection::Connection(boost::shared_ptr canvas, +Connection::Connection(FlowCanvas::Canvas& canvas, boost::shared_ptr model, boost::shared_ptr src, boost::shared_ptr dst, diff --git a/src/gui/Connection.hpp b/src/gui/Connection.hpp index fb30a7c0..7bd39ff5 100644 --- a/src/gui/Connection.hpp +++ b/src/gui/Connection.hpp @@ -37,7 +37,7 @@ namespace GUI { class Connection : public FlowCanvas::Connection { public: - Connection(boost::shared_ptr canvas, + Connection(FlowCanvas::Canvas& canvas, boost::shared_ptr model, boost::shared_ptr src, boost::shared_ptr dst, diff --git a/src/gui/NodeModule.cpp b/src/gui/NodeModule.cpp index a0a147c8..2c14557a 100644 --- a/src/gui/NodeModule.cpp +++ b/src/gui/NodeModule.cpp @@ -43,9 +43,9 @@ using namespace Raul; namespace Ingen { namespace GUI { -NodeModule::NodeModule(boost::shared_ptr canvas, - SharedPtr node) - : FlowCanvas::Module(canvas, node->path().symbol(), 0, 0, true, canvas->show_port_names()) +NodeModule::NodeModule(PatchCanvas& canvas, + SharedPtr node) + : FlowCanvas::Module(canvas, node->path().symbol(), 0, 0, true, canvas.show_port_names()) , _node(node) , _gui_widget(NULL) , _gui_window(NULL) @@ -87,9 +87,9 @@ NodeModule::create_menu() } boost::shared_ptr -NodeModule::create(boost::shared_ptr canvas, - SharedPtr node, - bool human) +NodeModule::create(PatchCanvas& canvas, + SharedPtr node, + bool human) { boost::shared_ptr ret; @@ -401,9 +401,9 @@ NodeModule::property_changed(const URI& key, const Atom& value) } else if (key == uris.ingen_selected) { if (value.get_bool() != selected()) { if (value.get_bool()) - _canvas.lock()->select_item(shared_from_this()); + _canvas->select_item(shared_from_this()); else - _canvas.lock()->unselect_item(shared_from_this()); + _canvas->unselect_item(shared_from_this()); } } break; diff --git a/src/gui/NodeModule.hpp b/src/gui/NodeModule.hpp index 78a301c5..7a62b87f 100644 --- a/src/gui/NodeModule.hpp +++ b/src/gui/NodeModule.hpp @@ -48,10 +48,10 @@ class NodeMenu; class NodeModule : public FlowCanvas::Module { public: - static boost::shared_ptr create ( - boost::shared_ptr canvas, - SharedPtr node, - bool human_names); + static boost::shared_ptr create( + PatchCanvas& canvas, + SharedPtr node, + bool human_names); virtual ~NodeModule(); @@ -65,7 +65,7 @@ public: SharedPtr node() const { return _node; } protected: - NodeModule(boost::shared_ptr canvas, SharedPtr node); + NodeModule(PatchCanvas& canvas, SharedPtr node); void on_double_click(GdkEventButton* ev); diff --git a/src/gui/PatchCanvas.cpp b/src/gui/PatchCanvas.cpp index 70efb855..2ff1a1c5 100644 --- a/src/gui/PatchCanvas.cpp +++ b/src/gui/PatchCanvas.cpp @@ -275,9 +275,6 @@ PatchCanvas::build_plugin_menu() void PatchCanvas::build() { - boost::shared_ptr shared_this = - boost::dynamic_pointer_cast(shared_from_this()); - // Create modules for nodes for (Store::const_iterator i = App::instance().store()->children_begin(_patch); i != App::instance().store()->children_end(_patch); ++i) { @@ -387,15 +384,12 @@ PatchCanvas::add_plugin(SharedPtr p) void PatchCanvas::add_node(SharedPtr nm) { - boost::shared_ptr shared_this = - boost::dynamic_pointer_cast(shared_from_this()); - SharedPtr pm = PtrCast(nm); SharedPtr module; if (pm) { - module = SubpatchModule::create(shared_this, pm, _human_names); + module = SubpatchModule::create(*this, pm, _human_names); } else { - module = NodeModule::create(shared_this, nm, _human_names); + module = NodeModule::create(*this, nm, _human_names); const PluginModel* plugm = dynamic_cast(nm->plugin()); if (plugm && !plugm->icon_path().empty()) module->set_icon(App::instance().icon_from_path(plugm->icon_path(), 100)); @@ -420,10 +414,7 @@ PatchCanvas::remove_node(SharedPtr nm) void PatchCanvas::add_port(SharedPtr pm) { - boost::shared_ptr shared_this = - boost::dynamic_pointer_cast(shared_from_this()); - - SharedPtr view = PatchPortModule::create(shared_this, pm, _human_names); + SharedPtr view = PatchPortModule::create(*this, pm, _human_names); _views.insert(std::make_pair(pm, view)); add_item(view); view->show(); @@ -486,7 +477,7 @@ PatchCanvas::connection(SharedPtr cm) if (src && dst) { add_connection( boost::shared_ptr( - new GUI::Connection(shared_from_this(), cm, src, dst, + new GUI::Connection(*this, cm, src, dst, src->color() + 0x22222200))); } else { LOG(error) << "Unable to find ports to connect " diff --git a/src/gui/PatchPortModule.cpp b/src/gui/PatchPortModule.cpp index 14861069..b04cc6ba 100644 --- a/src/gui/PatchPortModule.cpp +++ b/src/gui/PatchPortModule.cpp @@ -38,12 +38,11 @@ using namespace Raul; namespace Ingen { namespace GUI { -PatchPortModule::PatchPortModule(boost::shared_ptr canvas, - SharedPtr model) +PatchPortModule::PatchPortModule(PatchCanvas& canvas, + SharedPtr model) : FlowCanvas::Module(canvas, "", 0, 0, false) // FIXME: coords? , _model(model) { - assert(canvas); assert(model); assert(PtrCast(model->parent())); @@ -55,9 +54,9 @@ PatchPortModule::PatchPortModule(boost::shared_ptr canvas, } boost::shared_ptr -PatchPortModule::create(boost::shared_ptr canvas, - SharedPtr model, - bool human) +PatchPortModule::create(PatchCanvas& canvas, + SharedPtr model, + bool human) { boost::shared_ptr ret(new PatchPortModule(canvas, model)); boost::shared_ptr port(Port::create(ret, model, human, true)); @@ -150,9 +149,9 @@ PatchPortModule::property_changed(const URI& key, const Atom& value) } else if (key == uris.ingen_selected) { if (value.get_bool() != selected()) { if (value.get_bool()) { - _canvas.lock()->select_item(shared_from_this()); + _canvas->select_item(shared_from_this()); } else { - _canvas.lock()->unselect_item(shared_from_this()); + _canvas->unselect_item(shared_from_this()); } } } diff --git a/src/gui/PatchPortModule.hpp b/src/gui/PatchPortModule.hpp index 7cdc3653..9334c48f 100644 --- a/src/gui/PatchPortModule.hpp +++ b/src/gui/PatchPortModule.hpp @@ -50,9 +50,9 @@ class PatchPortModule : public FlowCanvas::Module { public: static boost::shared_ptr create( - boost::shared_ptr canvas, - SharedPtr model, - bool human); + PatchCanvas& canvas, + SharedPtr model, + bool human); virtual void store_location(); void show_human_names(bool b); @@ -62,8 +62,8 @@ public: SharedPtr port() const { return _model; } protected: - PatchPortModule(boost::shared_ptr canvas, - SharedPtr model); + PatchPortModule(PatchCanvas& canvas, + SharedPtr model); void create_menu(); void set_selected(bool b); diff --git a/src/gui/SubpatchModule.cpp b/src/gui/SubpatchModule.cpp index f26128af..8481d185 100644 --- a/src/gui/SubpatchModule.cpp +++ b/src/gui/SubpatchModule.cpp @@ -30,12 +30,11 @@ namespace Ingen { namespace GUI { -SubpatchModule::SubpatchModule(boost::shared_ptr canvas, - SharedPtr patch) +SubpatchModule::SubpatchModule(PatchCanvas& canvas, + SharedPtr patch) : NodeModule(canvas, patch) , _patch(patch) { - assert(canvas); assert(patch); } diff --git a/src/gui/SubpatchModule.hpp b/src/gui/SubpatchModule.hpp index 7eba97a2..b58c78fa 100644 --- a/src/gui/SubpatchModule.hpp +++ b/src/gui/SubpatchModule.hpp @@ -46,8 +46,9 @@ class NodeControlWindow; class SubpatchModule : public NodeModule { public: - SubpatchModule(boost::shared_ptr canvas, - SharedPtr controller); + SubpatchModule(PatchCanvas& canvas, + SharedPtr controller); + virtual ~SubpatchModule() {} void on_double_click(GdkEventButton* ev); -- cgit v1.2.1