[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18839] branches/blender2.5/blender/source /blender/editors/space_node: 2.5

Ton Roosendaal ton at blender.org
Fri Feb 6 19:38:12 CET 2009


Revision: 18839
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18839
Author:   ton
Date:     2009-02-06 19:38:10 +0100 (Fri, 06 Feb 2009)

Log Message:
-----------
2.5

- Corner node 'size' widget works again
- Proper preview events added on linking nodes

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_node/node_edit.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_intern.h
    branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_state.c

Modified: branches/blender2.5/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/node_edit.c	2009-02-06 18:09:35 UTC (rev 18838)
+++ branches/blender2.5/blender/source/blender/editors/space_node/node_edit.c	2009-02-06 18:38:10 UTC (rev 18839)
@@ -189,18 +189,34 @@
 
 /* ***************************************** */
 
-#if 0
+/* also checks for edited groups */
+bNode *editnode_get_active(bNodeTree *ntree)
+{
+	bNode *node;
+	
+	/* check for edited group */
+	for(node= ntree->nodes.first; node; node= node->next)
+		if(node->flag & NODE_GROUP_EDIT)
+			break;
+	if(node)
+		return nodeGetActive((bNodeTree *)node->id);
+	else
+		return nodeGetActive(ntree);
+}
 
-// XXX snode_handle_recalc will go away */
-static void snode_handle_recalc(SpaceNode *snode)
+static void snode_handle_recalc(bContext *C, SpaceNode *snode)
 {
-	if(snode->treetype==NTREE_TEXTURE) {
-		ntreeTexUpdatePreviews(snode->nodetree);
+	if(snode->treetype==NTREE_SHADER)
+		WM_event_add_notifier(C, NC_MATERIAL|ND_NODES, snode->id);
+	else if(snode->treetype==NTREE_COMPOSIT)
+		WM_event_add_notifier(C, NC_SCENE|ND_NODES, snode->id);
+	else if(snode->treetype==NTREE_TEXTURE) {
+		// ntreeTexUpdatePreviews(snode->nodetree);
 		// XXX BIF_preview_changed(ID_TE);
 	}
 }
 
-
+#if 0
 static int image_detect_file_sequence(int *start_p, int *frames_p, char *str)
 {
 	SpaceFile *sfile;
@@ -297,8 +313,7 @@
 		BKE_image_signal(ima, node->storage, IMA_SIGNAL_RELOAD);
 		
 		NodeTagChanged(snode->edittree, node);
-		// XXX			snode_handle_recalc(snode);
-		// allqueue(REDRAWNODE, 0); 
+		// XXX snode_handle_recalc(C, snode);
 	}
 }
 
@@ -1034,86 +1049,108 @@
 }
 #endif;
 
+/* ********************** size widget operator ******************** */
 
-/* releases on event, only 1 node */
-void scale_node(SpaceNode *snode, bNode *node)
+typedef struct NodeSizeWidget {
+	float mxstart;
+	float oldwidth;
+} NodeSizeWidget;
+
+static int node_size_widget_modal(bContext *C, wmOperator *op, wmEvent *event)
 {
-	float mxstart, mystart, mx, my, oldwidth;
-	int cont=1, cancel=0;
-	short mval[2], mvalo[2];
+	SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C);
+	ARegion *ar= CTX_wm_region(C);
+	bNode *node= editnode_get_active(snode->edittree);
+	NodeSizeWidget *nsw= op->customdata;
+	float mx, my;
 	
-	// XXX
-	mval[0] = mvalo[0] = 0;
-	mval[1] = mvalo[1] = 1;
-	mxstart = 0.0f;
-	mystart = 0.0f;
-	mx= 0.0f;
-	my= 0.0f;
-	
-	/* store old */
-	if(node->flag & NODE_HIDDEN)
-		oldwidth= node->miniwidth;
-	else
-		oldwidth= node->width;
-		
-/* XXX	getmouseco_areawin(mvalo);
-	areamouseco_to_ipoco(G.v2d, mvalo, &mxstart, &mystart);*/
-	
-	while(cont) {
-		
-		// XXX getmouseco_areawin(mval);
-		if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1]) {
+	switch (event->type) {
+		case MOUSEMOVE:
 			
-			// XXX areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
-			mvalo[0]= mval[0];
-			mvalo[1]= mval[1];
+			UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, 
+									 &mx, &my);
 			
 			if(node->flag & NODE_HIDDEN) {
-				node->miniwidth= oldwidth + mx-mxstart;
+				node->miniwidth= nsw->oldwidth + mx - nsw->mxstart;
 				CLAMP(node->miniwidth, 0.0f, 100.0f);
 			}
 			else {
-				node->width= oldwidth + mx-mxstart;
+				node->width= nsw->oldwidth + mx - nsw->mxstart;
 				CLAMP(node->width, node->typeinfo->minwidth, node->typeinfo->maxwidth);
 			}
+			// XXX
+			if(snode->nodetree->type == NTREE_TEXTURE)
+				ntreeTexUpdatePreviews(snode->nodetree);
+				
+			ED_region_tag_redraw(ar);
+
+			break;
 			
-			// XXX force_draw(0);
-		}
-		else
-			; // XXX PIL_sleep_ms(10);
-		
-		/* XXX while (qtest()) {
-			short val;
-			unsigned short event= extern_qread(&val);
+		case LEFTMOUSE:
+		case MIDDLEMOUSE:
+		case RIGHTMOUSE:
 			
-			switch (event) {
-				case LEFTMOUSE:
-				case SPACEKEY:
-				case RETKEY:
-					cont=0;
-					break;
-				case ESCKEY:
-				case RIGHTMOUSE:
-					if(val) {
-						cancel=1;
-						cont=0;
-					}
-					break;
-			}
-		}*/
-		
+			MEM_freeN(nsw);
+			op->customdata= NULL;
+			
+			return OPERATOR_FINISHED;
 	}
 	
-	if(cancel) {
-		node->width= oldwidth;
+	return OPERATOR_RUNNING_MODAL;
+}
+
+static int node_size_widget_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C);
+	ARegion *ar= CTX_wm_region(C);
+	bNode *node= editnode_get_active(snode->edittree);
+	
+	if(node) {
+		rctf totr;
+		
+		UI_view2d_region_to_view(&ar->v2d, event->x - ar->winrct.xmin, event->y - ar->winrct.ymin, 
+								 &snode->mx, &snode->my);
+		totr= node->totr;
+		totr.xmin= totr.xmax-10.0f;
+		totr.ymax= totr.ymin+10.0f;
+		
+		if(BLI_in_rctf(&totr, snode->mx, snode->my)) {
+			NodeSizeWidget *nsw= MEM_callocN(sizeof(NodeSizeWidget), "size widget op data");
+			
+			op->customdata= nsw;
+			nsw->mxstart= snode->mx;
+			
+			/* store old */
+			if(node->flag & NODE_HIDDEN)
+				nsw->oldwidth= node->miniwidth;
+			else
+				nsw->oldwidth= node->width;
+			
+			/* add modal handler */
+			WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+
+			return OPERATOR_RUNNING_MODAL;
+		}
 	}
+	return OPERATOR_PASS_THROUGH;
+}
+
+void NODE_OT_size_widget(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Scale Node";
+	ot->idname= "NODE_OT_size_widget";
 	
-	// allqueue(REDRAWNODE, 1);
+	/* api callbacks */
+	ot->invoke= node_size_widget_invoke;
+	ot->modal= node_size_widget_modal;
+	ot->poll= ED_operator_node_active;
 	
-	if(snode->nodetree->type == NTREE_TEXTURE)
-		ntreeTexUpdatePreviews(snode->nodetree);
+	/* flags */
+	ot->flag= 0;
 }
 
+
 #if 0
 
 /* ******************** rename ******************* */
@@ -1161,22 +1198,7 @@
 }
 #endif /* 0 */
 
-/* used in buttons to check context, also checks for edited groups */
-bNode *editnode_get_active(bNodeTree *ntree)
-{
-	bNode *node;
-	
-	/* check for edited group */
-	for(node= ntree->nodes.first; node; node= node->next)
-		if(node->flag & NODE_GROUP_EDIT)
-			break;
-	if(node)
-		return nodeGetActive((bNodeTree *)node->id);
-	else
-		return nodeGetActive(ntree);
-}
 
-
 /* no undo here! */
 void node_deselectall(SpaceNode *snode, int swap)
 {
@@ -1305,7 +1327,7 @@
 	totr.xmin= totr.xmax-10.0f;
 	totr.ymax= totr.ymin+10.0f;
 	if(BLI_in_rctf(&totr, mx, my)) {
-		scale_node(snode, node);
+//		scale_node(snode, node);
 		return 1;
 	}
 	return 0;
@@ -1325,7 +1347,7 @@
 	totr.xmax= node->totr.xmax;
 	totr.xmin= node->totr.xmax-15.0f;
 	if(BLI_in_rctf(&totr, mx, my)) {
-		scale_node(snode, node);
+//		scale_node(snode, node);
 		return 1;
 	}
 	return 0;
@@ -1819,8 +1841,7 @@
 			
 			ntreeSolveOrder(snode->edittree);
 			snode_verify_groups(snode);
-			// XXX			snode_handle_recalc(snode);
-			ED_region_tag_redraw(ar);
+			snode_handle_recalc(C, snode);
 			
 			MEM_freeN(op->customdata);
 			op->customdata= NULL;

Modified: branches/blender2.5/blender/source/blender/editors/space_node/node_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/node_intern.h	2009-02-06 18:09:35 UTC (rev 18838)
+++ branches/blender2.5/blender/source/blender/editors/space_node/node_intern.h	2009-02-06 18:38:10 UTC (rev 18839)
@@ -69,7 +69,6 @@
 bNode *next_node(bNodeTree *ntree);
 bNode *node_add_node(SpaceNode *snode, Scene *scene, int type, float locx, float locy);
 void snode_set_context(SpaceNode *snode, Scene *scene);
-void scale_node(SpaceNode *snode, bNode *node);
 void snode_make_group_editable(SpaceNode *snode, bNode *gnode);
 void snode_home(ScrArea *sa, ARegion *ar, SpaceNode *snode);
 void node_set_active(SpaceNode *snode, bNode *node);
@@ -82,6 +81,7 @@
 
 void NODE_OT_link(struct wmOperatorType *ot);
 void NODE_OT_delete_selection(struct wmOperatorType *ot);
+void NODE_OT_size_widget(struct wmOperatorType *ot);
 
 // XXXXXX
 

Modified: branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c	2009-02-06 18:09:35 UTC (rev 18838)
+++ branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c	2009-02-06 18:38:10 UTC (rev 18839)
@@ -57,6 +57,7 @@
 	WM_operatortype_append(NODE_OT_border_select);
 	WM_operatortype_append(NODE_OT_delete_selection);
 	WM_operatortype_append(NODE_OT_link);
+	WM_operatortype_append(NODE_OT_size_widget);
 }
 
 void node_keymap(struct wmWindowManager *wm)
@@ -69,7 +70,8 @@
 	RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_extend_select", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select_type", NODE_SELECT_MOUSE);
 	RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_extend_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select_type", NODE_SELECT_MOUSE);
 	
-	WM_keymap_add_item(keymap, "NODE_OT_link", ACTIONMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "NODE_OT_link", LEFTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "NODE_OT_size_widget", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "NODE_OT_visibility_toggle", ACTIONMOUSE, KM_PRESS, 0, 0);
 	
 	WM_keymap_add_item(keymap, "NODE_OT_fit_all", HOMEKEY, KM_PRESS, 0, 0);

Modified: branches/blender2.5/blender/source/blender/editors/space_node/node_state.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/node_state.c	2009-02-06 18:09:35 UTC (rev 18838)
+++ branches/blender2.5/blender/source/blender/editors/space_node/node_state.c	2009-02-06 18:38:10 UTC (rev 18839)
@@ -96,14 +96,6 @@
 		// XXX node_hide_unhide_sockets(snode, node);
 	}
 	
-	
-	totr= node->totr;
-	totr.xmin= totr.xmax-10.0f;
-	totr.ymax= totr.ymin+10.0f;
-	if(BLI_in_rctf(&totr, mx, my)) {
-		// XXX scale_node(snode, node);
-		return 1;
-	}
 	return 0;
 }
 
@@ -116,13 +108,6 @@
 		node->flag &= ~NODE_HIDDEN;
 		return 1;
 	}	
-	
-	totr.xmax= node->totr.xmax;
-	totr.xmin= node->totr.xmax-15.0f;
-	if(BLI_in_rctf(&totr, mx, my)) {
-		scale_node(snode, node);
-		return 1;
-	}
 	return 0;
 }
 





More information about the Bf-blender-cvs mailing list