[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23286] trunk/blender/source/blender: UI

Brecht Van Lommel brecht at blender.org
Wed Sep 16 20:59:13 CEST 2009


Revision: 23286
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23286
Author:   blendix
Date:     2009-09-16 20:59:13 +0200 (Wed, 16 Sep 2009)

Log Message:
-----------
UI

* Node buttons can now use the layout engine. a few simple
  ones are converted. We'll keep this code in C for now,
  python wouldn't help much here.
* For node buttons not using the layout engine, manually
  computing the button height is not longer needed.
* Node inputs are still not RNA wrapped, would be good to
  have these available as well for keying, but makesrna does
  not have access to the bNodeTypes.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/editors/include/ED_node.h
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blenderplayer/bad_level_call_stubs/stubs.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2009-09-16 18:47:42 UTC (rev 23285)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2009-09-16 18:59:13 UTC (rev 23286)
@@ -42,7 +42,7 @@
 struct bNodeLink;
 struct bNodeSocket;
 struct bNodeStack;
-struct uiBlock;
+struct uiLayout;
 struct rctf;
 struct ListBase;
 struct RenderData;
@@ -52,6 +52,7 @@
 struct GPUMaterial;
 struct GPUNode;
 struct GPUNodeStack;
+struct PointerRNA;
 
 /* ************** NODE TYPE DEFINITIONS ***** */
 
@@ -82,7 +83,7 @@
 	void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **);
 	
 	/* this line is set on startup of blender */
-	int (*butfunc)(struct uiBlock *, struct bNodeTree *, struct bNode *, struct rctf *);
+	void (*uifunc)(struct uiLayout *, struct PointerRNA *ptr);
 
 	void (*initfunc)(struct bNode *);
 	void (*freestoragefunc)(struct bNode *);

Modified: trunk/blender/source/blender/editors/include/ED_node.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_node.h	2009-09-16 18:47:42 UTC (rev 23285)
+++ trunk/blender/source/blender/editors/include/ED_node.h	2009-09-16 18:59:13 UTC (rev 23286)
@@ -31,10 +31,15 @@
 struct Material;
 struct Scene;
 struct Tex;
+struct bContext;
+struct bNode;
 
 /* drawnode.c */
 void ED_init_node_butfuncs(void);
 
+/* node_draw.c */
+void ED_node_changed_update(struct bContext *C, struct bNode *node);
+
 /* node_edit.c */
 void ED_node_shader_default(struct Material *ma);
 void ED_node_composit_default(struct Scene *sce);

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2009-09-16 18:47:42 UTC (rev 23285)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2009-09-16 18:59:13 UTC (rev 23286)
@@ -170,9 +170,13 @@
 
 /* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */
 
-static int node_buts_group(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_group(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block && node->id) {
+	uiBlock *block= uiLayoutFreeBlock(layout);
+	bNode *node= ptr->data;
+	rctf *butr= &node->butr;
+
+	if(node->id) {
 		uiBut *bt;
 		short width;
 		
@@ -197,112 +201,95 @@
 		
 		uiBlockEndAlign(block);
 	}	
-	return 19;
 }
 #endif
 
-static int node_buts_value(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_value(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block) {
-		bNodeSocket *sock= node->outputs.first;		/* first socket stores value */
-		
-		uiDefButF(block, NUM, B_NODE_EXEC, "", 
-				  (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 20, 
-				  sock->ns.vec, sock->ns.min, sock->ns.max, 10, 2, "");
-		
-	}
-	return 20;
+	uiBlock *block= uiLayoutFreeBlock(layout);
+	bNode *node= ptr->data;
+	rctf *butr= &node->butr;
+	bNodeSocket *sock= node->outputs.first;		/* first socket stores value */
+	
+	uiDefButF(block, NUM, B_NODE_EXEC, "", 
+			  (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 20, 
+			  sock->ns.vec, sock->ns.min, sock->ns.max, 10, 2, "");
 }
 
-static int node_buts_rgb(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_rgb(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block) {
-		bNodeSocket *sock= node->outputs.first;		/* first socket stores value */
-		if(sock) {
-			/* enforce square box drawing */
-			uiBlockSetEmboss(block, UI_EMBOSSP);
-			
-			uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", 
-					  (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 12, 
-					  sock->ns.vec, 0.0f, 1.0f, 3, 0, "");
-			uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", 
-					  (short)butr->xmin, (short)butr->ymin+15, butr->xmax-butr->xmin, butr->ymax-butr->ymin -15 -15, 
-					  sock->ns.vec, 0.0f, 1.0f, 2, 0, "");
-			uiDefButF(block, COL, B_NOP, "",		
-					  (short)butr->xmin, (short)butr->ymax-12, butr->xmax-butr->xmin, 12, 
-					  sock->ns.vec, 0.0, 0.0, -1, 0, "");
-			/* the -1 above prevents col button to popup a color picker */
-			
-			uiBlockSetEmboss(block, UI_EMBOSS);
-		}
-	}
-	return 30 + (int)(node->width-NODE_DY);
-}
+	uiBlock *block= uiLayoutFreeBlock(layout);
+	bNode *node= ptr->data;
+	rctf *butr= &node->butr;
+	bNodeSocket *sock= node->outputs.first;		/* first socket stores value */
 
-static int node_buts_mix_rgb(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
-{
-	if(block) {
-		uiBut *bt;
-		int a_but= (ntree->type==NTREE_COMPOSIT);
+	if(sock) {
+		/* enforce square box drawing */
+		uiBlockSetEmboss(block, UI_EMBOSSP);
 		
-		/* blend type */
-		uiBlockBeginAlign(block);
-		bt=uiDefButS(block, MENU, B_NODE_EXEC, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Overlay %x9|Divide %x5|Difference %x6|Darken %x7|Lighten %x8|Dodge %x10|Burn %x11|Color %x15|Value %x14|Saturation %x13|Hue %x12|Soft Light %x16|Linear Light %x17", 
-					 (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin -(a_but?20:0), 20, 
-					 &node->custom1, 0, 0, 0, 0, "");
-		uiButSetFunc(bt, node_but_title_cb, node, bt);
-		/* Alpha option, composite */
-		if(a_but)
-			uiDefIconButS(block, TOG, B_NODE_EXEC, ICON_IMAGE_RGB_ALPHA,
-				  (short)butr->xmax-20, (short)butr->ymin, 20, 20, 
-				  &node->custom2, 0, 0, 0, 0, "Include Alpha of 2nd input in this operation");
+		uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", 
+				  (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 12, 
+				  sock->ns.vec, 0.0f, 1.0f, 3, 0, "");
+		uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", 
+				  (short)butr->xmin, (short)butr->ymin+15, butr->xmax-butr->xmin, butr->xmax-butr->xmin -15 -15, 
+				  sock->ns.vec, 0.0f, 1.0f, 2, 0, "");
+		uiDefButF(block, COL, B_NOP, "",		
+				  (short)butr->xmin, (short)butr->ymax-12, butr->xmax-butr->xmin, 12, 
+				  sock->ns.vec, 0.0, 0.0, -1, 0, "");
+		/* the -1 above prevents col button to popup a color picker */
+		
+		uiBlockSetEmboss(block, UI_EMBOSS);
 	}
-	return 20;
 }
 
-static int node_buts_time(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_mix_rgb(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block) {
-		CurveMapping *cumap= node->storage;
-		short dx= (short)((butr->xmax-butr->xmin)/2);
-		butr->ymin += 26;
+	bNodeTree *ntree= (bNodeTree*)ptr->id.data;
+	uiLayout *row;
 
-		curvemap_buttons(block, node->storage, 's', B_NODE_EXEC, B_REDR, butr);
-		
-		if(cumap) {
-			//cumap->flag |= CUMA_DRAW_CFRA;
-			//if(node->custom1<node->custom2)
-			//	cumap->sample[0]= (float)(CFRA - node->custom1)/(float)(node->custom2-node->custom1);
-		}
+	row= uiLayoutRow(layout, 1);
 
-		uiBlockBeginAlign(block);
-		uiDefButS(block, NUM, B_NODE_EXEC, "Sta:",
-				  (short)butr->xmin, (short)butr->ymin-22, dx, 19, 
-				  &node->custom1, 1.0, 20000.0, 0, 0, "Start frame");
-		uiDefButS(block, NUM, B_NODE_EXEC, "End:",
-				  (short)butr->xmin+dx, (short)butr->ymin-22, dx, 19, 
-				  &node->custom2, 1.0, 20000.0, 0, 0, "End frame");
-	}
+	uiItemR(row, "", 0, ptr, "blend_type", 0);
+	if(ntree->type == NTREE_COMPOSIT)
+		uiItemR(row, "", ICON_IMAGE_RGB_ALPHA, ptr, "alpha", 0);
+}
+
+static void node_buts_time(uiLayout *layout, PointerRNA *ptr)
+{
+	uiLayout *row;
+#if 0
+	/* XXX no context access here .. */
+	bNode *node= ptr->data;
+	CurveMapping *cumap= node->storage;
 	
-	return node->width-NODE_DY;
+	if(cumap) {
+		cumap->flag |= CUMA_DRAW_CFRA;
+		if(node->custom1<node->custom2)
+			cumap->sample[0]= (float)(CFRA - node->custom1)/(float)(node->custom2-node->custom1);
+	}
+#endif
+
+	uiTemplateCurveMapping(layout, ptr, "curve", 's', 0);
+
+	row= uiLayoutRow(layout, 1);
+	uiItemR(row, "Sta", 0, ptr, "start", 0);
+	uiItemR(row, "End", 0, ptr, "end", 0);
 }
 
-static int node_buts_valtorgb(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_valtorgb(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block) {
-		if(node->storage) {
-			uiBlockColorbandButtons(block, node->storage, butr, B_NODE_EXEC);
-		}
+	uiBlock *block= uiLayoutFreeBlock(layout);
+	bNode *node= ptr->data;
+	rctf *butr= &node->butr;
+
+	if(node->storage) {
+		uiBlockColorbandButtons(block, node->storage, butr, B_NODE_EXEC);
 	}
-	return 40;
 }
 
-static int node_buts_curvevec(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_curvevec(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block) {
-		curvemap_buttons(block, node->storage, 'v', B_NODE_EXEC, B_REDR, butr);
-	}	
-	return (int)(node->width-NODE_DY);
+	uiTemplateCurveMapping(layout, ptr, "mapping", 'v', 0);
 }
 
 static float *_sample_col= NULL;	// bad bad, 2.5 will do better?
@@ -311,33 +298,31 @@
 	_sample_col= col;
 }
 
-static int node_buts_curvecol(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_curvecol(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block) {
-		CurveMapping *cumap= node->storage;
-		if(_sample_col) {
-			cumap->flag |= CUMA_DRAW_SAMPLE;
-			VECCOPY(cumap->sample, _sample_col);
-		}
-		else 
-			cumap->flag &= ~CUMA_DRAW_SAMPLE;
+	bNode *node= ptr->data;
+	CurveMapping *cumap= node->storage;
 
-		curvemap_buttons(block, node->storage, 'c', B_NODE_EXEC, B_REDR, butr);
-	}	
-	return (int)(node->width-NODE_DY);
+	if(_sample_col) {
+		cumap->flag |= CUMA_DRAW_SAMPLE;
+		VECCOPY(cumap->sample, _sample_col);
+	}
+	else 
+		cumap->flag &= ~CUMA_DRAW_SAMPLE;
+
+	uiTemplateCurveMapping(layout, ptr, "mapping", 'c', 0);
 }
 
-static int node_buts_normal(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+static void node_buts_normal(uiLayout *layout, PointerRNA *ptr)
 {
-	if(block) {
-		bNodeSocket *sock= node->outputs.first;		/* first socket stores normal */
-		
-		uiDefButF(block, BUT_NORMAL, B_NODE_EXEC, "", 
-				  (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, butr->ymax-butr->ymin, 
-				  sock->ns.vec, 0.0f, 1.0f, 0, 0, "");
-		
-	}	
-	return (int)(node->width-NODE_DY);
+	uiBlock *block= uiLayoutFreeBlock(layout);
+	bNode *node= ptr->data;
+	rctf *butr= &node->butr;
+	bNodeSocket *sock= node->outputs.first;		/* first socket stores normal */
+	
+	uiDefButF(block, BUT_NORMAL, B_NODE_EXEC, "", 
+			  (short)butr->xmin, (short)butr->xmin, butr->xmax-butr->xmin, butr->xmax-butr->xmin, 
+			  sock->ns.vec, 0.0f, 1.0f, 0, 0, "");
 }
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list