[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58511] trunk/blender/source/blender/ editors/space_node: Allow creation of mask nodes in compositor with drag&drop of mask datablocks

Sv. Lockal lockalsash at gmail.com
Mon Jul 22 21:24:40 CEST 2013


Revision: 58511
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58511
Author:   lockal
Date:     2013-07-22 19:24:39 +0000 (Mon, 22 Jul 2013)
Log Message:
-----------
Allow creation of mask nodes in compositor with drag&drop of mask datablocks

Also remove superfluous "deselect all" operation in drag&drop for images

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_add.c
    trunk/blender/source/blender/editors/space_node/node_intern.h
    trunk/blender/source/blender/editors/space_node/node_ops.c
    trunk/blender/source/blender/editors/space_node/space_node.c

Modified: trunk/blender/source/blender/editors/space_node/node_add.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_add.c	2013-07-22 19:08:11 UTC (rev 58510)
+++ trunk/blender/source/blender/editors/space_node/node_add.c	2013-07-22 19:24:39 UTC (rev 58511)
@@ -339,8 +339,6 @@
 		}
 	}
 
-	node_deselect_all(snode);
-
 	switch (snode->nodetree->type) {
 		case NTREE_SHADER:
 			type = SH_NODE_TEX_IMAGE;
@@ -410,6 +408,69 @@
 	RNA_def_string(ot->srna, "name", "Image", MAX_ID_NAME - 2, "Name", "Datablock name to assign");
 }
 
+/* ****************** Add Mask Node Operator  ******************* */
+
+static int node_add_mask_poll(bContext *C)
+{
+	SpaceNode *snode = CTX_wm_space_node(C);
+
+	return ED_operator_node_editable(C) && snode->nodetree->type == NTREE_COMPOSIT;
+}
+
+static int node_add_mask_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+	ARegion *ar = CTX_wm_region(C);
+	SpaceNode *snode = CTX_wm_space_node(C);
+	bNode *node;
+	ID *mask = NULL;
+
+	/* check input variables */
+	char name[MAX_ID_NAME - 2];
+	RNA_string_get(op->ptr, "name", name);
+	mask = BKE_libblock_find_name(ID_MSK, name);
+	if (!mask) {
+		BKE_reportf(op->reports, RPT_ERROR, "Mask '%s' not found", name);
+		return OPERATOR_CANCELLED;
+	}
+
+	ED_preview_kill_jobs(C);
+
+	/* convert mouse coordinates to v2d space */
+	UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1],
+							 &snode->cursor[0], &snode->cursor[1]);
+	node = node_add_node(C, NULL, CMP_NODE_MASK, snode->cursor[0], snode->cursor[1]);
+
+	if (!node) {
+		BKE_report(op->reports, RPT_WARNING, "Could not add an mask node");
+		return OPERATOR_CANCELLED;
+	}
+
+	node->id = mask;
+	id_us_plus(mask);
+
+	snode_notify(C, snode);
+	snode_dag_update(C, snode);
+
+	return OPERATOR_FINISHED;
+}
+
+void NODE_OT_add_mask(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Add Mask Node";
+	ot->description = "Add a mask node to the current node editor";
+	ot->idname = "NODE_OT_add_mask";
+
+	/* callbacks */
+	ot->invoke = node_add_mask_invoke;
+	ot->poll = node_add_mask_poll;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+	RNA_def_string(ot->srna, "name", "Mask", MAX_ID_NAME - 2, "Name", "Datablock name to assign");
+}
+
 /********************** New node tree operator *********************/
 
 static int new_node_tree_exec(bContext *C, wmOperator *op)

Modified: trunk/blender/source/blender/editors/space_node/node_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_intern.h	2013-07-22 19:08:11 UTC (rev 58510)
+++ trunk/blender/source/blender/editors/space_node/node_intern.h	2013-07-22 19:24:39 UTC (rev 58511)
@@ -143,6 +143,7 @@
 bNode *node_add_node(const struct bContext *C, const char *idname, int type, float locx, float locy);
 void NODE_OT_add_reroute(struct wmOperatorType *ot);
 void NODE_OT_add_file(struct wmOperatorType *ot);
+void NODE_OT_add_mask(struct wmOperatorType *ot);
 void NODE_OT_new_node_tree(struct wmOperatorType *ot);
 
 

Modified: trunk/blender/source/blender/editors/space_node/node_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_ops.c	2013-07-22 19:08:11 UTC (rev 58510)
+++ trunk/blender/source/blender/editors/space_node/node_ops.c	2013-07-22 19:24:39 UTC (rev 58511)
@@ -101,6 +101,7 @@
 	WM_operatortype_append(NODE_OT_backimage_sample);
 	
 	WM_operatortype_append(NODE_OT_add_file);
+	WM_operatortype_append(NODE_OT_add_mask);
 	
 	WM_operatortype_append(NODE_OT_new_node_tree);
 	

Modified: trunk/blender/source/blender/editors/space_node/space_node.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/space_node.c	2013-07-22 19:08:11 UTC (rev 58510)
+++ trunk/blender/source/blender/editors/space_node/space_node.c	2013-07-22 19:24:39 UTC (rev 58511)
@@ -635,7 +635,7 @@
 
 /* ************* dropboxes ************* */
 
-static int node_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent *UNUSED(event))
+static int node_ima_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent *UNUSED(event))
 {
 	if (drag->type == WM_DRAG_ID) {
 		ID *id = (ID *)drag->poin;
@@ -649,6 +649,23 @@
 	return 0;
 }
 
+static int node_mask_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent *UNUSED(event))
+{
+	if (drag->type == WM_DRAG_ID) {
+		ID *id = (ID *)drag->poin;
+		if (GS(id->name) == ID_MSK)
+			return 1;
+	}
+	return 0;
+}
+
+static void node_id_drop_copy(wmDrag *drag, wmDropBox *drop)
+{
+	ID *id = (ID *)drag->poin;
+
+	RNA_string_set(drop->ptr, "name", id->name + 2);
+}
+
 static void node_id_path_drop_copy(wmDrag *drag, wmDropBox *drop)
 {
 	ID *id = (ID *)drag->poin;
@@ -666,7 +683,8 @@
 {
 	ListBase *lb = WM_dropboxmap_find("Node Editor", SPACE_NODE, RGN_TYPE_WINDOW);
 
-	WM_dropbox_add(lb, "NODE_OT_add_file", node_drop_poll, node_id_path_drop_copy);
+	WM_dropbox_add(lb, "NODE_OT_add_file", node_ima_drop_poll, node_id_path_drop_copy);
+	WM_dropbox_add(lb, "NODE_OT_add_mask", node_mask_drop_poll, node_id_drop_copy);
 
 }
 




More information about the Bf-blender-cvs mailing list