2.6 Various code cleanup:
[blender.git] / source / blender / editors / space_node / drawnode.c
index 890b04dce9136a9a9b0fcb6779ae4cded96d6976..29f678448273ab14c01c9006d892552cae911100 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
@@ -97,7 +95,15 @@ static void node_sync_cb(bContext *UNUSED(C), void *snode_v, void *node_v)
        }
 }
 
-void node_socket_button_default(const bContext *C, uiBlock *block,
+static void node_socket_button_label(const bContext *UNUSED(C), uiBlock *block,
+                                                         bNodeTree *UNUSED(ntree), bNode *UNUSED(node), bNodeSocket *sock,
+                                                         const char *UNUSED(name), int x, int y, int width)
+{
+       uiDefBut(block, LABEL, 0, sock->name, x, y, width, NODE_DY, NULL, 0, 0, 0, 0, "");
+}
+
+
+static void node_socket_button_default(const bContext *C, uiBlock *block,
                                                                bNodeTree *ntree, bNode *node, bNodeSocket *sock,
                                                                const char *name, int x, int y, int width)
 {
@@ -129,13 +135,13 @@ static uiBlock *socket_component_menu(bContext *C, ARegion *ar, void *args_v)
        block= uiBeginBlock(C, ar, "socket menu", UI_EMBOSS);
        uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN);
        
-       layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, args->x, args->y+2, args->width, NODE_DY, U.uistyles.first), 0);
+       layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, args->x, args->y+2, args->width, NODE_DY, UI_GetStyle()), 0);
        
        uiItemR(layout, &args->ptr, "default_value", UI_ITEM_R_EXPAND, "", ICON_NONE);
        
        return block;
 }
-void node_socket_button_components(const bContext *C, uiBlock *block,
+static void node_socket_button_components(const bContext *C, uiBlock *block,
                                                                   bNodeTree *ntree, bNode *node, bNodeSocket *sock,
                                                                   const char *name, int x, int y, int width)
 {
@@ -157,7 +163,7 @@ void node_socket_button_components(const bContext *C, uiBlock *block,
        uiDefBlockButN(block, socket_component_menu, args, name, x, y+1, width, NODE_DY-2, "");
 }
 
-void node_socket_button_color(const bContext *C, uiBlock *block,
+static void node_socket_button_color(const bContext *C, uiBlock *block,
                                                          bNodeTree *ntree, bNode *node, bNodeSocket *sock,
                                                          const char *name, int x, int y, int width)
 {
@@ -179,7 +185,8 @@ void node_socket_button_color(const bContext *C, uiBlock *block,
 
 /* ****************** BASE DRAW FUNCTIONS FOR NEW OPERATOR NODES ***************** */
 
-void node_draw_socket_new(bNodeSocket *sock, float size)
+#if 0 /* UNUSED */
+static void node_draw_socket_new(bNodeSocket *sock, float size)
 {
        float x=sock->locx, y=sock->locy;
        
@@ -216,6 +223,7 @@ void node_draw_socket_new(bNodeSocket *sock, float size)
        glDisable( GL_LINE_SMOOTH );
        glDisable(GL_BLEND);
 }
+#endif
 
 /* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */
 
@@ -305,7 +313,7 @@ static void node_buts_curvecol(uiLayout *layout, bContext *UNUSED(C), PointerRNA
 
        if(_sample_col) {
                cumap->flag |= CUMA_DRAW_SAMPLE;
-               VECCOPY(cumap->sample, _sample_col);
+               copy_v3_v3(cumap->sample, _sample_col);
        }
        else 
                cumap->flag &= ~CUMA_DRAW_SAMPLE;
@@ -332,8 +340,9 @@ static void node_buts_normal(uiLayout *layout, bContext *UNUSED(C), PointerRNA *
        uiBut *bt;
        
        bt= uiDefButF(block, BUT_NORMAL, B_NODE_EXEC, "", 
-                         (short)butr->xmin, (short)butr->xmin, butr->xmax-butr->xmin, butr->xmax-butr->xmin, 
-                         nor, 0.0f, 1.0f, 0, 0, "");
+                     (short)butr->xmin, (short)butr->xmin,
+                     butr->xmax-butr->xmin, butr->xmax-butr->xmin,
+                     nor, 0.0f, 1.0f, 0, 0, "");
        uiButSetFunc(bt, node_normal_cb, ntree, node);
 }
 #if 0 // not used in 2.5x yet
@@ -619,9 +628,9 @@ static void draw_group_socket_name(SpaceNode *snode, bNode *gnode, bNodeSocket *
                        uiButSetFunc(bt, update_group_output_cb, snode, ngroup);
        }
        else {
-               uiDefBut(gnode->block, LABEL, 0, sock->name, 
-                                sock->locx+xoffset, sock->locy+1+yoffset, 72, NODE_DY,
-                                NULL, 0, 31, 0, 0, "");
+               uiDefBut(gnode->block, LABEL, 0, sock->name,
+                        sock->locx+xoffset, sock->locy+1+yoffset, 72, NODE_DY,
+                        NULL, 0, 31, 0, 0, "");
        }
 }
 
@@ -637,9 +646,9 @@ static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *nt
        float arrowbutw= 0.8f*UI_UNIT_X;
        /* layout stuff for buttons on group left frame */
        float colw= 0.6f*node_group_frame;
-       float col1= 6;
+       float col1= 6 - node_group_frame;
        float col2= col1 + colw+6;
-       float col3= node_group_frame - arrowbutw - 6;
+       float col3= - arrowbutw - 6;
        /* layout stuff for buttons on group right frame */
        float cor1= 6;
        float cor2= cor1 + arrowbutw + 6;
@@ -660,6 +669,7 @@ static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *nt
         * 1) input: not internal
         * 2) output: (node type uses const outputs) and (group output is unlinked)
         */
+       draw_value = 0;
        switch (in_out) {
        case SOCK_IN:
                draw_value = !(gsock && (gsock->flag & SOCK_INTERNAL));
@@ -667,8 +677,6 @@ static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *nt
        case SOCK_OUT:
                if (gnode->typeinfo->flag & NODE_CONST_OUTPUT)
                        draw_value = !(gsock && gsock->link);
-               else
-                       draw_value = 0;
                break;
        }
        if (draw_value) {
@@ -713,7 +721,7 @@ static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *nt
                uiBlockSetDirection(gnode->block, 0);
                
                /* remove button */
-               offset = (in_out==SOCK_IN ? col3 : col1);
+               offset = (in_out==SOCK_IN ? col3 : cor1);
                uiBlockSetEmboss(gnode->block, UI_EMBOSSN);
                bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_remove", 0, ICON_X,
                                                   gsock->locx+offset, gsock->locy-0.5f*arrowbutw, arrowbutw, arrowbutw, "");
@@ -742,23 +750,23 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
                
                /* backdrop header */
                glEnable(GL_BLEND);
-               uiSetRoundBox(3);
+               uiSetRoundBox(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT);
                UI_ThemeColorShadeAlpha(TH_NODE_GROUP, 0, -70);
                uiDrawBox(GL_POLYGON, rect.xmin-node_group_frame, rect.ymax, rect.xmax+node_group_frame, rect.ymax+group_header, BASIS_RAD);
                
                /* backdrop body */
                UI_ThemeColorShadeAlpha(TH_BACK, -8, -70);
-               uiSetRoundBox(0);
+               uiSetRoundBox(UI_CNR_NONE);
                uiDrawBox(GL_POLYGON, rect.xmin, rect.ymin, rect.xmax, rect.ymax, BASIS_RAD);
        
                /* input column */
                UI_ThemeColorShadeAlpha(TH_BACK, 10, -50);
-               uiSetRoundBox(8);
+               uiSetRoundBox(UI_CNR_BOTTOM_LEFT);
                uiDrawBox(GL_POLYGON, rect.xmin-node_group_frame, rect.ymin, rect.xmin, rect.ymax, BASIS_RAD);
        
                /* output column */
                UI_ThemeColorShadeAlpha(TH_BACK, 10, -50);
-               uiSetRoundBox(4);
+               uiSetRoundBox(UI_CNR_BOTTOM_RIGHT);
                uiDrawBox(GL_POLYGON, rect.xmax, rect.ymin, rect.xmax+node_group_frame, rect.ymax, BASIS_RAD);
        
                /* input column separator */
@@ -776,7 +784,7 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
                glEnd();
        
                /* group node outline */
-               uiSetRoundBox(15);
+               uiSetRoundBox(UI_CNR_ALL);
                glColor4ub(200, 200, 200, 140);
                glEnable( GL_LINE_SMOOTH );
                uiDrawBox(GL_LINE_LOOP, rect.xmin-node_group_frame, rect.ymin, rect.xmax+node_group_frame, rect.ymax+group_header, BASIS_RAD);
@@ -787,7 +795,7 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
                UI_ThemeColor(TH_TEXT_HI);
        
                layout = uiBlockLayout(gnode->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, (short)(rect.xmin+15), (short)(rect.ymax+group_header),
-                                                          MIN2((int)(rect.xmax - rect.xmin-18.0f), node_group_frame+20), group_header, U.uistyles.first);
+                                                          MIN2((int)(rect.xmax - rect.xmin-18.0f), node_group_frame+20), group_header, UI_GetStyle());
                RNA_pointer_create(&ntree->id, &RNA_Node, gnode, &ptr);
                uiTemplateIDBrowse(layout, (bContext*)C, &ptr, "node_tree", NULL, NULL, NULL);
                uiBlockLayoutResolve(gnode->block, NULL, NULL);
@@ -843,6 +851,11 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
        }
 }
 
+void node_uifunc_group(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+       uiTemplateIDBrowse(layout, C, ptr, "node_tree", NULL, NULL, NULL);
+}
+
 static void node_common_buts_whileloop(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
        uiItemR(layout, ptr, "max_iterations", 0, NULL, 0);
@@ -868,7 +881,7 @@ static void node_common_set_butfunc(bNodeType *ntype)
 {
        switch(ntype->type) {
                case NODE_GROUP:
-//                     ntype->uifunc= node_common_buts_group;
+                       ntype->uifunc= node_uifunc_group;
                        ntype->drawfunc= node_draw_group;
                        ntype->drawupdatefunc= node_update_group;
                        break;
@@ -895,14 +908,14 @@ static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
        Main *bmain= CTX_data_main(C);
        bNodeTree *ntree= ntree_v;
        bNode *node= node_v;
-       ID *oldid;
+       /* ID *oldid; */ /* UNUSED */
        
        if(node->menunr<1) return;
        
        if(node->id) {
                node->id->us--;
        }
-       oldid= node->id;
+       /* oldid= node->id; */ /* UNUSED */
        node->id= BLI_findlink(&bmain->text, node->menunr-1);
        id_us_plus(node->id);
        BLI_strncpy(node->name, node->id->name+2, sizeof(node->name));
@@ -955,7 +968,6 @@ static void node_shader_buts_mapping(uiLayout *layout, bContext *UNUSED(C), Poin
        row= uiLayoutRow(layout, 1);
        uiItemR(row, ptr, "use_max", 0, "Max", ICON_NONE);
        uiItemR(row, ptr, "max", 0, "", ICON_NONE);
-       
 }
 
 static void node_shader_buts_vect_math(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
@@ -982,6 +994,53 @@ static void node_shader_buts_geometry(uiLayout *layout, bContext *C, PointerRNA
        }
 }
 
+static void node_shader_buts_attribute(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "attribute_name", 0, "Name", ICON_NONE);
+}
+
+static void node_shader_buts_tex_image(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+       uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL);
+       uiItemR(layout, ptr, "color_space", 0, "", ICON_NONE);
+}
+
+static void node_shader_buts_tex_sky(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "sun_direction", 0, "", ICON_NONE);
+       uiItemR(layout, ptr, "turbidity", 0, NULL, ICON_NONE);
+}
+
+static void node_shader_buts_tex_gradient(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "gradient_type", 0, "", ICON_NONE);
+}
+
+static void node_shader_buts_tex_magic(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "turbulence_depth", 0, NULL, ICON_NONE);
+}
+
+static void node_shader_buts_tex_wave(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "wave_type", 0, "", ICON_NONE);
+}
+
+static void node_shader_buts_tex_musgrave(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "musgrave_type", 0, "", ICON_NONE);
+}
+
+static void node_shader_buts_tex_voronoi(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "coloring", 0, "", ICON_NONE);
+}
+
+static void node_shader_buts_glossy(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "distribution", 0, "", ICON_NONE);
+}
+
 static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA *ptr)
 { 
        Main *bmain= CTX_data_main(C);
@@ -1068,6 +1127,37 @@ static void node_shader_set_butfunc(bNodeType *ntype)
                case SH_NODE_GEOMETRY:
                        ntype->uifunc= node_shader_buts_geometry;
                        break;
+               case SH_NODE_ATTRIBUTE:
+                       ntype->uifunc= node_shader_buts_attribute;
+                       break;
+               case SH_NODE_TEX_SKY:
+                       ntype->uifunc= node_shader_buts_tex_sky;
+                       break;
+               case SH_NODE_TEX_IMAGE:
+                       ntype->uifunc= node_shader_buts_tex_image;
+                       break;
+               case SH_NODE_TEX_ENVIRONMENT:
+                       ntype->uifunc= node_shader_buts_tex_image;
+                       break;
+               case SH_NODE_TEX_GRADIENT:
+                       ntype->uifunc= node_shader_buts_tex_gradient;
+                       break;
+               case SH_NODE_TEX_MAGIC:
+                       ntype->uifunc= node_shader_buts_tex_magic;
+                       break;
+               case SH_NODE_TEX_WAVE:
+                       ntype->uifunc= node_shader_buts_tex_wave;
+                       break;
+               case SH_NODE_TEX_MUSGRAVE:
+                       ntype->uifunc= node_shader_buts_tex_musgrave;
+                       break;
+               case SH_NODE_TEX_VORONOI:
+                       ntype->uifunc= node_shader_buts_tex_voronoi;
+                       break;
+               case SH_NODE_BSDF_GLOSSY:
+               case SH_NODE_BSDF_GLASS:
+                       ntype->uifunc= node_shader_buts_glossy;
+                       break;
                case NODE_DYNAMIC:
                        ntype->uifunc= node_shader_buts_dynamic;
                        break;
@@ -1537,28 +1627,22 @@ static void node_composit_buts_map_uv(uiLayout *layout, bContext *UNUSED(C), Poi
 static void node_composit_buts_id_mask(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
        uiItemR(layout, ptr, "index", 0, NULL, ICON_NONE);
+       uiItemR(layout, ptr, "use_smooth_mask", 0, NULL, ICON_NONE);
 }
 
 static void node_composit_buts_file_output(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
-       uiLayout *col, *row;
+       bNode *node= ptr->data;
+       NodeImageFile *nif= node->storage;
+       PointerRNA imfptr;
+
+       uiLayout *row;
+
+       uiItemR(layout, ptr, "filepath", 0, "", ICON_NONE);
+
+       RNA_pointer_create(NULL, &RNA_ImageFormatSettings, &nif->im_format, &imfptr);
+       uiTemplateImageSettings(layout, &imfptr);
 
-       col= uiLayoutColumn(layout, 0);
-       uiItemR(col, ptr, "filepath", 0, "", ICON_NONE);
-       uiItemR(col, ptr, "image_type", 0, "", ICON_NONE);
-       
-       row= uiLayoutRow(layout, 0);
-       if (RNA_enum_get(ptr, "image_type")== R_OPENEXR) {
-               uiItemR(row, ptr, "use_exr_half", 0, NULL, ICON_NONE);
-               uiItemR(row, ptr, "exr_codec", 0, "", ICON_NONE);
-       }
-       else if (RNA_enum_get(ptr, "image_type")== R_JPEG90) {
-               uiItemR(row, ptr, "quality", UI_ITEM_R_SLIDER, "Quality", ICON_NONE);
-       }
-       else if (RNA_enum_get(ptr, "image_type")== R_PNG) {
-               uiItemR(row, ptr, "quality", UI_ITEM_R_SLIDER, "Compression", ICON_NONE);
-       }
-       
        row= uiLayoutRow(layout, 1);
        uiItemR(row, ptr, "frame_start", 0, "Start", ICON_NONE);
        uiItemR(row, ptr, "frame_end", 0, "End", ICON_NONE);
@@ -1674,6 +1758,40 @@ static void node_composit_buts_ycc(uiLayout *layout, bContext *UNUSED(C), Pointe
        uiItemR(layout, ptr, "mode", 0, "", ICON_NONE);
 }
 
+static void node_composit_buts_movieclip(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+       uiTemplateID(layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL);
+}
+
+static void node_composit_buts_stabilize2d(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+       bNode *node= ptr->data;
+
+       uiTemplateID(layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL);
+
+       if(!node->id)
+               return;
+
+       uiItemR(layout, ptr, "filter_type", 0, "", 0);
+}
+
+static void node_composit_buts_transform(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+       uiItemR(layout, ptr, "filter_type", 0, "", 0);
+}
+
+static void node_composit_buts_moviedistortion(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+       bNode *node= ptr->data;
+
+       uiTemplateID(layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL);
+
+       if(!node->id)
+               return;
+
+       uiItemR(layout, ptr, "distortion_type", 0, "", 0);
+}
+
 /* only once called */
 static void node_composit_set_butfunc(bNodeType *ntype)
 {
@@ -1824,6 +1942,20 @@ static void node_composit_set_butfunc(bNodeType *ntype)
                case CMP_NODE_SEPYCCA:
                        ntype->uifunc=node_composit_buts_ycc;
                        break;
+               case CMP_NODE_MOVIECLIP:
+                       ntype->uifunc= node_composit_buts_movieclip;
+                       break;
+               case CMP_NODE_STABILIZE2D:
+                       ntype->uifunc= node_composit_buts_stabilize2d;
+                       break;
+               case CMP_NODE_TRANSFORM:
+                       ntype->uifunc= node_composit_buts_transform;
+                       break;
+               case CMP_NODE_MOVIEDISTORTION:
+                       ntype->uifunc= node_composit_buts_moviedistortion;
+                       break;
+               default:
+                       ntype->uifunc= NULL;
        }
        if (ntype->uifuncbut == NULL) ntype->uifuncbut = ntype->uifunc;
 
@@ -1937,7 +2069,7 @@ static void node_texture_buts_output(uiLayout *layout, bContext *UNUSED(C), Poin
 /* only once called */
 static void node_texture_set_butfunc(bNodeType *ntype)
 {
-    ntype->uifuncbut = NULL;
+       ntype->uifuncbut = NULL;
        if( ntype->type >= TEX_NODE_PROC && ntype->type < TEX_NODE_PROC_MAX ) {
                ntype->uifunc = node_texture_buts_proc;
        }
@@ -2036,6 +2168,9 @@ void ED_init_node_butfuncs(void)
                        case SOCK_RGBA:
                                stype->buttonfunc = node_socket_button_color;
                                break;
+                       case SOCK_SHADER:
+                               stype->buttonfunc = node_socket_button_label;
+                               break;
                        default:
                                stype->buttonfunc = NULL;
                        }
@@ -2119,7 +2254,7 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage)
        }
 }
 
-void draw_nodespace_color_info(ARegion *ar, int color_manage, int channels, int x, int y, char *cp, float *fp)
+void draw_nodespace_color_info(ARegion *ar, int color_manage, int channels, int x, int y, const char cp[4], const float fp[4])
 {
        char str[256];
        float dx= 6;