Cleanup: Simplify arguments to deselect all nodes function
Take the node tree as an argument directly instead of retrieving it from the editor struct. Then use the utility function in two more places.
This commit is contained in:
parent
d0348bcb8a
commit
8bbf823716
|
@ -247,7 +247,7 @@ static void add_node_search_exec_fn(bContext *C, void *arg1, void *arg2)
|
|||
return;
|
||||
}
|
||||
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
bNode *new_node = nodeAddNode(C, &node_tree, item->identifier.c_str());
|
||||
BLI_assert(new_node != nullptr);
|
||||
|
||||
|
|
|
@ -349,17 +349,18 @@ static void link_drag_search_exec_fn(bContext *C, void *arg1, void *arg2)
|
|||
{
|
||||
Main &bmain = *CTX_data_main(C);
|
||||
SpaceNode &snode = *CTX_wm_space_node(C);
|
||||
bNodeTree &node_tree = *snode.edittree;
|
||||
LinkDragSearchStorage &storage = *static_cast<LinkDragSearchStorage *>(arg1);
|
||||
SocketLinkOperation *item = static_cast<SocketLinkOperation *>(arg2);
|
||||
if (item == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
|
||||
Vector<bNode *> new_nodes;
|
||||
nodes::LinkSearchOpParams params{
|
||||
*C, *snode.edittree, storage.from_node, storage.from_socket, new_nodes};
|
||||
*C, node_tree, storage.from_node, storage.from_socket, new_nodes};
|
||||
item->fn(params);
|
||||
if (new_nodes.is_empty()) {
|
||||
return;
|
||||
|
@ -376,11 +377,11 @@ static void link_drag_search_exec_fn(bContext *C, void *arg1, void *arg2)
|
|||
}
|
||||
|
||||
nodeSetSelected(new_node, true);
|
||||
nodeSetActive(snode.edittree, new_node);
|
||||
nodeSetActive(&node_tree, new_node);
|
||||
|
||||
/* Ideally it would be possible to tag the node tree in some way so it updates only after the
|
||||
* translate operation is finished, but normally moving nodes around doesn't cause updates. */
|
||||
ED_node_tree_propagate_change(C, &bmain, snode.edittree);
|
||||
ED_node_tree_propagate_change(C, &bmain, &node_tree);
|
||||
|
||||
/* Start translation operator with the new node. */
|
||||
wmOperatorType *ot = WM_operatortype_find("NODE_OT_translate_attach_remove_on_cancel", true);
|
||||
|
|
|
@ -63,20 +63,21 @@ bNode *add_node(const bContext &C, const StringRef idname, const float2 &locatio
|
|||
{
|
||||
SpaceNode &snode = *CTX_wm_space_node(&C);
|
||||
Main &bmain = *CTX_data_main(&C);
|
||||
bNodeTree &node_tree = *snode.edittree;
|
||||
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
|
||||
const std::string idname_str = idname;
|
||||
|
||||
bNode *node = nodeAddNode(&C, snode.edittree, idname_str.c_str());
|
||||
bNode *node = nodeAddNode(&C, &node_tree, idname_str.c_str());
|
||||
BLI_assert(node && node->typeinfo);
|
||||
|
||||
position_node_based_on_mouse(*node, location);
|
||||
|
||||
nodeSetSelected(node, true);
|
||||
ED_node_set_active(&bmain, &snode, snode.edittree, node, nullptr);
|
||||
ED_node_set_active(&bmain, &snode, &node_tree, node, nullptr);
|
||||
|
||||
ED_node_tree_propagate_change(&C, &bmain, snode.edittree);
|
||||
ED_node_tree_propagate_change(&C, &bmain, &node_tree);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
@ -84,18 +85,19 @@ bNode *add_static_node(const bContext &C, int type, const float2 &location)
|
|||
{
|
||||
SpaceNode &snode = *CTX_wm_space_node(&C);
|
||||
Main &bmain = *CTX_data_main(&C);
|
||||
bNodeTree &node_tree = *snode.edittree;
|
||||
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
|
||||
bNode *node = nodeAddStaticNode(&C, snode.edittree, type);
|
||||
bNode *node = nodeAddStaticNode(&C, &node_tree, type);
|
||||
BLI_assert(node && node->typeinfo);
|
||||
|
||||
position_node_based_on_mouse(*node, location);
|
||||
|
||||
nodeSetSelected(node, true);
|
||||
ED_node_set_active(&bmain, &snode, snode.edittree, node, nullptr);
|
||||
ED_node_set_active(&bmain, &snode, &node_tree, node, nullptr);
|
||||
|
||||
ED_node_tree_propagate_change(&C, &bmain, snode.edittree);
|
||||
ED_node_tree_propagate_change(&C, &bmain, &node_tree);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
@ -152,11 +154,12 @@ static int add_reroute_exec(bContext *C, wmOperator *op)
|
|||
return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
|
||||
node_deselect_all(ntree);
|
||||
|
||||
ntree.ensure_topology_cache();
|
||||
const Vector<bNode *> frame_nodes = ntree.nodes_by_type("NodeFrame");
|
||||
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
node_deselect_all(snode);
|
||||
|
||||
/* All link "cuts" that start at a particular output socket. Deduplicating new reroutes per
|
||||
* output socket is useful because it allows reusing reroutes for connected intersections.
|
||||
|
|
|
@ -2335,7 +2335,7 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op)
|
|||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
/* deselect old nodes */
|
||||
node_deselect_all(*snode);
|
||||
node_deselect_all(*ntree);
|
||||
|
||||
/* calculate "barycenter" for placing on mouse cursor */
|
||||
float2 center = {0.0f, 0.0f};
|
||||
|
|
|
@ -441,10 +441,7 @@ void NODE_OT_group_ungroup(wmOperatorType *ot)
|
|||
static bool node_group_separate_selected(
|
||||
Main &bmain, bNodeTree &ntree, bNodeTree &ngroup, const float2 &offset, const bool make_copy)
|
||||
{
|
||||
/* deselect all nodes in the target tree */
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
nodeSetSelected(node, false);
|
||||
}
|
||||
node_deselect_all(ntree);
|
||||
|
||||
ListBase anim_basepaths = {nullptr, nullptr};
|
||||
|
||||
|
@ -809,10 +806,7 @@ static void node_group_make_insert_selected(const bContext &C,
|
|||
static const float offsetx = 200;
|
||||
static const float offsety = 0.0f;
|
||||
|
||||
/* deselect all nodes in the target tree */
|
||||
for (bNode *node : ngroup->all_nodes()) {
|
||||
nodeSetSelected(node, false);
|
||||
}
|
||||
node_deselect_all(*ngroup);
|
||||
|
||||
/* auto-add interface for "solo" nodes */
|
||||
const bool expose_visible = nodes_to_move.size() == 1;
|
||||
|
|
|
@ -182,11 +182,11 @@ void node_keymap(wmKeyConfig *keyconf);
|
|||
rctf node_frame_rect_inside(const bNode &node);
|
||||
bool node_or_socket_isect_event(const bContext &C, const wmEvent &event);
|
||||
|
||||
void node_deselect_all(SpaceNode &snode);
|
||||
void node_deselect_all(bNodeTree &node_tree);
|
||||
void node_socket_select(bNode *node, bNodeSocket &sock);
|
||||
void node_socket_deselect(bNode *node, bNodeSocket &sock, bool deselect_node);
|
||||
void node_deselect_all_input_sockets(SpaceNode &snode, bool deselect_nodes);
|
||||
void node_deselect_all_output_sockets(SpaceNode &snode, bool deselect_nodes);
|
||||
void node_deselect_all_input_sockets(bNodeTree &node_tree, bool deselect_nodes);
|
||||
void node_deselect_all_output_sockets(bNodeTree &node_tree, bool deselect_nodes);
|
||||
void node_select_single(bContext &C, bNode &node);
|
||||
|
||||
void NODE_OT_select(wmOperatorType *ot);
|
||||
|
|
|
@ -1261,6 +1261,7 @@ static int node_make_link_exec(bContext *C, wmOperator *op)
|
|||
{
|
||||
Main &bmain = *CTX_data_main(C);
|
||||
SpaceNode &snode = *CTX_wm_space_node(C);
|
||||
bNodeTree &node_tree = *snode.edittree;
|
||||
const bool replace = RNA_boolean_get(op->ptr, "replace");
|
||||
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), &bmain);
|
||||
|
@ -1268,10 +1269,10 @@ static int node_make_link_exec(bContext *C, wmOperator *op)
|
|||
snode_autoconnect(snode, true, replace);
|
||||
|
||||
/* deselect sockets after linking */
|
||||
node_deselect_all_input_sockets(snode, false);
|
||||
node_deselect_all_output_sockets(snode, false);
|
||||
node_deselect_all_input_sockets(node_tree, false);
|
||||
node_deselect_all_output_sockets(node_tree, false);
|
||||
|
||||
ED_node_tree_propagate_change(C, &bmain, snode.edittree);
|
||||
ED_node_tree_propagate_change(C, &bmain, &node_tree);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
|
|
@ -246,21 +246,21 @@ static void node_socket_toggle(bNode *node, bNodeSocket &sock, bool deselect_nod
|
|||
}
|
||||
}
|
||||
|
||||
void node_deselect_all(SpaceNode &snode)
|
||||
void node_deselect_all(bNodeTree &node_tree)
|
||||
{
|
||||
for (bNode *node : snode.edittree->all_nodes()) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
nodeSetSelected(node, false);
|
||||
}
|
||||
}
|
||||
|
||||
void node_deselect_all_input_sockets(SpaceNode &snode, const bool deselect_nodes)
|
||||
void node_deselect_all_input_sockets(bNodeTree &node_tree, const bool deselect_nodes)
|
||||
{
|
||||
/* XXX not calling node_socket_deselect here each time, because this does iteration
|
||||
* over all node sockets internally to check if the node stays selected.
|
||||
* We can do that more efficiently here.
|
||||
*/
|
||||
|
||||
for (bNode *node : snode.edittree->all_nodes()) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
bool sel = false;
|
||||
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
|
||||
|
@ -283,14 +283,14 @@ void node_deselect_all_input_sockets(SpaceNode &snode, const bool deselect_nodes
|
|||
}
|
||||
}
|
||||
|
||||
void node_deselect_all_output_sockets(SpaceNode &snode, const bool deselect_nodes)
|
||||
void node_deselect_all_output_sockets(bNodeTree &node_tree, const bool deselect_nodes)
|
||||
{
|
||||
/* XXX not calling node_socket_deselect here each time, because this does iteration
|
||||
* over all node sockets internally to check if the node stays selected.
|
||||
* We can do that more efficiently here.
|
||||
*/
|
||||
|
||||
for (bNode *node : snode.edittree->all_nodes()) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
bool sel = false;
|
||||
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) {
|
||||
|
@ -422,7 +422,7 @@ static int node_select_grouped_exec(bContext *C, wmOperator *op)
|
|||
const int type = RNA_enum_get(op->ptr, "type");
|
||||
|
||||
if (!extend) {
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
}
|
||||
nodeSetSelected(node_act, true);
|
||||
|
||||
|
@ -527,11 +527,12 @@ static bool node_mouse_select(bContext *C,
|
|||
{
|
||||
Main &bmain = *CTX_data_main(C);
|
||||
SpaceNode &snode = *CTX_wm_space_node(C);
|
||||
bNodeTree &node_tree = *snode.edittree;
|
||||
ARegion ®ion = *CTX_wm_region(C);
|
||||
const Object *ob = CTX_data_active_object(C);
|
||||
const Scene *scene = CTX_data_scene(C);
|
||||
const wmWindowManager *wm = CTX_wm_manager(C);
|
||||
bNode *node, *tnode;
|
||||
bNode *node;
|
||||
bNodeSocket *sock = nullptr;
|
||||
bNodeSocket *tsock;
|
||||
|
||||
|
@ -582,7 +583,7 @@ static bool node_mouse_select(bContext *C,
|
|||
}
|
||||
}
|
||||
if (!extend) {
|
||||
for (tnode = (bNode *)snode.edittree->nodes.first; tnode; tnode = tnode->next) {
|
||||
for (bNode *tnode : node_tree.all_nodes()) {
|
||||
if (tnode == node) {
|
||||
continue;
|
||||
}
|
||||
|
@ -601,7 +602,7 @@ static bool node_mouse_select(bContext *C,
|
|||
if (!sock) {
|
||||
|
||||
/* find the closest visible node */
|
||||
node = node_under_mouse_select(*snode.edittree, cursor);
|
||||
node = node_under_mouse_select(node_tree, cursor);
|
||||
found = (node != nullptr);
|
||||
node_was_selected = node && (node->flag & SELECT);
|
||||
|
||||
|
@ -611,7 +612,7 @@ static bool node_mouse_select(bContext *C,
|
|||
}
|
||||
else if (found || params->deselect_all) {
|
||||
/* Deselect everything. */
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
@ -669,7 +670,7 @@ static bool node_mouse_select(bContext *C,
|
|||
viewer_path::activate_geometry_node(bmain, snode, *node);
|
||||
}
|
||||
ED_node_set_active_viewer_key(&snode);
|
||||
node_sort(*snode.edittree);
|
||||
node_sort(node_tree);
|
||||
if ((active_texture_changed && has_workbench_in_texture_color(wm, scene, ob)) ||
|
||||
viewer_node_changed) {
|
||||
DEG_id_tag_update(&snode.edittree->id, ID_RECALC_COPY_ON_WRITE);
|
||||
|
@ -769,7 +770,7 @@ static int node_box_select_exec(bContext *C, wmOperator *op)
|
|||
const eSelectOp sel_op = (eSelectOp)RNA_enum_get(op->ptr, "mode");
|
||||
const bool select = (sel_op != SEL_OP_SUB);
|
||||
if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
}
|
||||
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
|
@ -855,7 +856,7 @@ static int node_circleselect_exec(bContext *C, wmOperator *op)
|
|||
{
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
bNode *node;
|
||||
bNodeTree &node_tree = *snode->edittree;
|
||||
|
||||
int x, y, radius;
|
||||
float2 offset;
|
||||
|
@ -867,7 +868,7 @@ static int node_circleselect_exec(bContext *C, wmOperator *op)
|
|||
WM_gesture_is_modal_first((const wmGesture *)op->customdata));
|
||||
const bool select = (sel_op != SEL_OP_SUB);
|
||||
if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
|
||||
node_deselect_all(*snode);
|
||||
node_deselect_all(node_tree);
|
||||
}
|
||||
|
||||
/* get operator properties */
|
||||
|
@ -877,7 +878,7 @@ static int node_circleselect_exec(bContext *C, wmOperator *op)
|
|||
|
||||
UI_view2d_region_to_view(®ion->v2d, x, y, &offset.x, &offset.y);
|
||||
|
||||
for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
switch (node->type) {
|
||||
case NODE_FRAME: {
|
||||
/* Frame nodes are selectable by their borders (including their whole rect - as for other
|
||||
|
@ -950,7 +951,7 @@ static bool do_lasso_select_node(bContext *C,
|
|||
eSelectOp sel_op)
|
||||
{
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
bNode *node;
|
||||
bNodeTree &node_tree = *snode->edittree;
|
||||
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
|
||||
|
@ -959,7 +960,7 @@ static bool do_lasso_select_node(bContext *C,
|
|||
|
||||
const bool select = (sel_op != SEL_OP_SUB);
|
||||
if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
|
||||
node_deselect_all(*snode);
|
||||
node_deselect_all(node_tree);
|
||||
changed = true;
|
||||
}
|
||||
|
||||
|
@ -967,8 +968,7 @@ static bool do_lasso_select_node(bContext *C,
|
|||
BLI_lasso_boundbox(&rect, mcoords, mcoords_len);
|
||||
|
||||
/* do actual selection */
|
||||
for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) {
|
||||
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
if (select && (node->flag & NODE_SELECT)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1098,7 +1098,7 @@ static int node_select_all_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
break;
|
||||
case SEL_DESELECT:
|
||||
node_deselect_all(snode);
|
||||
node_deselect_all(node_tree);
|
||||
break;
|
||||
case SEL_INVERT:
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
|
@ -1107,7 +1107,7 @@ static int node_select_all_exec(bContext *C, wmOperator *op)
|
|||
break;
|
||||
}
|
||||
|
||||
node_sort(*snode.edittree);
|
||||
node_sort(node_tree);
|
||||
|
||||
WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr);
|
||||
return OPERATOR_FINISHED;
|
||||
|
|
Loading…
Reference in New Issue