Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_node/node_edit.c
| Show First 20 Lines • Show All 1,176 Lines • ▼ Show 20 Lines | static int node_duplicate_exec(bContext *C, wmOperator *op) | ||||
| const bool keep_inputs = RNA_boolean_get(op->ptr, "keep_inputs"); | const bool keep_inputs = RNA_boolean_get(op->ptr, "keep_inputs"); | ||||
| bool do_tag_update = false; | bool do_tag_update = false; | ||||
| ED_preview_kill_jobs(CTX_wm_manager(C), bmain); | ED_preview_kill_jobs(CTX_wm_manager(C), bmain); | ||||
| lastnode = ntree->nodes.last; | lastnode = ntree->nodes.last; | ||||
| for (node = ntree->nodes.first; node; node = node->next) { | for (node = ntree->nodes.first; node; node = node->next) { | ||||
| if (node->flag & SELECT) { | if (node->flag & SELECT) { | ||||
| newnode = BKE_node_copy_ex(ntree, node, LIB_ID_COPY_DEFAULT); | newnode = BKE_node_copy_store_new_pointers(ntree, node, LIB_ID_COPY_DEFAULT); | ||||
| /* to ensure redraws or rerenders happen */ | /* to ensure redraws or rerenders happen */ | ||||
| ED_node_tag_update_id(snode->id); | ED_node_tag_update_id(snode->id); | ||||
| } | } | ||||
| /* make sure we don't copy new nodes again! */ | /* make sure we don't copy new nodes again! */ | ||||
| if (node == lastnode) { | if (node == lastnode) { | ||||
| break; | break; | ||||
| ▲ Show 20 Lines • Show All 838 Lines • ▼ Show 20 Lines | static int node_clipboard_copy_exec(bContext *C, wmOperator *UNUSED(op)) | ||||
| /* clear current clipboard */ | /* clear current clipboard */ | ||||
| BKE_node_clipboard_clear(); | BKE_node_clipboard_clear(); | ||||
| BKE_node_clipboard_init(ntree); | BKE_node_clipboard_init(ntree); | ||||
| for (node = ntree->nodes.first; node; node = node->next) { | for (node = ntree->nodes.first; node; node = node->next) { | ||||
| if (node->flag & SELECT) { | if (node->flag & SELECT) { | ||||
| /* No ID refcounting, this node is virtual, | /* No ID refcounting, this node is virtual, | ||||
| * detached from any actual Blender data currently. */ | * detached from any actual Blender data currently. */ | ||||
| bNode *new_node = BKE_node_copy_ex(NULL, node, LIB_ID_CREATE_NO_USER_REFCOUNT); | bNode *new_node = BKE_node_copy_store_new_pointers( | ||||
| NULL, node, LIB_ID_CREATE_NO_USER_REFCOUNT); | |||||
| BKE_node_clipboard_add_node(new_node); | BKE_node_clipboard_add_node(new_node); | ||||
| } | } | ||||
| } | } | ||||
| for (node = ntree->nodes.first; node; node = node->next) { | for (node = ntree->nodes.first; node; node = node->next) { | ||||
| if (node->flag & SELECT) { | if (node->flag & SELECT) { | ||||
| bNode *new_node = node->new_node; | bNode *new_node = node->new_node; | ||||
| ▲ Show 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | static int node_clipboard_paste_exec(bContext *C, wmOperator *op) | ||||
| for (node = clipboard_nodes_lb->first, num_nodes = 0; node; node = node->next, num_nodes++) { | for (node = clipboard_nodes_lb->first, num_nodes = 0; node; node = node->next, num_nodes++) { | ||||
| center[0] += BLI_rctf_cent_x(&node->totr); | center[0] += BLI_rctf_cent_x(&node->totr); | ||||
| center[1] += BLI_rctf_cent_y(&node->totr); | center[1] += BLI_rctf_cent_y(&node->totr); | ||||
| } | } | ||||
| mul_v2_fl(center, 1.0 / num_nodes); | mul_v2_fl(center, 1.0 / num_nodes); | ||||
| /* copy nodes from clipboard */ | /* copy nodes from clipboard */ | ||||
| for (node = clipboard_nodes_lb->first; node; node = node->next) { | for (node = clipboard_nodes_lb->first; node; node = node->next) { | ||||
| bNode *new_node = BKE_node_copy_ex(ntree, node, LIB_ID_COPY_DEFAULT); | bNode *new_node = BKE_node_copy_store_new_pointers(ntree, node, LIB_ID_COPY_DEFAULT); | ||||
| /* pasted nodes are selected */ | /* pasted nodes are selected */ | ||||
| nodeSetSelected(new_node, true); | nodeSetSelected(new_node, true); | ||||
| } | } | ||||
| /* reparent copied nodes */ | /* reparent copied nodes */ | ||||
| for (node = clipboard_nodes_lb->first; node; node = node->next) { | for (node = clipboard_nodes_lb->first; node; node = node->next) { | ||||
| bNode *new_node = node->new_node; | bNode *new_node = node->new_node; | ||||
| ▲ Show 20 Lines • Show All 611 Lines • Show Last 20 Lines | |||||