Nodes: rename multi_input_socket_index to multi_input_sort_id

For historical reasons, the `multi_input_socket_index` was actually reversed
(large index comes first). This patch renames it to `multi_input_sort_id` and
adds a comment. This new name makes it less confusing that the id is reversed.

Pull Request: https://projects.blender.org/blender/blender/pulls/119652
This commit is contained in:
Jacques Lucke 2024-03-19 13:42:09 +01:00
parent 462437de20
commit 3ad4ea81d1
10 changed files with 32 additions and 28 deletions

View File

@ -2900,7 +2900,7 @@ bNodeLink *nodeAddLink(
}
if (link != nullptr && link->tosock->is_multi_input()) {
link->multi_input_socket_index = node_count_links(ntree, link->tosock) - 1;
link->multi_input_sort_id = node_count_links(ntree, link->tosock) - 1;
}
return link;
@ -2966,10 +2966,10 @@ static void adjust_multi_input_indices_after_removed_link(bNodeTree *ntree,
LISTBASE_FOREACH (bNodeLink *, link, &ntree->links) {
/* We only need to adjust those with a greater index, because the others will have the same
* index. */
if (link->tosock != sock || link->multi_input_socket_index <= deleted_index) {
if (link->tosock != sock || link->multi_input_sort_id <= deleted_index) {
continue;
}
link->multi_input_socket_index -= 1;
link->multi_input_sort_id -= 1;
}
}
@ -2995,7 +2995,7 @@ void nodeInternalRelink(bNodeTree *ntree, bNode *node)
if (fromlink == nullptr) {
if (link->tosock->is_multi_input()) {
blender::bke::adjust_multi_input_indices_after_removed_link(
ntree, link->tosock, link->multi_input_socket_index);
ntree, link->tosock, link->multi_input_sort_id);
}
nodeRemLink(ntree, link);
continue;
@ -3008,7 +3008,7 @@ void nodeInternalRelink(bNodeTree *ntree, bNode *node)
link_to_compare->tosock == link->tosock)
{
blender::bke::adjust_multi_input_indices_after_removed_link(
ntree, link_to_compare->tosock, link_to_compare->multi_input_socket_index);
ntree, link_to_compare->tosock, link_to_compare->multi_input_sort_id);
duplicate_links_to_remove.append_non_duplicates(link_to_compare);
}
}
@ -3395,7 +3395,7 @@ void nodeUnlinkNode(bNodeTree *ntree, bNode *node)
/* Only bother adjusting if the socket is not on the node we're deleting. */
if (link->tonode != node && link->tosock->is_multi_input()) {
adjust_multi_input_indices_after_removed_link(
ntree, link->tosock, link->multi_input_socket_index);
ntree, link->tosock, link->multi_input_sort_id);
}
LISTBASE_FOREACH (const bNodeSocket *, sock, lb) {
if (link->fromsock == sock || link->tosock == sock) {

View File

@ -135,7 +135,7 @@ static void update_directly_linked_links_and_sockets(const bNodeTree &ntree)
std::sort(socket->runtime->directly_linked_links.begin(),
socket->runtime->directly_linked_links.end(),
[&](const bNodeLink *a, const bNodeLink *b) {
return a->multi_input_socket_index > b->multi_input_socket_index;
return a->multi_input_sort_id > b->multi_input_sort_id;
});
}
}

View File

@ -616,9 +616,9 @@ class NodeTreeMainUpdater {
struct InternalLink {
bNodeSocket *from;
bNodeSocket *to;
int multi_input_socket_index = 0;
int multi_input_sort_id = 0;
BLI_STRUCT_EQUALITY_OPERATORS_3(InternalLink, from, to, multi_input_socket_index);
BLI_STRUCT_EQUALITY_OPERATORS_3(InternalLink, from, to, multi_input_sort_id);
};
const bNodeLink *first_non_dangling_link(const bNodeTree &ntree,
@ -660,7 +660,7 @@ class NodeTreeMainUpdater {
const Span<const bNodeLink *> connected_links = input_socket->directly_linked_links();
const bNodeLink *connected_link = first_non_dangling_link(ntree, connected_links);
const int index = connected_link ? connected_link->multi_input_socket_index :
const int index = connected_link ? connected_link->multi_input_sort_id :
std::max<int>(0, connected_links.size() - 1);
expected_internal_links.append(InternalLink{const_cast<bNodeSocket *>(input_socket),
const_cast<bNodeSocket *>(output_socket),
@ -677,8 +677,7 @@ class NodeTreeMainUpdater {
node->runtime->internal_links.begin(),
node->runtime->internal_links.end(),
[&](const bNodeLink &link) {
const InternalLink internal_link{
link.fromsock, link.tosock, link.multi_input_socket_index};
const InternalLink internal_link{link.fromsock, link.tosock, link.multi_input_sort_id};
return expected_internal_links.as_span().contains(internal_link);
});
@ -736,7 +735,7 @@ class NodeTreeMainUpdater {
link.fromsock = internal_link.from;
link.tonode = &node;
link.tosock = internal_link.to;
link.multi_input_socket_index = internal_link.multi_input_socket_index;
link.multi_input_sort_id = internal_link.multi_input_sort_id;
link.flag |= NODE_LINK_VALID;
node.runtime->internal_links.append(link);
}

View File

@ -156,7 +156,7 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator * /*op*/)
new_link.tosock = socket_map.lookup(link->tosock);
new_link.fromnode = node_map.lookup(link->fromnode);
new_link.fromsock = socket_map.lookup(link->fromsock);
new_link.multi_input_socket_index = link->multi_input_socket_index;
new_link.multi_input_sort_id = link->multi_input_sort_id;
clipboard.links.append(new_link);
}
}
@ -290,7 +290,7 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op)
socket_map.lookup(link.fromsock),
node_map.lookup(tonode),
socket_map.lookup(link.tosock));
new_link->multi_input_socket_index = link.multi_input_socket_index;
new_link->multi_input_sort_id = link.multi_input_sort_id;
}
}

View File

@ -1726,7 +1726,7 @@ static float2 socket_link_connection_location(const bNode &node,
const float2 socket_location = socket.runtime->location;
if (socket.is_multi_input() && socket.is_input() && !(node.flag & NODE_HIDDEN)) {
return node_link_calculate_multi_input_position(
socket_location, link.multi_input_socket_index, socket.runtime->total_inputs);
socket_location, link.multi_input_sort_id, socket.runtime->total_inputs);
}
return socket_location;
}

View File

@ -1421,7 +1421,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
newlink->tosock = socket_map.lookup(link->tosock);
if (link->tosock->flag & SOCK_MULTI_INPUT) {
newlink->multi_input_socket_index = link->multi_input_socket_index;
newlink->multi_input_sort_id = link->multi_input_sort_id;
}
if (link->fromnode && (link->fromnode->flag & NODE_SELECT)) {

View File

@ -288,7 +288,7 @@ static void sort_multi_input_socket_links_with_drag(bNodeSocket &socket,
Vector<LinkAndPosition, 8> links;
for (bNodeLink *link : socket.directly_linked_links()) {
const float2 location = node_link_calculate_multi_input_position(
socket_location, link->multi_input_socket_index, link->tosock->runtime->total_inputs);
socket_location, link->multi_input_sort_id, link->tosock->runtime->total_inputs);
links.append({link, location});
};
@ -299,7 +299,7 @@ static void sort_multi_input_socket_links_with_drag(bNodeSocket &socket,
});
for (const int i : links.index_range()) {
links[i].link->multi_input_socket_index = i;
links[i].link->multi_input_sort_id = i;
}
}
@ -311,11 +311,11 @@ void update_multi_input_indices_for_removed_links(bNode &node)
}
Vector<bNodeLink *, 8> links = socket->directly_linked_links();
std::sort(links.begin(), links.end(), [](const bNodeLink *a, const bNodeLink *b) {
return a->multi_input_socket_index < b->multi_input_socket_index;
return a->multi_input_sort_id < b->multi_input_sort_id;
});
for (const int i : links.index_range()) {
links[i]->multi_input_socket_index = i;
links[i]->multi_input_sort_id = i;
}
}
}
@ -907,8 +907,8 @@ static void displace_links(bNodeTree *ntree, const bNode *node, bNodeLink *inser
return;
}
}
const int multi_input_index = node_socket_count_links(*ntree, *replacement_socket) - 1;
displaced_link->multi_input_socket_index = multi_input_index;
const int multi_input_sort_id = node_socket_count_links(*ntree, *replacement_socket) - 1;
displaced_link->multi_input_sort_id = multi_input_sort_id;
}
BKE_ntree_update_tag_link_changed(ntree);
@ -1127,8 +1127,7 @@ static void node_link_find_socket(bContext &C, wmOperator &op, const float2 &cur
link.tosock = tsock;
nldrag.last_node_hovered_while_dragging_a_link = &tnode;
if (existing_link_connected_to_fromsock) {
link.multi_input_socket_index =
existing_link_connected_to_fromsock->multi_input_socket_index;
link.multi_input_sort_id = existing_link_connected_to_fromsock->multi_input_sort_id;
continue;
}
if (tsock && tsock->is_multi_input()) {

View File

@ -589,7 +589,13 @@ typedef struct bNodeLink {
bNodeSocket *fromsock, *tosock;
int flag;
int multi_input_socket_index;
/**
* Determines the order in which links are connected to a multi-input socket.
* For historical reasons, larger ids come before lower ids.
* Usually, this should not be accessed directly. One can instead use e.g.
* `socket.directly_linked_links()` to get the links in the correct order.
*/
int multi_input_sort_id;
#ifdef __cplusplus
bool is_muted() const;

View File

@ -194,6 +194,7 @@ DNA_STRUCT_RENAME_ELEM(View3D, ob_centre_cursor, ob_center_cursor)
DNA_STRUCT_RENAME_ELEM(bArmature, collections, collections_legacy)
DNA_STRUCT_RENAME_ELEM(bGPDstroke, gradient_f, hardness)
DNA_STRUCT_RENAME_ELEM(bGPDstroke, gradient_s, aspect_ratio)
DNA_STRUCT_RENAME_ELEM(bNodeLink, multi_input_socket_index, multi_input_sort_id)
DNA_STRUCT_RENAME_ELEM(bNodeTree, inputs, inputs_legacy)
DNA_STRUCT_RENAME_ELEM(bNodeTree, outputs, outputs_legacy)
DNA_STRUCT_RENAME_ELEM(bPoseChannel, curveInX, curve_in_x)

View File

@ -1295,7 +1295,7 @@ static void rna_NodeLink_swap_multi_input_sort_id(
return;
}
std::swap(self->multi_input_socket_index, other->multi_input_socket_index);
std::swap(self->multi_input_sort_id, other->multi_input_sort_id);
bNodeTree *ntree = reinterpret_cast<bNodeTree *>(id);
BKE_ntree_update_tag_link_changed(ntree);
@ -10332,7 +10332,6 @@ static void rna_def_node_link(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Is Hidden", "Link is hidden due to invisible sockets");
prop = RNA_def_property(srna, "multi_input_sort_id", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, nullptr, "multi_input_socket_index");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(
prop,