2.5 Nodes:
[blender.git] / source / blender / editors / space_node / drawnode.c
index 466d1aaa28195a1bd6b39bce610def97ff22291d..403a8d1a5915a3f8c4f151bbba20dcc1f6f084e0 100644 (file)
@@ -22,7 +22,7 @@
  *
  * The Original Code is: all of this file.
  *
- * Contributor(s): David Millan Escriva, Juho Vepsäläinen, Bob Holcomb
+ * Contributor(s): David Millan Escriva, Juho Vepsäläinen, Bob Holcomb, Thomas Dinges
  *
  * ***** END GPL LICENSE BLOCK *****
  */
@@ -89,6 +89,7 @@
 #include "UI_resources.h"
 
 #include "RE_pipeline.h"
+#include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 
 #include "node_intern.h"
@@ -147,16 +148,6 @@ static void node_ID_title_cb(bContext *C, void *node_v, void *unused_v)
        }
 }
 
-
-static void node_but_title_cb(bContext *C, void *node_v, void *but_v)
-{
-       // bNode *node= node_v;
-       // XXX uiBut *bt= but_v;
-       // XXX BLI_strncpy(node->name, bt->drawstr, NODE_MAXSTR);
-       
-       // allqueue(REDRAWNODE, 0);
-}
-
 #if 0
 /* XXX not used yet, make compiler happy :) */
 static void node_group_alone_cb(bContext *C, void *node_v, void *unused_v)
@@ -172,7 +163,7 @@ static void node_group_alone_cb(bContext *C, void *node_v, void *unused_v)
 
 static void node_buts_group(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
 
@@ -206,7 +197,7 @@ static void node_buts_group(uiLayout *layout, PointerRNA *ptr)
 
 static void node_buts_value(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        bNodeSocket *sock= node->outputs.first;         /* first socket stores value */
@@ -218,7 +209,7 @@ static void node_buts_value(uiLayout *layout, PointerRNA *ptr)
 
 static void node_buts_rgb(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        bNodeSocket *sock= node->outputs.first;         /* first socket stores value */
@@ -243,12 +234,12 @@ static void node_buts_rgb(uiLayout *layout, PointerRNA *ptr)
 }
 
 static void node_buts_mix_rgb(uiLayout *layout, PointerRNA *ptr)
-{
-       bNodeTree *ntree= (bNodeTree*)ptr->id.data;
+{      
        uiLayout *row;
 
-       row= uiLayoutRow(layout, 1);
+       bNodeTree *ntree= (bNodeTree*)ptr->id.data;
 
+       row= uiLayoutRow(layout, 1);
        uiItemR(row, "", 0, ptr, "blend_type", 0);
        if(ntree->type == NTREE_COMPOSIT)
                uiItemR(row, "", ICON_IMAGE_RGB_ALPHA, ptr, "alpha", 0);
@@ -278,7 +269,7 @@ static void node_buts_time(uiLayout *layout, PointerRNA *ptr)
 
 static void node_buts_valtorgb(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
 
@@ -315,7 +306,7 @@ static void node_buts_curvecol(uiLayout *layout, PointerRNA *ptr)
 
 static void node_buts_normal(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        bNodeSocket *sock= node->outputs.first;         /* first socket stores normal */
@@ -388,10 +379,7 @@ static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v)
 
 static void node_buts_texture(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
        bNode *node= ptr->data;
-       bNodeTree *ntree= ptr->id.data;
-       rctf *butr= &node->butr;
 
        short multi = (
                node->id &&
@@ -400,47 +388,19 @@ static void node_buts_texture(uiLayout *layout, PointerRNA *ptr)
                (node->type != TEX_NODE_TEXTURE)
        );
        
-       uiBut *bt;
-       char *strp;
-       short width = (short)(butr->xmax - butr->xmin);
-       
-       /* browse button texture */
-       uiBlockBeginAlign(block);
-       IDnames_to_pupstring(&strp, NULL, "", &(G.main->tex), NULL, NULL);
-       node->menunr= 0;
-       bt= uiDefButS(block, MENU, B_NODE_EXEC, strp, 
-                       butr->xmin, butr->ymin+(multi?30:0), 20, 19, 
-                                 &node->menunr, 0, 0, 0, 0, "Browse texture");
-       uiButSetFunc(bt, node_browse_tex_cb, ntree, node);
-       if(strp) MEM_freeN(strp);
-       
-       if(node->id) {
-               bt= uiDefBut(block, TEX, B_NOP, "TE:",
-                               butr->xmin+19, butr->ymin+(multi?30:0), butr->xmax-butr->xmin-19, 19, 
-                                        node->id->name+2, 0.0, 19.0, 0, 0, "Texture name");
-               uiButSetFunc(bt, node_ID_title_cb, node, NULL);
-       }
-       uiBlockEndAlign(block);
+       uiItemR(layout, "", 0, ptr, "texture", 0);
        
        if(multi) {
-               char *menustr = ntreeTexOutputMenu(((Tex*)node->id)->nodetree);
-               uiDefButS(block, MENU, B_MATPRV, menustr, butr->xmin, butr->ymin, width, 19, &node->custom1, 0, 0, 0, 0, "Which output to use, for multi-output textures");
-               free(menustr);
+               /* Number Drawing not optimal here, better have a list*/
+               uiItemR(layout, "", 0, ptr, "node_output", 0);
        }
 }
 
 static void node_buts_math(uiLayout *layout, PointerRNA *ptr)
 { 
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       uiBut *bt; 
-
-       bt=uiDefButS(block, MENU, B_NODE_EXEC,  "Add %x0|Subtract %x1|Multiply %x2|Divide %x3|Sine %x4|Cosine %x5|Tangent %x6|Arcsine %x7|Arccosine %x8|Arctangent %x9|Power %x10|Logarithm %x11|Minimum %x12|Maximum %x13|Round %x14|Less Than %x15|Greater Than %x16", butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, &node->custom1, 0, 0, 0, 0, ""); 
-       uiButSetFunc(bt, node_but_title_cb, node, bt); 
+       uiItemR(layout, "", 0, ptr, "operation", 0);
 }
 
-
 /* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */
 
 static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
@@ -543,7 +503,7 @@ static void node_texmap_cb(bContext *C, void *texmap_v, void *unused_v)
 
 static void node_shader_buts_material(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        bNodeTree *ntree= ptr->id.data;
        rctf *butr= &node->butr;
@@ -615,7 +575,7 @@ static void node_shader_buts_material(uiLayout *layout, PointerRNA *ptr)
 
 static void node_shader_buts_mapping(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        TexMapping *texmap= node->storage;
@@ -663,18 +623,12 @@ static void node_shader_buts_mapping(uiLayout *layout, PointerRNA *ptr)
 
 static void node_shader_buts_vect_math(uiLayout *layout, PointerRNA *ptr)
 { 
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       uiBut *bt; 
-
-       bt=uiDefButS(block, MENU, B_NODE_EXEC,  "Add %x0|Subtract %x1|Average %x2|Dot Product %x3 |Cross Product %x4|Normalize %x5", butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, &node->custom1, 0, 0, 0, 0, ""); 
-       uiButSetFunc(bt, node_but_title_cb, node, bt); 
+       uiItemR(layout, "", 0, ptr, "operation", 0);
 }
 
 static void node_shader_buts_geometry(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        uiBut *but;
@@ -693,7 +647,7 @@ static void node_shader_buts_geometry(uiLayout *layout, PointerRNA *ptr)
 
 static void node_shader_buts_dynamic(uiLayout *layout, PointerRNA *ptr)
 { 
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        bNodeTree *ntree= ptr->id.data;
        rctf *butr= &node->butr;
@@ -785,8 +739,6 @@ static void node_shader_set_butfunc(bNodeType *ntype)
 
 /* ****************** BUTTON CALLBACKS FOR COMPOSITE NODES ***************** */
 
-
-
 static void node_browse_image_cb(bContext *C, void *ntree_v, void *node_v)
 {
        bNodeTree *ntree= ntree_v;
@@ -866,7 +818,7 @@ static void image_layer_cb(bContext *C, void *ima_v, void *iuser_v)
 
 static void node_composit_buts_image(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        bNodeTree *ntree= ptr->id.data;
        rctf *butr= &node->butr;
@@ -1034,7 +986,7 @@ static void node_browse_scene_cb(bContext *C, void *ntree_v, void *node_v)
 
 static void node_composit_buts_renderlayers(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        bNodeTree *ntree= ptr->id.data;
        rctf *butr= &node->butr;
@@ -1076,375 +1028,179 @@ static void node_composit_buts_renderlayers(uiLayout *layout, PointerRNA *ptr)
        }
 }
 
-static void node_blur_relative_cb(bContext *C, void *node, void *poin2)
-{
-       bNode *nodev= node;
-       NodeBlurData *nbd= nodev->storage;
-       if(nbd->image_in_width != 0){
-               if(nbd->relative){ /* convert absolute values to relative */
-                       nbd->percentx= (float)(nbd->sizex)/nbd->image_in_width;
-                       nbd->percenty= (float)(nbd->sizey)/nbd->image_in_height;
-               }else{ /* convert relative values to absolute */
-                       nbd->sizex= (int)(nbd->percentx*nbd->image_in_width);
-                       nbd->sizey= (int)(nbd->percenty*nbd->image_in_height);
-               }
-       }
-       // allqueue(REDRAWNODE, 0);
-}
-static void node_blur_update_sizex_cb(bContext *C, void *node, void *poin2)
-{
-       bNode *nodev= node;
-       NodeBlurData *nbd= nodev->storage;
-
-       nbd->sizex= (int)(nbd->percentx*nbd->image_in_width);
-}
-static void node_blur_update_sizey_cb(bContext *C, void *node, void *poin2)
-{
-       bNode *nodev= node;
-       NodeBlurData *nbd= nodev->storage;
 
-       nbd->sizey= (int)(nbd->percenty*nbd->image_in_height);
-}
 static void node_composit_buts_blur(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeBlurData *nbd= node->storage;
-       uiBut *bt;
-       short dy= butr->ymin+58;
-       short dx= (butr->xmax-butr->xmin)/2;
-       char str[256];
+       uiLayout *col;
        
-       uiBlockBeginAlign(block);
-       sprintf(str, "Filter Type%%t|Flat %%x%d|Tent %%x%d|Quad %%x%d|Cubic %%x%d|Gauss %%x%d|Fast Gauss%%x%d|CatRom %%x%d|Mitch %%x%d", R_FILTER_BOX, R_FILTER_TENT, R_FILTER_QUAD, R_FILTER_CUBIC, R_FILTER_GAUSS, R_FILTER_FAST_GAUSS, R_FILTER_CATROM, R_FILTER_MITCH);
-       uiDefButS(block, MENU, B_NODE_EXEC,str,
-                         butr->xmin, dy, dx*2, 19, 
-                         &nbd->filtertype, 0, 0, 0, 0, "Set sampling filter for blur");
-       dy-=19;
-       if (nbd->filtertype != R_FILTER_FAST_GAUSS) { 
-               uiDefButC(block, TOG, B_NODE_EXEC, "Bokeh",
-                               butr->xmin, dy, dx, 19, 
-                               &nbd->bokeh, 0, 0, 0, 0, "Uses circular filter, warning it's slow!");
-               uiDefButC(block, TOG, B_NODE_EXEC, "Gamma",
-                               butr->xmin+dx, dy, dx, 19, 
-                               &nbd->gamma, 0, 0, 0, 0, "Applies filter on gamma corrected values");
-       } else {
-               uiBlockEndAlign(block);
-               uiBlockBeginAlign(block);
+       col= uiLayoutColumn(layout, 0);
+       
+       uiItemR(col, "", 0, ptr, "filter_type", 0);
+       /* Only for "Fast Gaussian" */
+       if (RNA_enum_get(ptr, "filter_type")!= 7) {
+               uiItemR(col, NULL, 0, ptr, "bokeh", 0);
+               uiItemR(col, NULL, 0, ptr, "gamma", 0);
        }
-       dy-=19;
-       bt= uiDefButS(block, TOG, B_NOP, "Relative",
-                         butr->xmin, dy, dx*2, 19,
-                         &nbd->relative, 0, 0, 0, 0, "Use relative (percent) values to define blur radius");
-       uiButSetFunc(bt, node_blur_relative_cb, node, NULL);
-
-       dy-=19;
-       if(nbd->relative) {
-               bt= uiDefButF(block, NUM, B_NODE_EXEC, "X:",
-                                        butr->xmin, dy, dx, 19, 
-                                        &nbd->percentx, 0.0f, 1.0f, 0, 0, "");
-               uiButSetFunc(bt, node_blur_update_sizex_cb, node, NULL);
-               bt= uiDefButF(block, NUM, B_NODE_EXEC, "Y:",
-                                        butr->xmin+dx, dy, dx, 19, 
-                                        &nbd->percenty, 0.0f, 1.0f, 0, 0, "");
-               uiButSetFunc(bt, node_blur_update_sizey_cb, node, NULL);
+       
+       uiItemR(col, NULL, 0, ptr, "relative", 0);
+       col= uiLayoutColumn(layout, 1);
+       if (RNA_boolean_get(ptr, "relative")== 1) {
+               uiItemR(col, "X", 0, ptr, "factor_x", 0);
+               uiItemR(col, "Y", 0, ptr, "factor_y", 0);
        }
        else {
-               uiDefButS(block, NUM, B_NODE_EXEC, "X:",
-                                        butr->xmin, dy, dx, 19, 
-                                        &nbd->sizex, 0, 256, 0, 0, "");
-               uiDefButS(block, NUM, B_NODE_EXEC, "Y:",
-                                        butr->xmin+dx, dy, dx, 19, 
-                                        &nbd->sizey, 0, 256, 0, 0, "");
+               uiItemR(col, "X", 0, ptr, "sizex", 0);
+               uiItemR(col, "Y", 0, ptr, "sizey", 0);
        }
-       uiBlockEndAlign(block);
 }
 
 static void node_composit_buts_dblur(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeDBlurData *ndbd = node->storage;
-       short dy = butr->ymin + 171;
-       short dx = butr->xmax - butr->xmin;
-       short halfdx= (short)dx/2;
-
-       uiBlockBeginAlign(block);
-       uiDefButS(block, NUM, B_NODE_EXEC, "Iterations:",
-                       butr->xmin, dy, dx, 19,
-                       &ndbd->iter, 1, 32, 10, 0, "Amount of iterations");
-       uiDefButC(block, TOG, B_NODE_EXEC, "Wrap",
-                       butr->xmin, dy-= 19, dx, 19, 
-                       &ndbd->wrap, 0, 0, 0, 0, "Wrap blur");
-       uiBlockEndAlign(block);
-
-       dy-= 9;
-
-       uiDefBut(block, LABEL, B_NOP, "Center", butr->xmin, dy-= 19, dx, 19, NULL, 0.0f, 0.0f, 0, 0, "");
-
-       uiBlockBeginAlign(block);
-       uiDefButF(block, NUM, B_NODE_EXEC, "X:",
-                       butr->xmin, dy-= 19, halfdx, 19,
-                       &ndbd->center_x, 0.0f, 1.0f, 10, 0, "X center in percents");
-       uiDefButF(block, NUM, B_NODE_EXEC, "Y:",
-                       butr->xmin+halfdx, dy, halfdx, 19,
-                       &ndbd->center_y, 0.0f, 1.0f, 10, 0, "Y center in percents");
-       uiBlockEndAlign(block);
-
-       dy-= 9;
-
-       uiBlockBeginAlign(block);
-       uiDefButF(block, NUM, B_NODE_EXEC, "Distance:",
-                       butr->xmin, dy-= 19, dx, 19,
-                       &ndbd->distance, -1.0f, 1.0f, 10, 0, "Amount of which the image moves");
-       uiDefButF(block, NUM, B_NODE_EXEC, "Angle:",
-                       butr->xmin, dy-= 19, dx, 19,
-                       &ndbd->angle, 0.0f, 360.0f, 1000, 0, "Angle in which the image will be moved");
-       uiBlockEndAlign(block);
-
-       dy-= 9;
-
-       uiDefButF(block, NUM, B_NODE_EXEC, "Spin:",
-                       butr->xmin, dy-= 19, dx, 19,
-                       &ndbd->spin, -360.0f, 360.0f, 1000, 0, "Angle that is used to spin the image");
-
-       dy-= 9;
-
-       uiDefButF(block, NUM, B_NODE_EXEC, "Zoom:",
-                       butr->xmin, dy-= 19, dx, 19,
-                       &ndbd->zoom, 0.0f, 100.0f, 100, 0, "Amount of which the image is zoomed");
+       uiLayout *col;
+       
+       uiItemR(layout, NULL, 0, ptr, "iterations", 0);
+       uiItemR(layout, NULL, 0, ptr, "wrap", 0);
+       
+       col= uiLayoutColumn(layout, 1);
+       uiItemL(col, "Center:", 0);
+       uiItemR(col, "X", 0, ptr, "center_x", 0);
+       uiItemR(col, "Y", 0, ptr, "center_y", 0);
+       
+       uiItemS(layout);
+       
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "distance", 0);
+       uiItemR(col, NULL, 0, ptr, "angle", 0);
+       
+       uiItemS(layout);
+       
+       uiItemR(layout, NULL, 0, ptr, "spin", 0);
+       uiItemR(layout, NULL, 0, ptr, "zoom", 0);
 }
 
 static void node_composit_buts_bilateralblur(uiLayout *layout, PointerRNA *ptr)
-{
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeBilateralBlurData *nbbd= node->storage;
-       short dy= butr->ymin+38;
-       short dx= (butr->xmax-butr->xmin);
+{      
+       uiLayout *col;
        
-       uiBlockBeginAlign(block);
-       uiDefButS(block, NUM, B_NODE_EXEC, "Iterations:",
-                        butr->xmin, dy, dx, 19, 
-                        &nbbd->iter, 1, 128, 0, 0, "Amount of iterations");
-       dy-=19;
-       uiDefButF(block, NUM, B_NODE_EXEC, "Color Sigma:",
-                         butr->xmin, dy, dx, 19, 
-                         &nbbd->sigma_color,0.01, 3, 10, 0, "Sigma value used to modify color");
-       dy-=19;
-       uiDefButF(block, NUM, B_NODE_EXEC, "Space Sigma:",
-                         butr->xmin, dy, dx, 19, 
-                         &nbbd->sigma_space ,0.01, 30, 10, 0, "Sigma value used to modify space");
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "iterations", 0);
+       uiItemR(col, NULL, 0, ptr, "sigma_color", 0);
+       uiItemR(col, NULL, 0, ptr, "sigma_space", 0);
 }
 
 /* qdn: defocus node */
 static void node_composit_buts_defocus(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeDefocus *nqd = node->storage;
-       short dy = butr->ymin + 209;
-       short dx = butr->xmax - butr->xmin; 
-       char* mstr1 = "Bokeh Type%t|Octagon %x8|Heptagon %x7|Hexagon %x6|Pentagon %x5|Square %x4|Triangle %x3|Disk %x0";
-
-       uiDefBut(block, LABEL, B_NOP, "Bokeh Type", butr->xmin, dy, dx, 19, NULL, 0, 0, 0, 0, "");
-       uiDefButC(block, MENU, B_NODE_EXEC, mstr1,
-                         butr->xmin, dy-19, dx, 19,
-                         &nqd->bktype, 0, 0, 0, 0, "Bokeh type");
-       if (nqd->bktype) { /* for some reason rotating a disk doesn't seem to work... ;) */
-               uiDefButC(block, NUM, B_NODE_EXEC, "Rotate:",
-                                 butr->xmin, dy-38, dx, 19,
-                                 &nqd->rotation, 0, 90, 0, 0, "Bokeh shape rotation offset in degrees");
-       }
-       uiDefButC(block, TOG, B_NODE_EXEC, "Gamma Correct",
-                         butr->xmin, dy-57, dx, 19,
-                         &nqd->gamco, 0, 0, 0, 0, "Enable gamma correction before and after main process");
-       if (nqd->no_zbuf==0) {
-               // only needed for zbuffer input
-               uiDefButF(block, NUM, B_NODE_EXEC, "fStop:",
-                                 butr->xmin, dy-76, dx, 19,
-                                 &nqd->fstop, 0.5, 128, 10, 0, "Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius");
-       }
-       uiDefButF(block, NUM, B_NODE_EXEC, "Maxblur:",
-                         butr->xmin, dy-95, dx, 19,
-                         &nqd->maxblur, 0, 10000, 1000, 0, "blur limit, maximum CoC radius, 0=no limit");
-       uiDefButF(block, NUM, B_NODE_EXEC, "BThreshold:",
-                         butr->xmin, dy-114, dx, 19,
-                         &nqd->bthresh, 0, 100, 100, 0, "CoC radius threshold, prevents background bleed on in-focus midground, 0=off");
-       uiDefButC(block, TOG, B_NODE_EXEC, "Preview",
-                         butr->xmin, dy-142, dx, 19,
-                         &nqd->preview, 0, 0, 0, 0, "Enable sampling mode, useful for preview when using low samplecounts");
-       if (nqd->preview) {
-               /* only visible when sampling mode enabled */
-               uiDefButS(block, NUM, B_NODE_EXEC, "Samples:",
-                                 butr->xmin, dy-161, dx, 19,
-                                 &nqd->samples, 16, 256, 0, 0, "Number of samples (16=grainy, higher=less noise)");
-       }
-       uiDefButS(block, TOG, B_NODE_EXEC, "No zbuffer",
-                         butr->xmin, dy-190, dx, 19,
-                         &nqd->no_zbuf, 0, 0, 0, 0, "Enable when using an image as input instead of actual zbuffer (auto enabled if node not image based, eg. time node)");
-       if (nqd->no_zbuf) {
-               uiDefButF(block, NUM, B_NODE_EXEC, "Zscale:",
-                               butr->xmin, dy-209, dx, 19,
-                               &nqd->scale, 0, 1000, 100, 0, "Scales the Z input when not using a zbuffer, controls maximum blur designated by the color white or input value 1");
-       }
-}
+       uiLayout *sub, *col;
+       
+       col= uiLayoutColumn(layout, 0);
+       uiItemL(col, "Bokeh Type:", 0);
+       uiItemR(col, "", 0, ptr, "bokeh", 0);
+       uiItemR(col, NULL, 0, ptr, "angle", 0);
+
+       uiItemR(layout, NULL, 0, ptr, "gamma_correction", 0);
 
+       col = uiLayoutColumn(layout, 0);
+       uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_zbuffer")==0);
+       uiItemR(col, NULL, 0, ptr, "f_stop", 0);
+
+       uiItemR(layout, NULL, 0, ptr, "max_blur", 0);
+       uiItemR(layout, NULL, 0, ptr, "threshold", 0);
+       
+       // Preview
+       col = uiLayoutColumn(layout, 0);
+       uiItemR(col, NULL, 0, ptr, "preview", 0);
+       sub = uiLayoutColumn(col, 0);
+       uiLayoutSetActive(sub, RNA_boolean_get(ptr, "preview"));
+       uiItemR(sub, NULL, 0, ptr, "samples", 0);
+       
+       // Z-Buffer
+       col = uiLayoutColumn(layout, 0);
+       uiItemR(col, NULL, 0, ptr, "use_zbuffer", 0);
+       sub = uiLayoutColumn(col, 0);
+       uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_zbuffer"));
+       uiItemR(sub, NULL, 0, ptr, "z_scale", 0);
+}
 
 /* qdn: glare node */
 static void node_composit_buts_glare(uiLayout *layout, PointerRNA *ptr)
-{
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeGlare *ndg = node->storage;
-       short dy = butr->ymin + 152, dx = butr->xmax - butr->xmin; 
-       char* mn1 = "Type%t|Ghosts%x3|Streaks%x2|Fog Glow%x1|Simple Star%x0";
-       char* mn2 = "Quality/Speed%t|High/Slow%x0|Medium/Medium%x1|Low/Fast%x2";
-       uiDefButC(block, MENU, B_NODE_EXEC, mn1,
-                         butr->xmin, dy, dx, 19,
-                         &ndg->type, 0, 0, 0, 0, "Glow/Flare/Bloom type");
-       uiDefButC(block, MENU, B_NODE_EXEC, mn2,
-                         butr->xmin, dy-19, dx, 19,
-                         &ndg->quality, 0, 0, 0, 0,
-                         "Quality speed trade off, if not set to high quality, effect will be applied to low-res copy of source image");
-       if (ndg->type != 1) {
-               uiDefButC(block, NUM, B_NODE_EXEC, "Iterations:",
-                                 butr->xmin, dy-38, dx, 19,
-                                 &ndg->iter, 2, 5, 1, 0,
-                                 "higher values will generate longer/more streaks/ghosts");
-               if (ndg->type != 0)
-                       uiDefButF(block, NUM, B_NODE_EXEC, "ColMod:",
-                                         butr->xmin, dy-57, dx, 19,
-                                         &ndg->colmod, 0, 1, 10, 0,
-                                         "Amount of Color Modulation, modulates colors of streaks and ghosts for a spectral dispersion effect");
+{      
+       uiItemR(layout, "", 0, ptr, "glare_type", 0);
+       uiItemR(layout, "", 0, ptr, "quality", 0);
+
+       if (RNA_enum_get(ptr, "glare_type")!= 1) {
+               uiItemR(layout, NULL, 0, ptr, "iterations", 0);
+       
+               if (RNA_enum_get(ptr, "glare_type")!= 0) 
+                       uiItemR(layout, NULL, 0, ptr, "color_modulation", UI_ITEM_R_SLIDER);
        }
-       uiDefButF(block, NUM, B_NODE_EXEC, "Mix:",
-                         butr->xmin, dy-76, dx, 19,
-                         &ndg->mix, -1, 1, 10, 0,
-                         "Mix balance, -1 is original image only, 0 is exact 50/50 mix, 1 is processed image only");
-       uiDefButF(block, NUM, B_NODE_EXEC, "Threshold:",
-                         butr->xmin, dy-95, dx, 19,
-                         &ndg->threshold, 0, 1000, 10, 0,
-                         "Brightness threshold, the glarefilter will be applied only to pixels brighter than this value");
-       if ((ndg->type == 2) || (ndg->type == 0))
-       {
-               if (ndg->type == 2) {
-                       uiDefButC(block, NUM, B_NODE_EXEC, "streaks:",
-                                         butr->xmin, dy-114, dx, 19,
-                                         &ndg->angle, 2, 16, 1000, 0,
-                                         "Total number of streaks");
-                       uiDefButC(block, NUM, B_NODE_EXEC, "AngOfs:",
-                                         butr->xmin, dy-133, dx, 19,
-                                         &ndg->angle_ofs, 0, 180, 1000, 0,
-                                         "Streak angle rotation offset in degrees");
-               }
-               uiDefButF(block, NUM, B_NODE_EXEC, "Fade:",
-                                 butr->xmin, dy-152, dx, 19,
-                                 &ndg->fade, 0.75, 1, 5, 0,
-                                 "Streak fade out factor");
+       
+       uiItemR(layout, NULL, 0, ptr, "mix", 0);                
+       uiItemR(layout, NULL, 0, ptr, "threshold", 0);
+
+       if (RNA_enum_get(ptr, "glare_type")== 2) {
+               uiItemR(layout, NULL, 0, ptr, "streaks", 0);            
+               uiItemR(layout, NULL, 0, ptr, "angle_offset", 0);
+       }
+       if (RNA_enum_get(ptr, "glare_type")== 0 || RNA_enum_get(ptr, "glare_type")== 2) {
+               uiItemR(layout, NULL, 0, ptr, "fade", UI_ITEM_R_SLIDER);
+               
+               if (RNA_enum_get(ptr, "glare_type")== 0) 
+                       uiItemR(layout, NULL, 0, ptr, "rotate_45", 0);
+       }
+       if (RNA_enum_get(ptr, "glare_type")== 1) {
+               uiItemR(layout, NULL, 0, ptr, "size", 0);
        }
-       if (ndg->type == 0)
-               uiDefButC(block, TOG, B_NODE_EXEC, "Rot45",
-                                 butr->xmin, dy-114, dx, 19,
-                                 &ndg->angle, 0, 0, 0, 0,
-                                 "simple star filter, add 45 degree rotation offset");
-       if ((ndg->type == 1) || (ndg->type > 3))        // PBGH and fog glow
-               uiDefButC(block, NUM, B_NODE_EXEC, "Size:",
-                                 butr->xmin, dy-114, dx, 19,
-                                 &ndg->size, 6, 9, 1000, 0,
-                                 "glow/glare size (not actual size, relative to initial size of bright area of pixels)");
 }
 
 /* qdn: tonemap node */
 static void node_composit_buts_tonemap(uiLayout *layout, PointerRNA *ptr)
-{
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeTonemap *ntm = node->storage;
-       short dy = butr->ymin + 76, dx = butr->xmax - butr->xmin; 
-       char* mn = "Type%t|R/D Photoreceptor%x1|Rh Simple%x0";
-       
-       uiBlockBeginAlign(block);
-       uiDefButI(block, MENU, B_NODE_EXEC, mn,
-                         butr->xmin, dy, dx, 19,
-                         &ntm->type, 0, 0, 0, 0,
-                         "Tone mapping type");
-       if (ntm->type == 0) {
-               uiDefButF(block, NUM, B_NODE_EXEC, "Key:",
-                                 butr->xmin, dy-19, dx, 19,
-                                 &ntm->key, 0, 1, 5, 0,
-                                 "The value the average luminance is mapped to");
-               uiDefButF(block, NUM, B_NODE_EXEC, "Offset:",
-                                 butr->xmin, dy-38, dx, 19,
-                                 &ntm->offset, 0.001, 10, 5, 0,
-                                 "Tonemap offset, normally always 1, but can be used as an extra control to alter the brightness curve");
-               uiDefButF(block, NUM, B_NODE_EXEC, "Gamma:",
-                                 butr->xmin, dy-57, dx, 19,
-                                 &ntm->gamma, 0.001, 3, 5, 0,
-                                 "Gamma factor, if not used, set to 1");
+{      
+       uiLayout *col;
+
+       col = uiLayoutColumn(layout, 0);
+       uiItemR(col, "", 0, ptr, "tonemap_type", 0);
+       if (RNA_enum_get(ptr, "tonemap_type")== 0) {
+               uiItemR(col, NULL, 0, ptr, "key", UI_ITEM_R_SLIDER);
+               uiItemR(col, NULL, 0, ptr, "offset", 0);
+               uiItemR(col, NULL, 0, ptr, "gamma", 0);
        }
        else {
-               uiDefButF(block, NUM, B_NODE_EXEC, "Intensity:",
-                                 butr->xmin, dy-19, dx, 19,
-                                 &ntm->f, -8, 8, 10, 0, "if less than zero, darkens image, otherwise makes it brighter");
-               uiDefButF(block, NUM, B_NODE_EXEC, "Contrast:",
-                                 butr->xmin, dy-38, dx, 19,
-                                 &ntm->m, 0, 1, 5, 0, "Set to 0 to use estimate from input image");
-               uiDefButF(block, NUM, B_NODE_EXEC, "Adaptation:",
-                                 butr->xmin, dy-57, dx, 19,
-                                 &ntm->a, 0, 1, 5, 0, "if 0, global, if 1, based on pixel intensity");
-               uiDefButF(block, NUM, B_NODE_EXEC, "ColCorrect:",
-                                 butr->xmin, dy-76, dx, 19,
-                                 &ntm->c, 0, 1, 5, 0, "color correction, if 0, same for all channels, if 1, each independent");
+               uiItemR(col, NULL, 0, ptr, "intensity", 0);
+               uiItemR(col, NULL, 0, ptr, "contrast", UI_ITEM_R_SLIDER);
+               uiItemR(col, NULL, 0, ptr, "adaptation", UI_ITEM_R_SLIDER);
+               uiItemR(col, NULL, 0, ptr, "correction", UI_ITEM_R_SLIDER);
        }
-       uiBlockEndAlign(block);
 }
 
 /* qdn: lens distortion node */
 static void node_composit_buts_lensdist(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeLensDist *nld = node->storage;
-       short dy = butr->ymin + 19, dx = butr->xmax - butr->xmin; 
-       uiBlockBeginAlign(block);
-       uiDefButS(block, TOG, B_NODE_EXEC, "Projector",
-                         butr->xmin, dy, dx, 19,
-                         &nld->proj, 0, 0, 0, 0,
-                         "Enable/disable projector mode, effect is applied in horizontal direction only");
-       if (!nld->proj) {
-               uiDefButS(block, TOG, B_NODE_EXEC, "Jitter",
-                                 butr->xmin, dy-19, dx/2, 19,
-                                 &nld->jit, 0, 0, 0, 0,
-                                 "Enable/disable jittering, faster, but also noisier");
-               uiDefButS(block, TOG, B_NODE_EXEC, "Fit",
-                                 butr->xmin+dx/2, dy-19, dx/2, 19,
-                                 &nld->fit, 0, 0, 0, 0,
-                                 "For positive distortion factor only, scale image such that black areas are not visible");
-       }
-       uiBlockEndAlign(block);
-}
+       uiLayout *col;
+
+       col= uiLayoutColumn(layout, 0);
+       uiItemR(col, NULL, 0, ptr, "projector", 0);
 
+       col = uiLayoutColumn(col, 0);
+       uiLayoutSetActive(col, RNA_boolean_get(ptr, "projector")==0);
+       uiItemR(col, NULL, 0, ptr, "jitter", 0);
+       uiItemR(col, NULL, 0, ptr, "fit", 0);
+}
 
 static void node_composit_buts_vecblur(uiLayout *layout, PointerRNA *ptr)
 {
        uiLayout *col;
        
-       col= uiLayoutColumn(layout, 1);
+       col= uiLayoutColumn(layout, 0);
        uiItemR(col, NULL, 0, ptr, "samples", 0);
-       uiItemR(col, NULL, 0, ptr, "min_speed", 0);
-       uiItemR(col, NULL, 0, ptr, "max_speed", 0);
        uiItemR(col, "Blur", 0, ptr, "factor", 0);
+       
+       col= uiLayoutColumn(layout, 1);
+       uiItemL(col, "Speed:", 0);
+       uiItemR(col, "Min", 0, ptr, "min_speed", 0);
+       uiItemR(col, "Max", 0, ptr, "max_speed", 0);
 
-       col= uiLayoutColumn(layout, 0);
-       uiItemR(col, NULL, 0, ptr, "curved", 0);
+       uiItemR(layout, NULL, 0, ptr, "curved", 0);
 }
 
 static void node_composit_buts_filter(uiLayout *layout, PointerRNA *ptr)
@@ -1454,265 +1210,136 @@ static void node_composit_buts_filter(uiLayout *layout, PointerRNA *ptr)
 
 static void node_composit_buts_flip(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       uiBut *bt;
-       
-       /* flip x\y */
-       bt=uiDefButS(block, MENU, B_NODE_EXEC, "Flip X %x0|Flip Y %x1|Flip X & Y %x2",
-                                butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, 
-                                &node->custom1, 0, 0, 0, 0, "");
-       uiButSetFunc(bt, node_but_title_cb, node, bt);
+       uiItemR(layout, "", 0, ptr, "axis", 0);
 }
 
 static void node_composit_buts_crop(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeTwoXYs *ntxy= node->storage;
-       char elementheight = 19;
-       short dx= (butr->xmax-butr->xmin)/2;
-       short dy= butr->ymax - elementheight;
-       short xymin= 0, xymax= 10000;
-
-       uiBlockBeginAlign(block);
-
-       /* crop image size toggle */
-       uiDefButS(block, TOG, B_NODE_EXEC, "Crop Image Size",
-                         butr->xmin, dy, dx*2, elementheight, 
-                         &node->custom1, 0, 0, 0, 0, "Crop the size of the input image.");
-
-       dy-=elementheight;
-
-       /* x1 */
-       uiDefButS(block, NUM, B_NODE_EXEC, "X1:",
-                                butr->xmin, dy, dx, elementheight,
-                                &ntxy->x1, xymin, xymax, 0, 0, "");
-       /* y1 */
-       uiDefButS(block, NUM, B_NODE_EXEC, "Y1:",
-                                butr->xmin+dx, dy, dx, elementheight,
-                                &ntxy->y1, xymin, xymax, 0, 0, "");
-
-       dy-=elementheight;
-
-       /* x2 */
-       uiDefButS(block, NUM, B_NODE_EXEC, "X2:",
-                                butr->xmin, dy, dx, elementheight,
-                                &ntxy->x2, xymin, xymax, 0, 0, "");
-       /* y2 */
-       uiDefButS(block, NUM, B_NODE_EXEC, "Y2:",
-                                butr->xmin+dx, dy, dx, elementheight,
-                                &ntxy->y2, xymin, xymax, 0, 0, "");
-
-       uiBlockEndAlign(block);
+       uiLayout *col;
+       
+       uiItemR(layout, NULL, 0, ptr, "crop_size", 0);
+       
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, "Left", 0, ptr, "x1", 0);
+       uiItemR(col, "Right", 0, ptr, "x2", 0);
+       uiItemR(col, "Up", 0, ptr, "y1", 0);
+       uiItemR(col, "Down", 0, ptr, "y2", 0);
 }
 
 static void node_composit_buts_splitviewer(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-
-       uiBlockBeginAlign(block);
+       uiLayout *row, *col;
        
-       uiDefButS(block, ROW, B_NODE_EXEC, "X",
-                         butr->xmin, butr->ymin+19, (butr->xmax-butr->xmin)/2, 20, 
-                         &node->custom2, 0.0, 0.0, 0, 0, "");
-       uiDefButS(block, ROW, B_NODE_EXEC, "Y",
-                         butr->xmin+(butr->xmax-butr->xmin)/2, butr->ymin+19, (butr->xmax-butr->xmin)/2, 20, 
-                         &node->custom2, 0.0, 1.0, 0, 0, "");
-                         
-       uiDefButS(block, NUMSLI, B_NODE_EXEC, "Split %: ",
-                       butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, &node->custom1, 0, 100, 10, 0, "");
+       col= uiLayoutColumn(layout, 0);
+       row= uiLayoutRow(col, 0);
+       uiItemR(row, NULL, 0, ptr, "axis", UI_ITEM_R_EXPAND);
+       uiItemR(col, NULL, 0, ptr, "factor", 0);
 }
 
 static void node_composit_buts_map_value(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       TexMapping *texmap= node->storage;
-       short xstart= (short)butr->xmin;
-       short dy= (short)(butr->ymax-19.0f);
-       short dx= (short)(butr->xmax-butr->xmin)/2;
+       uiLayout *sub, *col;
        
-       uiBlockBeginAlign(block);
-       uiDefButF(block, NUM, B_NODE_EXEC, "Offs:", xstart, dy, 2*dx, 19, texmap->loc, -1000.0f, 1000.0f, 10, 2, "");
-       dy-= 19;
-       uiDefButF(block, NUM, B_NODE_EXEC, "Size:", xstart, dy, 2*dx, 19, texmap->size, -1000.0f, 1000.0f, 10, 3, "");
-       dy-= 23;
-       uiBlockBeginAlign(block);
-       uiDefButBitI(block, TOG, TEXMAP_CLIP_MIN, B_NODE_EXEC, "Min", xstart, dy, dx, 19, &texmap->flag, 0.0f, 0.0f, 0, 0, "");
-       uiDefButF(block, NUM, B_NODE_EXEC, "", xstart+dx, dy, dx, 19, texmap->min, -1000.0f, 1000.0f, 10, 2, "");
-       dy-= 19;
-       uiDefButBitI(block, TOG, TEXMAP_CLIP_MAX, B_NODE_EXEC, "Max", xstart, dy, dx, 19, &texmap->flag, 0.0f, 0.0f, 0, 0, "");
-       uiDefButF(block, NUM, B_NODE_EXEC, "", xstart+dx, dy, dx, 19, texmap->max, -1000.0f, 1000.0f, 10, 2, "");
+       col =uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "offset", 0);
+       uiItemR(col, NULL, 0, ptr, "size", 0);
+       
+       col =uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "use_min", 0);
+       sub =uiLayoutColumn(col, 0);
+       uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_min"));
+       uiItemR(sub, "", 0, ptr, "min", 0);
+       
+       col =uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "use_max", 0);
+       sub =uiLayoutColumn(col, 0);
+       uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_max"));
+       uiItemR(sub, "", 0, ptr, "max", 0);
 }
 
 static void node_composit_buts_alphaover(uiLayout *layout, PointerRNA *ptr)
-{
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeTwoFloats *ntf= node->storage;
+{      
+       uiLayout *col;
        
+       col =uiLayoutColumn(layout, 1);
        /* alpha type */
-       uiDefButS(block, TOG, B_NODE_EXEC, "ConvertPremul",
-                         butr->xmin, butr->ymin+19, butr->xmax-butr->xmin, 19, 
-                         &node->custom1, 0, 0, 0, 0, "");
+       uiItemR(col, NULL, 0, ptr, "convert_premul", 0);
        /* mix factor */
-       uiDefButF(block, NUM, B_NODE_EXEC, "Premul: ",
-                         butr->xmin, butr->ymin, butr->xmax-butr->xmin, 19, 
-                         &ntf->x, 0.0f, 1.0f, 100, 0, "");
+       uiItemR(col, NULL, 0, ptr, "premul", 0);
 }
 
 static void node_composit_buts_hue_sat(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeHueSat *nhs= node->storage;
+       uiLayout *col;
        
-       uiBlockBeginAlign(block);
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Hue: ",
-                         butr->xmin, butr->ymin+40.0f, butr->xmax-butr->xmin, 20, 
-                         &nhs->hue, 0.0f, 1.0f, 100, 0, "");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Sat: ",
-                         butr->xmin, butr->ymin+20.0f, butr->xmax-butr->xmin, 20, 
-                         &nhs->sat, 0.0f, 2.0f, 100, 0, "");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Val: ",
-                         butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, 
-                         &nhs->val, 0.0f, 2.0f, 100, 0, "");
+       col =uiLayoutColumn(layout, 0);
+       uiItemR(col, NULL, 0, ptr, "hue", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "sat", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "val", UI_ITEM_R_SLIDER);
 }
 
 static void node_composit_buts_dilateerode(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-
-       uiDefButS(block, NUM, B_NODE_EXEC, "Distance:",
-                         butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, 
-                         &node->custom2, -100, 100, 0, 0, "Distance to grow/shrink (number of iterations)");
+       uiItemR(layout, NULL, 0, ptr, "distance", 0);
 }
 
 static void node_composit_buts_diff_matte(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeChroma *c= node->storage;
+       uiLayout *col;
        
-       uiBlockBeginAlign(block);
-       uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "Tolerance: ", 
-               butr->xmin, butr->ymin+20, butr->xmax-butr->xmin, 20,
-               &c->t1, 0.0f, 1.0f, 100, 0, "Color differences below this threshold are keyed.");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "Falloff: ", 
-               butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
-               &c->t2, 0.0f, 1.0f, 100, 0, "Color differences below this additional threshold are partially keyed.");
-       uiBlockEndAlign(block);
+       col =uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "tolerance", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "falloff", UI_ITEM_R_SLIDER);
 }
 
 static void node_composit_buts_distance_matte(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeChroma *c= node->storage;
+       uiLayout *col;
        
-       uiBlockBeginAlign(block);
-       uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "Tolerance: ", 
-               butr->xmin, butr->ymin+20, butr->xmax-butr->xmin, 20,
-               &c->t1, 0.0f, 1.0f, 100, 0, "Color distances below this threshold are keyed.");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "Falloff: ", 
-               butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
-               &c->t2, 0.0f, 1.0f, 100, 0, "Color distances below this additional threshold are partially keyed.");
-       uiBlockEndAlign(block);
+       col =uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "tolerance", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "falloff", UI_ITEM_R_SLIDER);
 }
 
 static void node_composit_buts_color_spill(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       short dx= (butr->xmax-butr->xmin)/3;
-
-       NodeChroma *c=node->storage;
-       uiBlockBeginAlign(block);
-       uiDefButF(block, NUM, B_NODE_EXEC, "Enhance: ", 
-                       butr->xmin, butr->ymin+20.0, butr->xmax-butr->xmin, 20,
-                       &c->t1, 0.0f, 0.5f, 100, 2, "Adjusts how much selected channel is affected by color spill algorithm");
-       uiDefButS(block, ROW, B_NODE_EXEC, "R",
-                       butr->xmin,butr->ymin,dx,20,
-                       &node->custom1,1,1, 0, 0, "Red Spill Suppression");
-       uiDefButS(block, ROW, B_NODE_EXEC, "G",
-                       butr->xmin+dx,butr->ymin,dx,20,
-                       &node->custom1,1,2, 0, 0, "Green Spill Suppression");
-       uiDefButS(block, ROW, B_NODE_EXEC, "B",
-                       butr->xmin+2*dx,butr->ymin,dx,20,
-                       &node->custom1, 1, 3, 0, 0, "Blue Spill Suppression");
-       uiBlockEndAlign(block);
+       uiLayout *row, *col;
+       
+       col =uiLayoutColumn(layout, 0);
+       uiItemR(col, NULL, 0, ptr, "factor", 0);
+       row= uiLayoutRow(col, 0);
+       uiItemR(row, NULL, 0, ptr, "channel", UI_ITEM_R_EXPAND);
 }
 
 static void node_composit_buts_chroma_matte(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       short dx=(butr->xmax-butr->xmin)/2;
-       NodeChroma *c= node->storage;
-
-       uiBlockBeginAlign(block);
-
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Acceptance ",
-               butr->xmin, butr->ymin+60, butr->xmax-butr->xmin, 20,
-               &c->t1, 1.0f, 80.0f, 100, 0, "Tolerance for colors to be considered a keying color");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Cutoff ",
-               butr->xmin, butr->ymin+40, butr->xmax-butr->xmin, 20,
-               &c->t2, 0.0f, 30.0f, 100, 0, "Colors below this will be considered as exact matches for keying color");
-
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Lift ",
-               butr->xmin, butr->ymin+20, dx, 20,
-               &c->fsize, 0.0f, 1.0f, 100, 0, "Alpha Lift");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Gain ",
-               butr->xmin+dx, butr->ymin+20, dx, 20,
-               &c->fstrength, 0.0f, 1.0f, 100, 0, "Alpha Gain");
-
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Shadow Adjust ",
-               butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
-               &c->t3, 0.0f, 1.0f, 100, 0, "Adjusts the brightness of any shadows captured");
-       uiBlockEndAlign(block);
-
-       if(c->t2 > c->t1)
-               c->t2=c->t1;
+       uiLayout *col;
+       
+       col= uiLayoutColumn(layout, 0);
+       uiItemR(col, NULL, 0, ptr, "acceptance", 0);
+       uiItemR(col, NULL, 0, ptr, "cutoff", 0);
+       
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "lift", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "gain", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "shadow_adjust", UI_ITEM_R_SLIDER);
 }
 
 static void node_composit_buts_color_matte(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeChroma *c= node->storage;
-       uiBlockBeginAlign(block);
-
-       uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "H: ",
-               butr->xmin, butr->ymin+40, butr->xmax-butr->xmin, 20,
-               &c->t1, 0.0f, 0.25f, 100, 0, "Hue tolerance for colors to be considered a keying color");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "S: ",
-               butr->xmin, butr->ymin+20, butr->xmax-butr->xmin, 20,
-               &c->t2, 0.0f, 1.0f, 100, 0, "Saturation Tolerance for the color");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC+node->nr, "V: ",
-               butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
-               &c->t3, 0.0f, 1.0f, 100, 0, "Value Tolerance for the color");
-
-       uiBlockEndAlign(block);
+       uiLayout *col;
+       
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "h", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "s", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "v", UI_ITEM_R_SLIDER);
 }
 
 static void node_composit_buts_channel_matte(uiLayout *layout, PointerRNA *ptr)
-{
-       uiBlock *block= uiLayoutFreeBlock(layout);
+{      
+       uiLayout *col, *row;
+       
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        short sx= (butr->xmax-butr->xmin)/4;
@@ -1720,16 +1347,9 @@ static void node_composit_buts_channel_matte(uiLayout *layout, PointerRNA *ptr)
        NodeChroma *c=node->storage;
        char *c1, *c2, *c3;
 
-       /*color space selectors*/
-       uiBlockBeginAlign(block);
-       uiDefButS(block, ROW,B_NODE_EXEC,"RGB",
-               butr->xmin,butr->ymin+60,sx,20,&node->custom1,1,1, 0, 0, "RGB Color Space");
-       uiDefButS(block, ROW,B_NODE_EXEC,"HSV",
-               butr->xmin+sx,butr->ymin+60,sx,20,&node->custom1,1,2, 0, 0, "HSV Color Space");
-       uiDefButS(block, ROW,B_NODE_EXEC,"YUV",
-               butr->xmin+2*sx,butr->ymin+60,sx,20,&node->custom1,1,3, 0, 0, "YUV Color Space");
-       uiDefButS(block, ROW,B_NODE_EXEC,"YCC",
-               butr->xmin+3*sx,butr->ymin+60,sx,20,&node->custom1,1,4, 0, 0, "YCbCr Color Space");
+       /*color space selector*/
+       row= uiLayoutRow(layout, 0);
+       uiItemR(row, NULL, 0, ptr, "color_space", UI_ITEM_R_EXPAND);
 
        if (node->custom1==1) {
                c1="R"; c2="G"; c3="B";
@@ -1745,64 +1365,40 @@ static void node_composit_buts_channel_matte(uiLayout *layout, PointerRNA *ptr)
        }
 
        /*channel selector */
+       row= uiLayoutRow(layout, 0);
+       uiBlockBeginAlign(block);
        uiDefButS(block, ROW, B_NODE_EXEC, c1,
                butr->xmin,butr->ymin+40,cx,20,&node->custom2,1, 1, 0, 0, "Channel 1");
        uiDefButS(block, ROW, B_NODE_EXEC, c2,
                butr->xmin+cx,butr->ymin+40,cx,20,&node->custom2,1, 2, 0, 0, "Channel 2");
        uiDefButS(block, ROW, B_NODE_EXEC, c3,
                butr->xmin+cx+cx,butr->ymin+40,cx,20,&node->custom2, 1, 3, 0, 0, "Channel 3");
+       uiBlockEndAlign(block);
 
        /*tolerance sliders */
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "High ", 
-               butr->xmin, butr->ymin+20.0, butr->xmax-butr->xmin, 20,
-               &c->t1, 0.0f, 1.0f, 100, 0, "Values higher than this setting are 100% opaque");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Low ", 
-               butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
-               &c->t2, 0.0f, 1.0f, 100, 0, "Values lower than this setting are 100% keyed");
-       uiBlockEndAlign(block);
+       col =uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "high", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "low", UI_ITEM_R_SLIDER);
 
-       /*keep t2 (low) less than t1 (high) */
-       if(c->t2 > c->t1) {
-               c->t2=c->t1;
-       }
 }
 
 static void node_composit_buts_luma_matte(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       NodeChroma *c=node->storage;
-
-       /*tolerance sliders */
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "High ", 
-               butr->xmin, butr->ymin+20.0, butr->xmax-butr->xmin, 20,
-               &c->t1, 0.0f, 1.0f, 100, 0, "Values higher than this setting are 100% opaque");
-       uiDefButF(block, NUMSLI, B_NODE_EXEC, "Low ", 
-               butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20,
-               &c->t2, 0.0f, 1.0f, 100, 0, "Values lower than this setting are 100% keyed");
-       uiBlockEndAlign(block);
-
-       /*keep t2 (low) less than t1 (high) */
-       if(c->t2 > c->t1) {
-               c->t2=c->t1;
-       }
+       uiLayout *col;
+       
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, NULL, 0, ptr, "high", UI_ITEM_R_SLIDER);
+       uiItemR(col, NULL, 0, ptr, "low", UI_ITEM_R_SLIDER);
 }
 
 static void node_composit_buts_map_uv(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-
-       uiDefButS(block, NUM, B_NODE_EXEC, "Alpha:",
-                         butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, 
-                         &node->custom1, 0, 100, 0, 0, "Conversion percentage of UV differences to Alpha");
+       uiItemR(layout, NULL, 0, ptr, "alpha", 0);
 }
 
 static void node_composit_buts_id_mask(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
 
@@ -1812,6 +1408,7 @@ static void node_composit_buts_id_mask(uiLayout *layout, PointerRNA *ptr)
 }
 
 /* allocate sufficient! */
+/*
 static void node_imagetype_string(char *str)
 {
        str += sprintf(str, "Save Image as: %%t|");
@@ -1826,67 +1423,37 @@ static void node_imagetype_string(char *str)
        str += sprintf(str, "DPX %%x%d|", R_DPX);
        str += sprintf(str, "OpenEXR %%x%d", R_OPENEXR);
 }
+*/
 
-static void node_set_image_cb(bContext *C, void *ntree_v, void *node_v)
+/*static void node_set_image_cb(bContext *C, void *ntree_v, void *node_v)
 {
        bNodeTree *ntree= ntree_v;
        bNode *node= node_v;
        
        nodeSetActive(ntree, node);
 }
+*/
 
 static void node_composit_buts_file_output(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       bNodeTree *ntree= ptr->id.data;
-       rctf *butr= &node->butr;
-       NodeImageFile *nif= node->storage;
-       uiBut *bt;
-       short x= (short)butr->xmin;
-       short y= (short)butr->ymin;
-       short w= (short)butr->xmax-butr->xmin;
-       char str[320];
-       
-       node_imagetype_string(str);
-       
-       uiBlockBeginAlign(block);
-       
-       bt = uiDefIconBut(block, BUT, B_NODE_SETIMAGE, ICON_FILESEL,
-                         x, y+60, 20, 20,
-                         0, 0, 0, 0, 0, "Open Fileselect to get Backbuf image");
-       uiButSetFunc(bt, node_set_image_cb, ntree, node);
-       
-       uiDefBut(block, TEX, B_NOP, "",
-                         20+x, y+60, w-20, 20, 
-                         nif->name, 0.0f, 240.0f, 0, 0, "");
-       
-       uiDefButS(block, MENU, B_NOP, str,
-                         x, y+40, w, 20, 
-                         &nif->imtype, 0.0f, 1.0f, 0, 0, "");
-       
-       if(nif->imtype==R_OPENEXR) {
-               uiDefButBitS(block, TOG, R_OPENEXR_HALF, B_REDR, "Half",        
-                                       x, y+20, w/2, 20, 
-                                       &nif->subimtype, 0, 0, 0, 0, "");
+       uiLayout *col, *row;
 
-               uiDefButS(block, MENU,B_NOP, "Codec %t|None %x0|Pxr24 (lossy) %x1|ZIP (lossless) %x2|PIZ (lossless) %x3|RLE (lossless) %x4",  
-                                       x+w/2, y+20, w/2, 20, 
-                                       &nif->codec, 0, 0, 0, 0, "");
+       col= uiLayoutColumn(layout, 0);
+       uiItemR(col, "", 0, ptr, "filename", 0);
+       uiItemR(col, "", 0, ptr, "image_type", 0);
+       
+       row= uiLayoutRow(layout, 0);
+       if (RNA_enum_get(ptr, "image_type")== R_OPENEXR) {
+               uiItemR(row, NULL, 0, ptr, "exr_half", 0);
+               uiItemR(row, "", 0, ptr, "exr_codec", 0);
        }
-       else {
-               uiDefButS(block, NUM, B_NOP, "Quality: ",
-                         x, y+20, w, 20, 
-                         &nif->quality, 10.0f, 100.0f, 10, 0, "");
+       else if (RNA_enum_get(ptr, "image_type")== R_JPEG90) {
+               uiItemR(row, NULL, 0, ptr, "quality", UI_ITEM_R_SLIDER);
        }
        
-       /* start frame, end frame */
-       uiDefButI(block, NUM, B_NODE_EXEC, "SFra: ", 
-                         x, y, w/2, 20, 
-                         &nif->sfra, 1, MAXFRAMEF, 10, 0, "");
-       uiDefButI(block, NUM, B_NODE_EXEC, "EFra: ", 
-                         x+w/2, y, w/2, 20, 
-                         &nif->efra, 1, MAXFRAMEF, 10, 0, "");
+       row= uiLayoutRow(layout, 1);
+       uiItemR(row, "Start", 0, ptr, "start_frame", 0);
+       uiItemR(row, "End", 0, ptr, "end_frame", 0);
 }
 
 static void node_scale_cb(bContext *C, void *node_v, void *unused_v)
@@ -1909,7 +1476,7 @@ static void node_scale_cb(bContext *C, void *node_v, void *unused_v)
 
 static void node_composit_buts_scale(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        uiBut *bt= uiDefButS(block, MENU, B_NODE_EXEC, "Relative %x0|Absolute %x1|Scene Size % %x2|",
@@ -1920,56 +1487,23 @@ static void node_composit_buts_scale(uiLayout *layout, PointerRNA *ptr)
 
 static void node_composit_buts_invert(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-
-       uiBlockBeginAlign(block);
-       uiDefButBitS(block, TOG, CMP_CHAN_RGB, B_NODE_EXEC, "RGB",
-                                butr->xmin, butr->ymin, (butr->xmax-butr->xmin)/2, 20, 
-                                &node->custom1, 0, 0, 0, 0, "");
-       uiDefButBitS(block, TOG, CMP_CHAN_A, B_NODE_EXEC, "A",
-                                butr->xmin+(butr->xmax-butr->xmin)/2, butr->ymin, (butr->xmax-butr->xmin)/2, 20, 
-                                &node->custom1, 0, 0, 0, 0, "");
-       uiBlockEndAlign(block);
+       uiLayout *col;
+       
+       col= uiLayoutColumn(layout, 0);
+       uiItemR(col, NULL, 0, ptr, "rgb", 0);
+       uiItemR(col, NULL, 0, ptr, "alpha", 0);
 }
 
 static void node_composit_buts_premulkey(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       uiBut *bt;
-       
-       /* blend type */
-       bt=uiDefButS(block, MENU, B_NODE_EXEC, "Key to Premul %x0|Premul to Key %x1",
-                                butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, 
-                                &node->custom1, 0, 0, 0, 0, "Conversion between premultiplied alpha and key alpha");
+       uiItemR(layout, "", 0, ptr, "mapping", 0);
 }
 
 static void node_composit_buts_view_levels(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       short sx= (butr->xmax-butr->xmin)/5;
-
-       /*color space selectors*/
-       uiBlockBeginAlign(block);
-       uiDefButS(block, ROW,B_NODE_EXEC+node->nr,"C",
-               butr->xmin,butr->ymin,sx,20,&node->custom1,1,1, 0, 0, "Combined RGB");
-       uiDefButS(block, ROW,B_NODE_EXEC+node->nr,"R",
-               butr->xmin+sx,butr->ymin,sx,20,&node->custom1,1,2, 0, 0, "Red Channel");
-       uiDefButS(block, ROW,B_NODE_EXEC+node->nr,"G",
-               butr->xmin+2*sx,butr->ymin,sx,20,&node->custom1,1,3, 0, 0, "Green Channel");
-       uiDefButS(block, ROW,B_NODE_EXEC+node->nr,"B",
-               butr->xmin+3*sx,butr->ymin,sx,20,&node->custom1,1,4, 0, 0, "Blue Channel");
-       uiDefButS(block, ROW,B_NODE_EXEC+node->nr,"L",
-               butr->xmin+4*sx,butr->ymin,sx,20,&node->custom1,1,5, 0, 0, "Luminenc Channel");
-       uiBlockEndAlign(block);
+       uiItemR(layout, NULL, 0, ptr, "color_space", UI_ITEM_R_EXPAND);
 }
 
-
 /* only once called */
 static void node_composit_set_butfunc(bNodeType *ntype)
 {
@@ -2115,43 +1649,15 @@ static void node_composit_set_butfunc(bNodeType *ntype)
 
 static void node_texture_buts_bricks(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       short w = butr->xmax-butr->xmin;
-       short ofw = 32;
-       
-       uiBlockBeginAlign(block);
+       uiLayout *col;
        
-       /* Offset */
-       uiDefButF(
-               block, NUM, B_NODE_EXEC, "Offset",
-               butr->xmin, butr->ymin+20, w-ofw, 20,
-               &node->custom3,
-               0, 1, 0.25, 2,
-               "Offset amount" );
-       uiDefButS(
-               block, NUM, B_NODE_EXEC, "",
-               butr->xmin+w-ofw, butr->ymin+20, ofw, 20,
-               &node->custom1,
-               2, 99, 0, 0,
-               "Offset every N rows" );
-       
-       /* Squash */
-       uiDefButF(
-               block, NUM, B_NODE_EXEC, "Squash",
-               butr->xmin, butr->ymin+0, w-ofw, 20,
-               &node->custom4,
-               0, 99, 0.25, 2,
-               "Stretch amount" );
-       uiDefButS(
-               block, NUM, B_NODE_EXEC, "",
-               butr->xmin+w-ofw, butr->ymin+0, ofw, 20,
-               &node->custom2,
-               2, 99, 0, 0,
-               "Stretch every N rows" );
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, "Offset", 0, ptr, "offset", 0);
+       uiItemR(col, "Frequency", 0, ptr, "offset_frequency", 0);
        
-       uiBlockEndAlign(block);
+       col= uiLayoutColumn(layout, 1);
+       uiItemR(col, "Squash", 0, ptr, "squash", 0);
+       uiItemR(col, "Frequency", 0, ptr, "squash_frequency", 0);
 }
 
 /* Copied from buttons_shading.c -- needs unifying */
@@ -2164,7 +1670,7 @@ static char* noisebasis_menu()
 
 static void node_texture_buts_proc(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        rctf *butr= &node->butr;
        Tex *tex = (Tex *)node->storage;
@@ -2243,7 +1749,7 @@ static void node_texture_buts_proc(uiLayout *layout, PointerRNA *ptr)
 
 static void node_texture_buts_image(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
+       uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        bNodeTree *ntree= ptr->id.data;
        rctf *butr= &node->butr;
@@ -2282,28 +1788,7 @@ static void node_texture_buts_image(uiLayout *layout, PointerRNA *ptr)
 
 static void node_texture_buts_output(uiLayout *layout, PointerRNA *ptr)
 {
-       uiBlock *block= uiLayoutFreeBlock(layout);
-       bNode *node= ptr->data;
-       rctf *butr= &node->butr;
-       uiBut *bt;
-       short width;
-       char *name = ((TexNodeOutput*)node->storage)->name;
-       
-       uiBlockBeginAlign(block);
-       
-       width = (short)(butr->xmax - butr->xmin);
-       
-       bt = uiDefBut(
-               block, TEX, B_NOP,
-               "Name:",
-               butr->xmin, butr->ymin,
-               width, 19, 
-               name, 0, 31,
-               0, 0, 
-               "Name this output"
-       );
-       
-       uiBlockEndAlign(block);
+       uiItemR(layout, "", 0, ptr, "output_name", 0);
 }
 
 /* only once called */
@@ -2423,12 +1908,13 @@ void node_rename_but(char *s)
 
 #endif
 
-void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode)
+void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage)
 {
        
        if((snode->flag & SNODE_BACKDRAW) && snode->treetype==NTREE_COMPOSIT) {
                Image *ima= BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
-               ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
+               void *lock;
+               ImBuf *ibuf= BKE_image_acquire_ibuf(ima, NULL, &lock);
                if(ibuf) {
                        float x, y; 
                        
@@ -2443,13 +1929,21 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode)
                        x = (ar->winx-ibuf->x)/2 + snode->xof;
                        y = (ar->winy-ibuf->y)/2 + snode->yof;
                        
+                       if(!ibuf->rect) {
+                               if(color_manage)
+                                       ibuf->profile= IB_PROFILE_SRGB;
+                               else
+                                       ibuf->profile = IB_PROFILE_NONE;
+                               IMB_rect_from_float(ibuf);
+                       }
+
                        if(ibuf->rect)
                                glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
-                       else if(ibuf->channels==4)
-                               glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_FLOAT, ibuf->rect_float);
                        
                        wmPopMatrix();
                }
+
+               BKE_image_release_ibuf(ima, lock);
        }
 }