diff options
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r-- | source/blender/editors/space_node/node_draw.cc | 10 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_edit.cc | 11 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_intern.hh | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_relationships.cc | 36 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_select.cc | 111 |
5 files changed, 80 insertions, 90 deletions
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index a68d34f7682..ee6dbc15c15 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -232,14 +232,14 @@ static bool compare_nodes(const bNode *a, const bNode *b) return false; } -void node_sort(bNodeTree *ntree) +void node_sort(bNodeTree &ntree) { /* Merge sort is the algorithm of choice here. */ - int totnodes = BLI_listbase_count(&ntree->nodes); + int totnodes = BLI_listbase_count(&ntree.nodes); int k = 1; while (k < totnodes) { - bNode *first_a = (bNode *)ntree->nodes.first; + bNode *first_a = (bNode *)ntree.nodes.first; bNode *first_b = first_a; do { @@ -266,8 +266,8 @@ void node_sort(bNodeTree *ntree) bNode *tmp = node_b; node_b = node_b->next; b++; - BLI_remlink(&ntree->nodes, tmp); - BLI_insertlinkbefore(&ntree->nodes, node_a, tmp); + BLI_remlink(&ntree.nodes, tmp); + BLI_insertlinkbefore(&ntree.nodes, node_a, tmp); } } diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc index 1e520f43a67..35cd74552ec 100644 --- a/source/blender/editors/space_node/node_edit.cc +++ b/source/blender/editors/space_node/node_edit.cc @@ -2040,18 +2040,15 @@ void NODE_OT_output_file_move_active_socket(wmOperatorType *ot) static int node_copy_color_exec(bContext *C, wmOperator *UNUSED(op)) { - SpaceNode *snode = CTX_wm_space_node(C); - bNodeTree *ntree = snode->edittree; + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &ntree = *snode.edittree; - if (!ntree) { - return OPERATOR_CANCELLED; - } - bNode *node = nodeGetActive(ntree); + bNode *node = nodeGetActive(&ntree); if (!node) { return OPERATOR_CANCELLED; } - LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) { + LISTBASE_FOREACH (bNode *, node_iter, &ntree.nodes) { if (node_iter->flag & NODE_SELECT && node_iter != node) { if (node->flag & NODE_CUSTOM_COLOR) { node_iter->flag |= NODE_CUSTOM_COLOR; diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh index c811cb408b6..6016bf5da71 100644 --- a/source/blender/editors/space_node/node_intern.hh +++ b/source/blender/editors/space_node/node_intern.hh @@ -131,7 +131,7 @@ void node_draw_space(const bContext &C, ARegion ®ion); * Sort nodes by selection: unselected nodes first, then selected, * then the active node at the very end. Relative order is kept intact. */ -void node_sort(bNodeTree *ntree); +void node_sort(bNodeTree &ntree); void node_set_cursor(wmWindow &win, SpaceNode &snode, const blender::float2 &cursor); /* DPI scaled coords */ diff --git a/source/blender/editors/space_node/node_relationships.cc b/source/blender/editors/space_node/node_relationships.cc index a5117fbd25b..45b2dbda48b 100644 --- a/source/blender/editors/space_node/node_relationships.cc +++ b/source/blender/editors/space_node/node_relationships.cc @@ -1588,14 +1588,14 @@ void NODE_OT_links_detach(wmOperatorType *ot) static int node_parent_set_exec(bContext *C, wmOperator *UNUSED(op)) { - SpaceNode *snode = CTX_wm_space_node(C); - bNodeTree *ntree = snode->edittree; - bNode *frame = nodeGetActive(ntree); + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &ntree = *snode.edittree; + bNode *frame = nodeGetActive(&ntree); if (!frame || frame->type != NODE_FRAME) { return OPERATOR_CANCELLED; } - LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { + LISTBASE_FOREACH (bNode *, node, &ntree.nodes) { if (node == frame) { continue; } @@ -1702,7 +1702,7 @@ static int node_join_exec(bContext *C, wmOperator *UNUSED(op)) } } - node_sort(&ntree); + node_sort(ntree); WM_event_add_notifier(C, NC_NODE | ND_DISPLAY, nullptr); return OPERATOR_FINISHED; @@ -1729,15 +1729,15 @@ void NODE_OT_join(wmOperatorType *ot) /** \name Attach Operator * \{ */ -static bNode *node_find_frame_to_attach(ARegion *region, - const bNodeTree *ntree, +static bNode *node_find_frame_to_attach(ARegion ®ion, + const bNodeTree &ntree, const int mouse_xy[2]) { /* convert mouse coordinates to v2d space */ float cursor[2]; - UI_view2d_region_to_view(®ion->v2d, UNPACK2(mouse_xy), &cursor[0], &cursor[1]); + UI_view2d_region_to_view(®ion.v2d, UNPACK2(mouse_xy), &cursor[0], &cursor[1]); - LISTBASE_FOREACH_BACKWARD (bNode *, frame, &ntree->nodes) { + LISTBASE_FOREACH_BACKWARD (bNode *, frame, &ntree.nodes) { /* skip selected, those are the nodes we want to attach */ if ((frame->type != NODE_FRAME) || (frame->flag & NODE_SELECT)) { continue; @@ -1752,13 +1752,13 @@ static bNode *node_find_frame_to_attach(ARegion *region, static int node_attach_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event) { - ARegion *region = CTX_wm_region(C); - SpaceNode *snode = CTX_wm_space_node(C); - bNodeTree *ntree = snode->edittree; + ARegion ®ion = *CTX_wm_region(C); + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &ntree = *snode.edittree; bNode *frame = node_find_frame_to_attach(region, ntree, event->mval); if (frame) { - LISTBASE_FOREACH_BACKWARD (bNode *, node, &ntree->nodes) { + LISTBASE_FOREACH_BACKWARD (bNode *, node, &ntree.nodes) { if (node->flag & NODE_SELECT) { if (node->parent == nullptr) { /* disallow moving a parent into its child */ @@ -1848,17 +1848,17 @@ static void node_detach_recursive(bNode *node) /* detach the root nodes in the current selection */ static int node_detach_exec(bContext *C, wmOperator *UNUSED(op)) { - SpaceNode *snode = CTX_wm_space_node(C); - bNodeTree *ntree = snode->edittree; + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &ntree = *snode.edittree; /* reset tags */ - LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { + LISTBASE_FOREACH (bNode *, node, &ntree.nodes) { node->done = 0; } /* detach nodes recursively * relative order is preserved here! */ - LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { + LISTBASE_FOREACH (bNode *, node, &ntree.nodes) { if (!(node->done & NODE_DETACH_DONE)) { node_detach_recursive(node); } @@ -2239,7 +2239,7 @@ static void node_link_insert_offset_ntree(NodeInsertOfsData *iofsd, /* frame attachment wasn't handled yet * so we search the frame that the node will be attached to later */ - insert.parent = node_find_frame_to_attach(region, ntree, mouse_xy); + insert.parent = node_find_frame_to_attach(*region, *ntree, mouse_xy); /* this makes sure nodes are also correctly offset when inserting a node on top of a frame * without actually making it a part of the frame (because mouse isn't intersecting it) diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index 351c79d4b66..d0197252588 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -280,57 +280,51 @@ void node_deselect_all_output_sockets(SpaceNode &snode, const bool deselect_node /* Return true if we need redraw, otherwise false. */ -static bool node_select_grouped_type(SpaceNode *snode, bNode *node_act) +static bool node_select_grouped_type(bNodeTree &node_tree, bNode &node_act) { - bNode *node; bool changed = false; - - for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { if ((node->flag & SELECT) == 0) { - if (node->type == node_act->type) { + if (node->type == node_act.type) { nodeSetSelected(node, true); changed = true; } } } - return changed; } -static bool node_select_grouped_color(SpaceNode *snode, bNode *node_act) +static bool node_select_grouped_color(bNodeTree &node_tree, bNode &node_act) { bool changed = false; - - LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { if ((node->flag & SELECT) == 0) { - if (compare_v3v3(node->color, node_act->color, 0.005f)) { + if (compare_v3v3(node->color, node_act.color, 0.005f)) { nodeSetSelected(node, true); changed = true; } } } - return changed; } -static bool node_select_grouped_name(SpaceNode *snode, bNode *node_act, const bool from_right) +static bool node_select_grouped_name(bNodeTree &node_tree, bNode &node_act, const bool from_right) { - bNode *node; bool changed = false; const uint delims[] = {'.', '-', '_', '\0'}; size_t pref_len_act, pref_len_curr; const char *sep, *suf_act, *suf_curr; pref_len_act = BLI_str_partition_ex_utf8( - node_act->name, nullptr, delims, &sep, &suf_act, from_right); + node_act.name, nullptr, delims, &sep, &suf_act, from_right); /* NOTE: in case we are searching for suffix, and found none, use whole name as suffix. */ if (from_right && !(sep && suf_act)) { pref_len_act = 0; - suf_act = node_act->name; + suf_act = node_act.name; } - for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { if (node->flag & SELECT) { continue; } @@ -345,7 +339,7 @@ static bool node_select_grouped_name(SpaceNode *snode, bNode *node_act, const bo if ((from_right && STREQ(suf_act, suf_curr)) || (!from_right && (pref_len_act == pref_len_curr) && - STREQLEN(node_act->name, node->name, pref_len_act))) { + STREQLEN(node_act.name, node->name, pref_len_act))) { nodeSetSelected(node, true); changed = true; } @@ -363,20 +357,20 @@ enum { static int node_select_grouped_exec(bContext *C, wmOperator *op) { - SpaceNode *snode = CTX_wm_space_node(C); - bNode *node_act = nodeGetActive(snode->edittree); + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &node_tree = *snode.edittree; + bNode *node_act = nodeGetActive(snode.edittree); if (node_act == nullptr) { return OPERATOR_CANCELLED; } - bNode *node; bool changed = false; const bool extend = RNA_boolean_get(op->ptr, "extend"); const int type = RNA_enum_get(op->ptr, "type"); if (!extend) { - for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { nodeSetSelected(node, false); } } @@ -384,23 +378,23 @@ static int node_select_grouped_exec(bContext *C, wmOperator *op) switch (type) { case NODE_SELECT_GROUPED_TYPE: - changed = node_select_grouped_type(snode, node_act); + changed = node_select_grouped_type(node_tree, *node_act); break; case NODE_SELECT_GROUPED_COLOR: - changed = node_select_grouped_color(snode, node_act); + changed = node_select_grouped_color(node_tree, *node_act); break; case NODE_SELECT_GROUPED_PREFIX: - changed = node_select_grouped_name(snode, node_act, false); + changed = node_select_grouped_name(node_tree, *node_act, false); break; case NODE_SELECT_GROUPED_SUFIX: - changed = node_select_grouped_name(snode, node_act, true); + changed = node_select_grouped_name(node_tree, *node_act, true); break; default: break; } if (changed) { - node_sort(snode->edittree); + node_sort(node_tree); WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr); return OPERATOR_FINISHED; } @@ -451,26 +445,26 @@ void NODE_OT_select_grouped(wmOperatorType *ot) void node_select_single(bContext &C, bNode &node) { Main *bmain = CTX_data_main(&C); - SpaceNode *snode = CTX_wm_space_node(&C); + SpaceNode &snode = *CTX_wm_space_node(&C); + bNodeTree &node_tree = *snode.edittree; const Object *ob = CTX_data_active_object(&C); const Scene *scene = CTX_data_scene(&C); const wmWindowManager *wm = CTX_wm_manager(&C); bool active_texture_changed = false; - bNode *tnode; - for (tnode = (bNode *)snode->edittree->nodes.first; tnode; tnode = tnode->next) { - if (tnode != &node) { - nodeSetSelected(tnode, false); + LISTBASE_FOREACH (bNode *, node_iter, &node_tree.nodes) { + if (node_iter != &node) { + nodeSetSelected(node_iter, false); } } nodeSetSelected(&node, true); - ED_node_set_active(bmain, snode, snode->edittree, &node, &active_texture_changed); - ED_node_set_active_viewer_key(snode); + ED_node_set_active(bmain, &snode, &node_tree, &node, &active_texture_changed); + 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)) { - DEG_id_tag_update(&snode->edittree->id, ID_RECALC_COPY_ON_WRITE); + DEG_id_tag_update(&node_tree.id, ID_RECALC_COPY_ON_WRITE); } WM_event_add_notifier(&C, NC_NODE | NA_SELECTED, nullptr); @@ -611,7 +605,7 @@ static int node_mouse_select(bContext *C, ED_spreadsheet_context_paths_set_geometry_node(&bmain, &snode, node); } ED_node_set_active_viewer_key(&snode); - node_sort(snode.edittree); + node_sort(*snode.edittree); 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); @@ -678,20 +672,21 @@ void NODE_OT_select(wmOperatorType *ot) static int node_box_select_exec(bContext *C, wmOperator *op) { - SpaceNode *snode = CTX_wm_space_node(C); - ARegion *region = CTX_wm_region(C); + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &node_tree = *snode.edittree; + const ARegion ®ion = *CTX_wm_region(C); rctf rectf; WM_operator_properties_border_to_rctf(op, &rectf); - UI_view2d_region_to_view_rctf(®ion->v2d, &rectf, &rectf); + UI_view2d_region_to_view_rctf(®ion.v2d, &rectf, &rectf); 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_select_all(&snode->edittree->nodes, SEL_DESELECT); + node_select_all(&node_tree.nodes, SEL_DESELECT); } - LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { bool is_inside; if (node->type == NODE_FRAME) { is_inside = BLI_rctf_inside_rctf(&rectf, &node->totr); @@ -705,7 +700,7 @@ static int node_box_select_exec(bContext *C, wmOperator *op) } } - node_sort(snode->edittree); + node_sort(node_tree); WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr); @@ -937,13 +932,13 @@ void NODE_OT_select_lasso(wmOperatorType *ot) static int node_select_all_exec(bContext *C, wmOperator *op) { - SpaceNode *snode = CTX_wm_space_node(C); - ListBase *node_lb = &snode->edittree->nodes; + SpaceNode &snode = *CTX_wm_space_node(C); + ListBase *node_lb = &snode.edittree->nodes; int action = RNA_enum_get(op->ptr, "action"); node_select_all(node_lb, action); - node_sort(snode->edittree); + node_sort(*snode.edittree); WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr); return OPERATOR_FINISHED; @@ -974,15 +969,14 @@ void NODE_OT_select_all(wmOperatorType *ot) static int node_select_linked_to_exec(bContext *C, wmOperator *UNUSED(op)) { - SpaceNode *snode = CTX_wm_space_node(C); - bNodeLink *link; - bNode *node; + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &node_tree = *snode.edittree; - for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { node->flag &= ~NODE_TEST; } - for (link = (bNodeLink *)snode->edittree->links.first; link; link = link->next) { + LISTBASE_FOREACH (bNodeLink *, link, &node_tree.links) { if (nodeLinkIsHidden(link)) { continue; } @@ -991,13 +985,13 @@ static int node_select_linked_to_exec(bContext *C, wmOperator *UNUSED(op)) } } - for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { if (node->flag & NODE_TEST) { nodeSetSelected(node, true); } } - node_sort(snode->edittree); + node_sort(node_tree); WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr); return OPERATOR_FINISHED; @@ -1026,15 +1020,14 @@ void NODE_OT_select_linked_to(wmOperatorType *ot) static int node_select_linked_from_exec(bContext *C, wmOperator *UNUSED(op)) { - SpaceNode *snode = CTX_wm_space_node(C); - bNodeLink *link; - bNode *node; + SpaceNode &snode = *CTX_wm_space_node(C); + bNodeTree &node_tree = *snode.edittree; - for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { node->flag &= ~NODE_TEST; } - for (link = (bNodeLink *)snode->edittree->links.first; link; link = link->next) { + LISTBASE_FOREACH (bNodeLink *, link, &node_tree.links) { if (nodeLinkIsHidden(link)) { continue; } @@ -1043,13 +1036,13 @@ static int node_select_linked_from_exec(bContext *C, wmOperator *UNUSED(op)) } } - for (node = (bNode *)snode->edittree->nodes.first; node; node = node->next) { + LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) { if (node->flag & NODE_TEST) { nodeSetSelected(node, true); } } - node_sort(snode->edittree); + node_sort(node_tree); WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr); return OPERATOR_FINISHED; |