[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24695] trunk/blender: Node Editor: Various usability and code tidyups

Joshua Leung aligorith at gmail.com
Fri Nov 20 05:19:59 CET 2009


Revision: 24695
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24695
Author:   aligorith
Date:     2009-11-20 05:19:57 +0100 (Fri, 20 Nov 2009)

Log Message:
-----------
Node Editor: Various usability and code tidyups
* Fixed a nasty bug which meant that it was impossible to set an active node. Was caused by ntreeCopyTree() getting called when compo updates were done and clearing the active flags. The active flag clearing is only really needed for the "internal_select" case which is only used for duplicating selected nodes (from Shift-D duplicate).

* Recoded click-selection code. Was a mess of old code, bad exceptions from the old code half ported, duplicate operators, unnecessary flags/modes.

* Fixed bug #19927: compositing node groups can't be access via "tab" or ungrouped via "alt+g". Was probably related to the active group not being able to be set.

* Made resizing nodes work again. Again, this was due to the active node bug.

* Made adding a new group with Ctrl-G correctly update the views

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_node.py
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/editors/space_node/node_buttons.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/node_header.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/node_select.c
    trunk/blender/source/blender/editors/space_node/node_state.c

Modified: trunk/blender/release/scripts/ui/space_node.py
===================================================================
--- trunk/blender/release/scripts/ui/space_node.py	2009-11-20 04:12:52 UTC (rev 24694)
+++ trunk/blender/release/scripts/ui/space_node.py	2009-11-20 04:19:57 UTC (rev 24695)
@@ -76,9 +76,6 @@
         layout.itemO("node.properties", icon='ICON_MENU_PANEL')
         layout.itemS()
 
-        # layout.itemO("grease_pencil..")
-        # layout.itemS()
-
         layout.itemO("view2d.zoom_in")
         layout.itemO("view2d.zoom_out")
 

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2009-11-20 04:12:52 UTC (rev 24694)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2009-11-20 04:19:57 UTC (rev 24695)
@@ -1072,6 +1072,11 @@
 	return ntree;
 }
 
+/* Warning: this function gets called during some rather unexpected times
+ *	- internal_select is only 1 when used for duplicating selected nodes (i.e. Shift-D duplicate operator)
+ *	- this gets called when executing compositing updates (for threaded previews)
+ *	- when the nodetree datablock needs to be copied (i.e. when users get copied)
+ */
 bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select)
 {
 	bNodeTree *newtree;
@@ -1103,10 +1108,9 @@
 		if(internal_select==0 || (node->flag & NODE_SELECT)) {
 			nnode= nodeCopyNode(newtree, node, internal_select);	/* sets node->new */
 			if(internal_select) {
-				node->flag &= ~NODE_SELECT;
+				node->flag &= ~(NODE_SELECT|NODE_ACTIVE);
 				nnode->flag |= NODE_SELECT;
 			}
-			node->flag &= ~NODE_ACTIVE;
 
 			/* deselect original sockets */
 			for(sock= node->inputs.first; sock; sock= sock->next) {

Modified: trunk/blender/source/blender/editors/space_node/node_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_buttons.c	2009-11-20 04:12:52 UTC (rev 24694)
+++ trunk/blender/source/blender/editors/space_node/node_buttons.c	2009-11-20 04:19:57 UTC (rev 24695)
@@ -103,8 +103,8 @@
 static void active_node_panel(const bContext *C, Panel *pa)
 {
 	SpaceNode *snode= CTX_wm_space_node(C);
-	bNodeTree *ntree= (snode) ? snode->nodetree : NULL; // XXX what's up with edittree then?
-	bNode *node = (ntree) ? nodeGetActive(ntree) : NULL;
+	bNodeTree *ntree= (snode) ? snode->edittree : NULL;
+	bNode *node = (ntree) ? nodeGetActive(ntree) : NULL; // xxx... for editing group nodes
 	uiLayout *layout= pa->layout;
 	uiBlock *block;
 	PointerRNA ptr;
@@ -112,7 +112,10 @@
 	/* verify pointers, and create RNA pointer for the node */
 	if ELEM(NULL, ntree, node)
 		return;
-	RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr);
+	//if (node->id) /* for group nodes */
+	//	RNA_pointer_create(node->id, &RNA_Node, node, &ptr);
+	//else
+		RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr); 
 	
 	/* set update callback */
 	// xxx is this really needed

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2009-11-20 04:12:52 UTC (rev 24694)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2009-11-20 04:19:57 UTC (rev 24695)
@@ -712,7 +712,7 @@
 			/* make active viewer, currently only 1 supported... */
 			if( ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
 				bNode *tnode;
-				int was_output= node->flag & NODE_DO_OUTPUT;
+				int was_output= (node->flag & NODE_DO_OUTPUT);
 
 				for(tnode= snode->edittree->nodes.first; tnode; tnode= tnode->next)
 					if( ELEM(tnode->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER))
@@ -1206,8 +1206,11 @@
 	if(node) {
 		rctf totr;
 		
+		/* convert mouse coordinates to v2d space */
 		UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, 
 								 &snode->mx, &snode->my);
+		
+		/* rect we're interested in is just the bottom right corner */
 		totr= node->totr;
 		totr.xmin= totr.xmax-10.0f;
 		totr.ymax= totr.ymin+10.0f;
@@ -1230,7 +1233,7 @@
 			return OPERATOR_RUNNING_MODAL;
 		}
 	}
-	return OPERATOR_PASS_THROUGH;
+	return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH;
 }
 
 void NODE_OT_resize(wmOperatorType *ot)
@@ -2096,30 +2099,6 @@
 
 #if 0
 
-void node_insert_key(SpaceNode *snode)
-{
-	bNode *node= editnode_get_active(snode->edittree);
-	
-	if(node == NULL)
-		return;
-	
-	if(node->type==CMP_NODE_TIME) {
-		if(node->custom1<node->custom2) {
-
-			CurveMapping *cumap= node->storage;
-			float fval, curval;
-		
-			curval= (float)(CFRA - node->custom1)/(float)(node->custom2-node->custom1);
-			fval= curvemapping_evaluateF(cumap, 0, curval);
-			
-			if(fbutton(&fval, 0.0f, 1.0f, 10, 10, "Insert Value")) {
-				curvemap_insert(cumap->cm, curval, fval);
-
-			}
-		}
-	}
-}
-
 /* makes a link between selected output and input sockets */
 void node_make_link(SpaceNode *snode)
 {
@@ -2201,7 +2180,7 @@
 		return OPERATOR_FINISHED;
 	}
 	
-	return OPERATOR_PASS_THROUGH;;
+	return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH;
 }
 
 void NODE_OT_links_cut(wmOperatorType *ot)
@@ -2330,6 +2309,8 @@
 		nodeSetActive(snode->nodetree, gnode);
 		ntreeSolveOrder(snode->nodetree);
 	}
+	
+	snode_handle_recalc(C, snode);
 
 	return OPERATOR_FINISHED;
 }

Modified: trunk/blender/source/blender/editors/space_node/node_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_header.c	2009-11-20 04:12:52 UTC (rev 24694)
+++ trunk/blender/source/blender/editors/space_node/node_header.c	2009-11-20 04:19:57 UTC (rev 24695)
@@ -202,131 +202,3 @@
 	WM_menutype_add(mt);
 }
 
-#if 0
-static void do_node_nodemenu(bContext *C, void *arg, int event)
-{
-	ScrArea *curarea= CTX_wm_area(C);
-	SpaceNode *snode= CTX_wm_space_node(C); 
-	int fromlib=0;
-	
-	/* functions in editnode.c assume there's a tree */
-	if(snode->nodetree==NULL)
-		return;
-	fromlib= (snode->id && snode->id->lib);
-	
-	switch(event) {
-		case 1: /* grab/move */
-			// XXX node_transform_ext(0,0);
-			break;
-		case 2: /* duplicate */
-			if(fromlib) fromlib= -1;
-			else ; // XXX node_adduplicate(snode);
-			break;
-		case 3: /* delete */
-			if(fromlib) fromlib= -1;
-			else ; // XXX node_delete(snode);
-			break;
-		case 4: /* make group */
-			// XXX node_make_group(snode);
-			break;
-		case 5: /* ungroup */
-			// XXX node_ungroup(snode);
-			break;
-		case 6: /* edit group */
-			if(fromlib) fromlib= -1;
-			else ; // XXX snode_make_group_editable(snode, NULL);
-			break;
-		case 7: /* hide/unhide */
-			// XXX node_hide(snode);
-			break;
-		case 8: /* read saved render layers */
-			// XXX node_read_renderlayers(snode);
-			break;
-		case 9: /* show cyclic */
-			// XXX ntreeSolveOrder(snode->edittree);
-			break;
-		case 10: /* execute */
-			// XXXX addqueue(curarea->win, UI_BUT_EVENT, B_NODE_TREE_EXEC);
-			break;
-		case 11: /* make link */
-			// XXX node_make_link(snode);
-			break;
-		case 12: /* rename */
-			// XXX node_rename(snode);
-			break;
-		case 13: /* read saved full sample layers */
-			// XXX node_read_fullsamplelayers(snode);
-			break;
-		case 14: /* connect viewer */
-			// XXX node_active_link_viewer(snode);
-			break;
-			
-	}
-	
-	// XXX if(fromlib==-1) error_libdata();
-	
-	ED_area_tag_redraw(curarea);
-}
-
-static uiBlock *node_nodemenu(bContext *C, ARegion *ar, void *arg_unused)
-{
-	ScrArea *curarea= CTX_wm_area(C);
-	SpaceNode *snode= CTX_wm_space_node(C);
-	uiBlock *block;
-	short yco= 0, menuwidth=120;
-	
-	block= uiBeginBlock(C, ar, "node_nodemenu", UI_EMBOSSP);
-	uiBlockSetButmFunc(block, do_node_nodemenu, NULL);
-	
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
-	
-	uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-	
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
-	
-	uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Link|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
-
-	uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-	
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ungroup|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edit Group|Tab", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
-	
-	uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-	
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide/Unhide|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rename|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
-	
-	uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-	
-	if(snode->treetype==NTREE_COMPOSIT) {
-		uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Execute Composite|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
-		uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Render Results|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
-		uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Full Sample Results|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
-		
-		uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-		
-		uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connect Node to Viewer|Ctrl RMB", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
-		
-		uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
-	}
-	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Cyclic Dependencies|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
-	
-	if(curarea->headertype==HEADERTOP) {
-		uiBlockSetDirection(block, UI_DOWN);
-	}
-	else {
-		uiBlockSetDirection(block, UI_TOP);
-		uiBlockFlipOrder(block);
-	}
-	
-	uiTextBoundsBlock(block, 50);
-	uiEndBlock(C, block);
-	
-	return block;
-}
-#endif
-


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list