diff options
-rw-r--r-- | source/blender/editors/space_node/node_draw.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index 69d66b3fa7a..1ce1032cf97 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -2418,9 +2418,11 @@ static void node_update_nodetree(const bContext &C, bNode &node = *nodes[i]; uiBlock &block = *blocks[i]; if (node.type == NODE_FRAME) { - frame_node_prepare_for_draw(node, nodes); + /* Frame sizes are calculated after all other nodes have calculating their #totr. */ + continue; } - else if (node.type == NODE_REROUTE) { + + if (node.type == NODE_REROUTE) { reroute_node_prepare_for_draw(node); } else { @@ -2432,6 +2434,13 @@ static void node_update_nodetree(const bContext &C, } } } + + /* Now calculate the size of frame nodes, which can depend on the size of other nodes. */ + for (const int i : nodes.index_range()) { + if (nodes[i]->type == NODE_FRAME) { + frame_node_prepare_for_draw(*nodes[i], nodes); + } + } } static void frame_node_draw_label(const bNodeTree &ntree, |