From 5c70f5a7f71337bfc54b3d89c7d81a973d9c3657 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Mon, 15 Nov 2021 13:32:44 +0100 Subject: progress --- .../blender/blenkernel/intern/node_tree_update.cc | 62 ++++++++++++++++------ 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/source/blender/blenkernel/intern/node_tree_update.cc b/source/blender/blenkernel/intern/node_tree_update.cc index 37943647cf3..b1103e3175b 100644 --- a/source/blender/blenkernel/intern/node_tree_update.cc +++ b/source/blender/blenkernel/intern/node_tree_update.cc @@ -21,6 +21,46 @@ #include "BKE_node.h" #include "BKE_node_tree_update.h" +namespace blender::bke { + +class NodeTreeMainUpdater { + private: + Main *bmain_; + NodeTreeUpdateExtraParams *params_; + + public: + NodeTreeMainUpdater(Main *bmain, NodeTreeUpdateExtraParams *params) + : bmain_(bmain), params_(params) + { + } + + void update() + { + FOREACH_NODETREE_BEGIN (bmain_, ntree, id) { + ntreeUpdateTree(bmain_, ntree); + if (params_) { + if (params_->tree_changed_fn) { + params_->tree_changed_fn(id, ntree, params_->user_data); + } + if (params_->tree_interface_changed_fn) { + params_->tree_interface_changed_fn(id, ntree, params_->user_data); + } + if (params_->tree_output_changed_fn) { + params_->tree_output_changed_fn(id, ntree, params_->user_data); + } + } + } + FOREACH_NODETREE_END; + } + + void update_rooted(Span root_trees) + { + this->update(); + } +}; + +} // namespace blender::bke + void BKE_node_tree_update_tag(bNodeTree *ntree) { ntree->changed_flag |= NTREE_CHANGED_ANY; @@ -87,26 +127,14 @@ void BKE_node_tree_update_tag_interface(bNodeTree *ntree) void BKE_node_tree_update_main(Main *bmain, NodeTreeUpdateExtraParams *params) { - FOREACH_NODETREE_BEGIN (bmain, ntree, id) { - ntreeUpdateTree(bmain, ntree); - if (params) { - if (params->tree_changed_fn) { - params->tree_changed_fn(id, ntree, params->user_data); - } - if (params->tree_interface_changed_fn) { - params->tree_interface_changed_fn(id, ntree, params->user_data); - } - if (params->tree_output_changed_fn) { - params->tree_output_changed_fn(id, ntree, params->user_data); - } - } - } - FOREACH_NODETREE_END; + blender::bke::NodeTreeMainUpdater updater{bmain, params}; + updater.update(); } void BKE_node_tree_update_main_rooted(Main *bmain, - bNodeTree *UNUSED(ntree), + bNodeTree *ntree, NodeTreeUpdateExtraParams *params) { - BKE_node_tree_update_main(bmain, params); + blender::bke::NodeTreeMainUpdater updater{bmain, params}; + updater.update_rooted({ntree}); } -- cgit v1.2.3