Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Schempp <fabianschempp@googlemail.com>2021-03-10 16:57:57 +0300
committerFabian Schempp <fabianschempp@googlemail.com>2021-03-10 16:57:57 +0300
commit576c392241bde1d6497b00490e97e104ac887132 (patch)
tree97a7455970cb104b5571ed37386ca3fa22dad0ad /source/blender/nodes/intern
parent5991c5c9289792e8f9d14375b254ba81306680ac (diff)
Nodes: Sortable Multi Input Sockets
This Patch removes the auto sorting from Multi-Input Sockets and allows the links to be sorted by drag and drop instead. As a minor related change, it fixes the drawing of the mute line to connect to the first input instead of the socket's center.
Diffstat (limited to 'source/blender/nodes/intern')
-rw-r--r--source/blender/nodes/intern/node_tree_ref.cc40
1 files changed, 29 insertions, 11 deletions
diff --git a/source/blender/nodes/intern/node_tree_ref.cc b/source/blender/nodes/intern/node_tree_ref.cc
index 0ea2538d6f1..775e16d0a29 100644
--- a/source/blender/nodes/intern/node_tree_ref.cc
+++ b/source/blender/nodes/intern/node_tree_ref.cc
@@ -88,17 +88,35 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree)
link.blink_ = blink;
links_.append(&link);
+
from_socket.directly_linked_sockets_.append(&to_socket);
- to_socket.directly_linked_sockets_.append(&from_socket);
from_socket.directly_linked_links_.append(&link);
to_socket.directly_linked_links_.append(&link);
}
- for (OutputSocketRef *socket : output_sockets_) {
+ for (InputSocketRef *input_socket : input_sockets_) {
+ if (input_socket->is_multi_input_socket()) {
+ std::sort(input_socket->directly_linked_links_.begin(),
+ input_socket->directly_linked_links_.end(),
+ [&](const LinkRef *a, const LinkRef *b) -> bool {
+ int index_a = a->blink()->multi_input_socket_index;
+ int index_b = b->blink()->multi_input_socket_index;
+ return index_a > index_b;
+ });
+ }
+ }
+
+ for (InputSocketRef *input_socket : input_sockets_) {
+ for (const LinkRef *link : input_socket->directly_linked_links()) {
+ input_socket->directly_linked_sockets_.append(link->from_);
+ }
+ }
+
+ for (InputSocketRef *socket : input_sockets_) {
if (!socket->node_->is_reroute_node()) {
- this->find_targets_skipping_reroutes(*socket, socket->linked_sockets_);
- for (SocketRef *target : socket->linked_sockets_) {
- target->linked_sockets_.append(socket);
+ this->find_origins_skipping_reroutes(*socket, socket->linked_sockets_);
+ for (SocketRef *origin : socket->linked_sockets_) {
+ origin->linked_sockets_.append(socket);
}
}
}
@@ -155,15 +173,15 @@ OutputSocketRef &NodeTreeRef::find_output_socket(Map<bNode *, NodeRef *> &node_m
return *node->outputs_[0];
}
-void NodeTreeRef::find_targets_skipping_reroutes(OutputSocketRef &socket,
- Vector<SocketRef *> &r_targets)
+void NodeTreeRef::find_origins_skipping_reroutes(InputSocketRef &socket,
+ Vector<SocketRef *> &r_origins)
{
- for (SocketRef *direct_target : socket.directly_linked_sockets_) {
- if (direct_target->node_->is_reroute_node()) {
- this->find_targets_skipping_reroutes(*direct_target->node_->outputs_[0], r_targets);
+ for (SocketRef *direct_origin : socket.directly_linked_sockets_) {
+ if (direct_origin->node_->is_reroute_node()) {
+ this->find_origins_skipping_reroutes(*direct_origin->node_->inputs_[0], r_origins);
}
else {
- r_targets.append_non_duplicates(direct_target);
+ r_origins.append_non_duplicates(direct_origin);
}
}
}