2.5 Nodes:
[blender.git] / source / blender / editors / space_node / drawnode.c
index 8bd8477fe13f6771f3c19107a82b2288b004b030..403a8d1a5915a3f8c4f151bbba20dcc1f6f084e0 100644 (file)
@@ -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,104 +1028,43 @@ 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)
 {
-       uiLayout *row, *col;
+       uiLayout *col;
        
        uiItemR(layout, NULL, 0, ptr, "iterations", 0);
        uiItemR(layout, NULL, 0, ptr, "wrap", 0);
        
        col= uiLayoutColumn(layout, 1);
        uiItemL(col, "Center:", 0);
-       
-       row= uiLayoutRow(col, 1);
-       uiItemR(row, "X:", 0, ptr, "center_x", 0);
-       uiItemR(row, "Y", 0, ptr, "center_y", 0);
+       uiItemR(col, "X", 0, ptr, "center_x", 0);
+       uiItemR(col, "Y", 0, ptr, "center_y", 0);
        
        uiItemS(layout);
        
@@ -1202,7 +1093,7 @@ static void node_composit_buts_defocus(uiLayout *layout, PointerRNA *ptr)
 {
        uiLayout *sub, *col;
        
-       col= uiLayoutColumn(layout, 1);
+       col= uiLayoutColumn(layout, 0);
        uiItemL(col, "Bokeh Type:", 0);
        uiItemR(col, "", 0, ptr, "bokeh", 0);
        uiItemR(col, NULL, 0, ptr, "angle", 0);
@@ -1241,7 +1132,7 @@ static void node_composit_buts_glare(uiLayout *layout, PointerRNA *ptr)
                uiItemR(layout, NULL, 0, ptr, "iterations", 0);
        
                if (RNA_enum_get(ptr, "glare_type")!= 0) 
-                       uiItemR(layout, NULL, 0, ptr, "color_modulation", 0);
+                       uiItemR(layout, NULL, 0, ptr, "color_modulation", UI_ITEM_R_SLIDER);
        }
        
        uiItemR(layout, NULL, 0, ptr, "mix", 0);                
@@ -1252,7 +1143,7 @@ static void node_composit_buts_glare(uiLayout *layout, PointerRNA *ptr)
                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", 0);
+               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);
@@ -1267,18 +1158,18 @@ static void node_composit_buts_tonemap(uiLayout *layout, PointerRNA *ptr)
 {      
        uiLayout *col;
 
-       col = uiLayoutColumn(layout, 1);
+       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", 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 {
                uiItemR(col, NULL, 0, ptr, "intensity", 0);
-               uiItemR(col, NULL, 0, ptr, "contrast", 0);
-               uiItemR(col, NULL, 0, ptr, "adaptation", 0);
-               uiItemR(col, NULL, 0, ptr, "correction", 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);
        }
 }
 
@@ -1294,14 +1185,13 @@ static void node_composit_buts_lensdist(uiLayout *layout, PointerRNA *ptr)
        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, "Blur", 0, ptr, "factor", 0);
        
@@ -1340,7 +1230,7 @@ static void node_composit_buts_splitviewer(uiLayout *layout, PointerRNA *ptr)
 {
        uiLayout *row, *col;
        
-       col= uiLayoutColumn(layout, 1);
+       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);
@@ -1348,189 +1238,108 @@ static void node_composit_buts_splitviewer(uiLayout *layout, PointerRNA *ptr)
 
 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;
@@ -1538,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";
@@ -1563,48 +1365,30 @@ 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)
@@ -1614,7 +1398,7 @@ static void node_composit_buts_map_uv(uiLayout *layout, PointerRNA *ptr)
 
 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;
 
@@ -1624,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|");
@@ -1638,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)
@@ -1721,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|",
@@ -1732,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)
 {
@@ -1927,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 */
@@ -1976,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;
@@ -2055,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;
@@ -2094,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 */
@@ -2235,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; 
                        
@@ -2255,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);
        }
 }