diff options
author | Nathan Letwory <nathan@letworyinteractive.com> | 2008-12-29 03:55:23 +0300 |
---|---|---|
committer | Nathan Letwory <nathan@letworyinteractive.com> | 2008-12-29 03:55:23 +0300 |
commit | 87cae4caed35c50b2ef70fb104d6f057670eb94e (patch) | |
tree | 2edcfaa700949d41f208f06a07deb6445971df99 /source/blender/editors/space_node/drawnode.c | |
parent | aa1c405b7a6d76a32e590066cb21c23a208efa03 (diff) |
2.5 / Nodes
* enable more code (button callbacks, will probably undergo revision)
Diffstat (limited to 'source/blender/editors/space_node/drawnode.c')
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 190 |
1 files changed, 71 insertions, 119 deletions
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index fac8755e6d0..4f1cb7a5a68 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -52,6 +52,7 @@ #include "DNA_text_types.h" #include "DNA_userdef_types.h" +#include "BKE_context.h" #include "BKE_global.h" #include "BKE_image.h" #include "BKE_library.h" @@ -93,24 +94,36 @@ #include "MEM_guardedalloc.h" +#include "ED_space_api.h" +#include "ED_screen.h" +#include "ED_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_view2d.h" #include "UI_text.h" #include "UI_interface.h" #include "UI_resources.h" -/* -#include "RE_pipeline.h"*/ +#include "RE_pipeline.h" #include "IMB_imbuf_types.h" /*#include "blendef.h" #include "butspace.h"*/ /*#include "interface.h"*/ /* urm... for rasterpos_safe, roundbox */ /*#include "mydevice.h"*/ -#if 0 -//extern void autocomplete_uv(char *str, void *arg_v); -extern int verify_valid_uv_name(char *str); + +#include "node_intern.h" + +extern void autocomplete_uv(char *str, void *arg_v); +// XXX extern int verify_valid_uv_name(char *str); /* autocomplete callback for buttons */ -static void autocomplete_vcol(char *str, void *arg_v) +static void autocomplete_vcol(bContext *C, char *str, void *arg_v) { Mesh *me; CustomDataLayer *layer; @@ -150,58 +163,29 @@ static int verify_valid_vcol_name(char *str) return 0; } -static void snode_drawstring(SpaceNode *snode, char *str, int okwidth) -{ - char drawstr[NODE_MAXSTR]; - int width; - - if(str[0]==0 || okwidth<4) return; - - BLI_strncpy(drawstr, str, NODE_MAXSTR); - width= snode->aspect*UI_GetStringWidth(snode->curfont, drawstr, 0); - - if(width > okwidth) { - int len= strlen(drawstr)-1; - - while(width > okwidth && len>=0) { - drawstr[len]= 0; - - width= snode->aspect*UI_GetStringWidth(snode->curfont, drawstr, 0); - len--; - } - if(len==0) return; - } - UI_DrawString(snode->curfont, drawstr, 0); - -} - /* ****************** GENERAL CALLBACKS FOR NODES ***************** */ -static void node_ID_title_cb(void *node_v, void *unused_v) +static void node_ID_title_cb(bContext *C, void *node_v, void *unused_v) { bNode *node= node_v; if(node->id) { test_idbutton(node->id->name+2); /* library.c, verifies unique name */ BLI_strncpy(node->name, node->id->name+2, 21); - - // allqueue(REDRAWBUTSSHADING, 0); - // allqueue(REDRAWNODE, 0); - // allqueue(REDRAWOOPS, 0); } } -static void node_but_title_cb(void *node_v, void *but_v) +static void node_but_title_cb(bContext *C, void *node_v, void *but_v) { bNode *node= node_v; - struct uiBut *bt= but_v; - BLI_strncpy(node->name, bt->drawstr, NODE_MAXSTR); + // XXX uiBut *bt= but_v; + // XXX BLI_strncpy(node->name, bt->drawstr, NODE_MAXSTR); // allqueue(REDRAWNODE, 0); } -static void node_group_alone_cb(void *node_v, void *unused_v) +static void node_group_alone_cb(bContext *C, void *node_v, void *unused_v) { bNode *node= node_v; @@ -223,7 +207,7 @@ static int node_buts_group(uiBlock *block, bNodeTree *ntree, bNode *node, rctf * /* name button */ width= (short)(butr->xmax-butr->xmin - (node->id->us>1?19.0f:0.0f)); bt= uiDefBut(block, TEX, B_NOP, "NT:", - butr->xmin, butr->ymin, width, 19, + (short)butr->xmin, (short)butr->ymin, width, 19, node->id->name+2, 0.0, 19.0, 0, 0, "NodeTree name"); uiButSetFunc(bt, node_ID_title_cb, node, NULL); @@ -232,7 +216,7 @@ static int node_buts_group(uiBlock *block, bNodeTree *ntree, bNode *node, rctf * char str1[32]; sprintf(str1, "%d", node->id->us); bt= uiDefBut(block, BUT, B_NOP, str1, - butr->xmax-19, butr->ymin, 19, 19, + (short)butr->xmax-19, (short)butr->ymin, 19, 19, NULL, 0, 0, 0, 0, "Displays number of users."); uiButSetFunc(bt, node_group_alone_cb, node, NULL); } @@ -248,7 +232,7 @@ static int node_buts_value(uiBlock *block, bNodeTree *ntree, bNode *node, rctf * bNodeSocket *sock= node->outputs.first; /* first socket stores value */ uiDefButF(block, NUM, B_NODE_EXEC+node->nr, "", - butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, + (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 20, sock->ns.vec, sock->ns.min, sock->ns.max, 10, 2, ""); } @@ -264,13 +248,13 @@ static int node_buts_rgb(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *bu uiBlockSetEmboss(block, UI_EMBOSSP); uiDefButF(block, HSVCUBE, B_NODE_EXEC+node->nr, "", - butr->xmin, butr->ymin, butr->xmax-butr->xmin, 12, + (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 12, sock->ns.vec, 0.0f, 1.0f, 3, 0, ""); uiDefButF(block, HSVCUBE, B_NODE_EXEC+node->nr, "", - butr->xmin, butr->ymin+15, butr->xmax-butr->xmin, butr->ymax-butr->ymin -15 -15, + (short)butr->xmin, (short)butr->ymin+15, butr->xmax-butr->xmin, butr->ymax-butr->ymin -15 -15, sock->ns.vec, 0.0f, 1.0f, 2, 0, ""); uiDefButF(block, COL, B_NOP, "", - butr->xmin, butr->ymax-12, butr->xmax-butr->xmin, 12, + (short)butr->xmin, (short)butr->ymax-12, butr->xmax-butr->xmin, 12, sock->ns.vec, 0.0, 0.0, -1, 0, ""); /* the -1 above prevents col button to popup a color picker */ @@ -289,13 +273,13 @@ static int node_buts_mix_rgb(uiBlock *block, bNodeTree *ntree, bNode *node, rctf /* blend type */ uiBlockBeginAlign(block); bt=uiDefButS(block, MENU, B_NODE_EXEC+node->nr, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Overlay %x9|Divide %x5|Difference %x6|Darken %x7|Lighten %x8|Dodge %x10|Burn %x11|Color %x15|Value %x14|Saturation %x13|Hue %x12", - butr->xmin, butr->ymin, butr->xmax-butr->xmin -(a_but?20:0), 20, + (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin -(a_but?20:0), 20, &node->custom1, 0, 0, 0, 0, ""); uiButSetFunc(bt, node_but_title_cb, node, bt); /* Alpha option, composite */ if(a_but) uiDefButS(block, TOG, B_NODE_EXEC+node->nr, "A", - butr->xmax-20, butr->ymin, 20, 20, + (short)butr->xmax-20, (short)butr->ymin, 20, 20, &node->custom2, 0, 0, 0, 0, "Include Alpha of 2nd input in this operation"); } return 20; @@ -308,20 +292,20 @@ static int node_buts_time(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *b short dx= (short)((butr->xmax-butr->xmin)/2); butr->ymin += 26; - curvemap_buttons(block, node->storage, 's', B_NODE_EXEC+node->nr, B_REDR, butr); + // XXX curvemap_buttons(block, node->storage, 's', B_NODE_EXEC+node->nr, B_REDR, butr); if(cumap) { cumap->flag |= CUMA_DRAW_CFRA; if(node->custom1<node->custom2) - cumap->sample[0]= (float)(CFRA - node->custom1)/(float)(node->custom2-node->custom1); + ;// XXX cumap->sample[0]= (float)(CFRA - node->custom1)/(float)(node->custom2-node->custom1); } uiBlockBeginAlign(block); uiDefButS(block, NUM, B_NODE_EXEC+node->nr, "Sta:", - butr->xmin, butr->ymin-22, dx, 19, + (short)butr->xmin, (short)butr->ymin-22, dx, 19, &node->custom1, 1.0, 20000.0, 0, 0, "Start frame"); uiDefButS(block, NUM, B_NODE_EXEC+node->nr, "End:", - butr->xmin+dx, butr->ymin-22, dx, 19, + (short)butr->xmin+dx, (short)butr->ymin-22, dx, 19, &node->custom2, 1.0, 20000.0, 0, 0, "End frame"); } @@ -332,7 +316,7 @@ static int node_buts_valtorgb(uiBlock *block, bNodeTree *ntree, bNode *node, rct { if(block) { if(node->storage) { - draw_colorband_buts_small(block, node->storage, butr, B_NODE_EXEC+node->nr); + ; // XXX draw_colorband_buts_small(block, node->storage, butr, B_NODE_EXEC+node->nr); } } return 40; @@ -341,7 +325,7 @@ static int node_buts_valtorgb(uiBlock *block, bNodeTree *ntree, bNode *node, rct static int node_buts_curvevec(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) { if(block) { - curvemap_buttons(block, node->storage, 'v', B_NODE_EXEC+node->nr, B_REDR, butr); + ; // XXX curvemap_buttons(block, node->storage, 'v', B_NODE_EXEC+node->nr, B_REDR, butr); } return (int)(node->width-NODE_DY); } @@ -363,7 +347,7 @@ static int node_buts_curvecol(uiBlock *block, bNodeTree *ntree, bNode *node, rct else cumap->flag &= ~CUMA_DRAW_SAMPLE; - curvemap_buttons(block, node->storage, 'c', B_NODE_EXEC+node->nr, B_REDR, butr); + // XXX curvemap_buttons(block, node->storage, 'c', B_NODE_EXEC+node->nr, B_REDR, butr); } return (int)(node->width-NODE_DY); } @@ -374,14 +358,14 @@ static int node_buts_normal(uiBlock *block, bNodeTree *ntree, bNode *node, rctf bNodeSocket *sock= node->outputs.first; /* first socket stores normal */ uiDefButF(block, BUT_NORMAL, B_NODE_EXEC+node->nr, "", - butr->xmin, butr->ymin, butr->xmax-butr->xmin, butr->ymax-butr->ymin, + (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, butr->ymax-butr->ymin, sock->ns.vec, 0.0f, 1.0f, 0, 0, ""); } return (int)(node->width-NODE_DY); } -static void node_browse_tex_cb(void *ntree_v, void *node_v) +static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v) { bNodeTree *ntree= ntree_v; bNode *node= node_v; @@ -411,7 +395,7 @@ static void node_browse_tex_cb(void *ntree_v, void *node_v) node->menunr= 0; } -static void node_dynamic_update_cb(void *ntree_v, void *node_v) +static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v) { Material *ma; bNode *node= (bNode *)node_v; @@ -439,7 +423,7 @@ static void node_dynamic_update_cb(void *ntree_v, void *node_v) // allqueue(REDRAWBUTSSHADING, 0); // allqueue(REDRAWNODE, 0); - BIF_preview_changed(ID_MA); + // XXX BIF_preview_changed(ID_MA); } static int node_buts_texture(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) @@ -499,7 +483,7 @@ static int node_buts_math(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *b /* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */ -static void node_browse_text_cb(void *ntree_v, void *node_v) +static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v) { bNodeTree *ntree= ntree_v; bNode *node= node_v; @@ -525,7 +509,7 @@ static void node_browse_text_cb(void *ntree_v, void *node_v) node->menunr= 0; } -static void node_mat_alone_cb(void *node_v, void *unused) +static void node_mat_alone_cb(bContext *C, void *node_v, void *unused) { bNode *node= node_v; @@ -537,7 +521,7 @@ static void node_mat_alone_cb(void *node_v, void *unused) // allqueue(REDRAWOOPS, 0); } -static void node_browse_mat_cb(void *ntree_v, void *node_v) +static void node_browse_mat_cb(bContext *C, void *ntree_v, void *node_v) { bNodeTree *ntree= ntree_v; bNode *node= node_v; @@ -571,12 +555,12 @@ static void node_browse_mat_cb(void *ntree_v, void *node_v) // allqueue(REDRAWBUTSSHADING, 0); // allqueue(REDRAWNODE, 0); - BIF_preview_changed(ID_MA); + // XXX BIF_preview_changed(ID_MA); node->menunr= 0; } -static void node_new_mat_cb(void *ntree_v, void *node_v) +static void node_new_mat_cb(bContext *C, void *ntree_v, void *node_v) { bNodeTree *ntree= ntree_v; bNode *node= node_v; @@ -588,11 +572,11 @@ static void node_new_mat_cb(void *ntree_v, void *node_v) // allqueue(REDRAWBUTSSHADING, 0); // allqueue(REDRAWNODE, 0); - BIF_preview_changed(ID_MA); + // XXX BIF_preview_changed(ID_MA); } -static void node_texmap_cb(void *texmap_v, void *unused_v) +static void node_texmap_cb(bContext *C, void *texmap_v, void *unused_v) { init_mapping(texmap_v); } @@ -734,8 +718,8 @@ static int node_shader_buts_geometry(uiBlock *block, bNodeTree *ntree, bNode *no uiBut *but; NodeGeometry *ngeo= (NodeGeometry*)node->storage; - if(!verify_valid_uv_name(ngeo->uvname)) - uiBlockSetCol(block, TH_REDALERT); + // XXX if(!verify_valid_uv_name(ngeo->uvname)) + // XXX uiBlockSetCol(block, TH_REDALERT); but= uiDefBut(block, TEX, B_NODE_EXEC+node->nr, "UV:", butr->xmin, butr->ymin+20, butr->xmax-butr->xmin, 20, ngeo->uvname, 0, 31, 0, 0, "Set name of UV layer to use, default is active UV layer"); // uiButSetCompleteFunc(but, autocomplete_uv, NULL); uiBlockSetCol(block, TH_AUTO); @@ -754,7 +738,7 @@ static int node_shader_buts_dynamic(uiBlock *block, bNodeTree *ntree, bNode *nod { if (block) { uiBut *bt; - SpaceNode *snode= curarea->spacedata.first; + // XXX SpaceNode *snode= curarea->spacedata.first; short dy= (short)butr->ymin; int xoff=0; @@ -777,9 +761,10 @@ static int node_shader_buts_dynamic(uiBlock *block, bNodeTree *ntree, bNode *nod uiButSetFunc(bt, node_dynamic_update_cb, ntree, node); if (BTST(node->custom1, NODE_DYNAMIC_ERROR)) { - UI_ThemeColor(TH_REDALERT); - ui_rasterpos_safe(butr->xmin + xoff, butr->ymin + 5, snode->aspect); - snode_drawstring(snode, "Error! Check console...", butr->xmax - butr->xmin); + // UI_ThemeColor(TH_REDALERT); + // XXX ui_rasterpos_safe(butr->xmin + xoff, butr->ymin + 5, snode->aspect); + // XXX snode_drawstring(snode, "Error! Check console...", butr->xmax - butr->xmin); + ; } } } @@ -844,7 +829,7 @@ static void node_shader_set_butfunc(bNodeType *ntype) -static void node_browse_image_cb(void *ntree_v, void *node_v) +static void node_browse_image_cb(bContext *C, void *ntree_v, void *node_v) { bNodeTree *ntree= ntree_v; bNode *node= node_v; @@ -869,11 +854,11 @@ static void node_browse_image_cb(void *ntree_v, void *node_v) node->menunr= 0; } -static void node_active_cb(void *ntree_v, void *node_v) +static void node_active_cb(bContext *C, void *ntree_v, void *node_v) { nodeSetActive(ntree_v, node_v); } -static void node_image_type_cb(void *node_v, void *unused) +static void node_image_type_cb(bContext *C, void *node_v, void *unused) { // allqueue(REDRAWNODE, 1); @@ -912,7 +897,7 @@ static char *layer_menu(RenderResult *rr) return str; } -static void image_layer_cb(void *ima_v, void *iuser_v) +static void image_layer_cb(bContext *C, void *ima_v, void *iuser_v) { ntreeCompositForceHidden(G.scene->nodetree); @@ -1031,7 +1016,7 @@ static int node_composit_buts_image(uiBlock *block, bNodeTree *ntree, bNode *nod } /* if we use render layers from other scene, we make a nice title */ -static void set_render_layers_title(void *node_v, void *unused) +static void set_render_layers_title(bContext *C, void *node_v, void *unused) { bNode *node= node_v; Scene *sce; @@ -1073,7 +1058,7 @@ static char *scene_layer_menu(Scene *sce) return str; } -static void node_browse_scene_cb(void *ntree_v, void *node_v) +static void node_browse_scene_cb(bContext *C, void *ntree_v, void *node_v) { bNodeTree *ntree= ntree_v; bNode *node= node_v; @@ -1091,7 +1076,7 @@ static void node_browse_scene_cb(void *ntree_v, void *node_v) id_us_plus(node->id); } - set_render_layers_title(node, NULL); + set_render_layers_title(C, node, NULL); nodeSetActive(ntree, node); // allqueue(REDRAWBUTSSHADING, 0); @@ -1141,7 +1126,7 @@ static int node_composit_buts_renderlayers(uiBlock *block, bNodeTree *ntree, bNo return 19; } -static void node_blur_relative_cb(void *node, void *poin2) +static void node_blur_relative_cb(bContext *C, void *node, void *poin2) { bNode *nodev= node; NodeBlurData *nbd= nodev->storage; @@ -1156,14 +1141,14 @@ static void node_blur_relative_cb(void *node, void *poin2) } // allqueue(REDRAWNODE, 0); } -static void node_blur_update_sizex_cb(void *node, void *poin2) +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(void *node, void *poin2) +static void node_blur_update_sizey_cb(bContext *C, void *node, void *poin2) { bNode *nodev= node; NodeBlurData *nbd= nodev->storage; @@ -1900,7 +1885,7 @@ static void node_imagetype_string(char *str) str += sprintf(str, "OpenEXR %%x%d", R_OPENEXR); } -static void node_set_image_cb(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; @@ -1962,7 +1947,7 @@ static int node_composit_buts_file_output(uiBlock *block, bNodeTree *ntree, bNod return 80; } -static void node_scale_cb(void *node_v, void *unused_v) +static void node_scale_cb(bContext *C, void *node_v, void *unused_v) { bNode *node= node_v; bNodeSocket *nsock; @@ -2435,6 +2420,7 @@ void init_node_butfuncs(void) /* ************** Generic drawing ************** */ +#if 0 void node_rename_but(char *s) { uiBlock *block; @@ -2473,36 +2459,6 @@ void node_rename_but(char *s) ret= uiDoBlocks(&listb, 0, 0); } - -static void draw_nodespace_grid(SpaceNode *snode) -{ - float start, step= 25.0f; - - UI_ThemeColorShade(TH_BACK, -10); - - start= snode->v2d.cur.xmin -fmod(snode->v2d.cur.xmin, step); - - glBegin(GL_LINES); - for(; start<snode->v2d.cur.xmax; start+=step) { - glVertex2f(start, snode->v2d.cur.ymin); - glVertex2f(start, snode->v2d.cur.ymax); - } - - start= snode->v2d.cur.ymin -fmod(snode->v2d.cur.ymin, step); - for(; start<snode->v2d.cur.ymax; start+=step) { - glVertex2f(snode->v2d.cur.xmin, start); - glVertex2f(snode->v2d.cur.xmax, start); - } - - /* X and Y axis */ - UI_ThemeColorShade(TH_BACK, -18); - glVertex2f(0.0f, snode->v2d.cur.ymin); - glVertex2f(0.0f, snode->v2d.cur.ymax); - glVertex2f(snode->v2d.cur.xmin, 0.0f); - glVertex2f(snode->v2d.cur.xmax, 0.0f); - - glEnd(); -} #endif void draw_nodespace_back_pix(ScrArea *sa, SpaceNode *snode) @@ -2530,13 +2486,12 @@ void draw_nodespace_back_pix(ScrArea *sa, SpaceNode *snode) /* sort this out, this should not be needed */ //myortho2(snode->v2d.cur.xmin, snode->v2d.cur.xmax, snode->v2d.cur.ymin, snode->v2d.cur.ymax); //bwin_clear_viewmat(sa->win); /* clear buttons view */ - glLoadIdentity(); + // glLoadIdentity(); } } } #if 0 -#if 0 /* note: needs to be userpref or opengl profile option */ static void draw_nodespace_back_tex(ScrArea *sa, SpaceNode *snode) { @@ -2586,9 +2541,6 @@ static void draw_nodespace_back_tex(ScrArea *sa, SpaceNode *snode) } #endif - -#endif - void node_draw_link_bezier(View2D *v2d, float vec[4][3], int th_col1, int th_col2, int do_shaded) { float dist; |