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. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to