diff options
Diffstat (limited to 'source/blender/nodes/intern/CMP_nodes/CMP_image.c')
-rw-r--r-- | source/blender/nodes/intern/CMP_nodes/CMP_image.c | 305 |
1 files changed, 4 insertions, 301 deletions
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_image.c b/source/blender/nodes/intern/CMP_nodes/CMP_image.c index e96fe6479a2..b9ae376992d 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_image.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_image.c @@ -201,193 +201,6 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **in, b } }; -static void node_browse_image_cb(void *ntree_v, void *node_v) -{ - bNodeTree *ntree= ntree_v; - bNode *node= node_v; - - nodeSetActive(ntree, node); - - if(node->menunr<1) return; - if(node->menunr==32767) { /* code for Load New */ - addqueue(curarea->win, UI_BUT_EVENT, B_NODE_LOADIMAGE); - } - else { - if(node->id) node->id->us--; - node->id= BLI_findlink(&G.main->image, node->menunr-1); - id_us_plus(node->id); - - BLI_strncpy(node->name, node->id->name+2, 21); - - NodeTagChanged(ntree, node); - BKE_image_signal((Image *)node->id, node->storage, IMA_SIGNAL_USER_NEW_IMAGE); - addqueue(curarea->win, UI_BUT_EVENT, B_NODE_EXEC+node->nr); - } - node->menunr= 0; -}; - -static void node_active_cb(void *ntree_v, void *node_v) -{ - nodeSetActive(ntree_v, node_v); -}; - -static void node_image_type_cb(void *node_v, void *unused) -{ - - allqueue(REDRAWNODE, 1); -}; - -static char *node_image_type_pup(void) -{ - char *str= MEM_mallocN(256, "image type pup"); - int a; - - str[0]= 0; - - a= sprintf(str, "Image Type %%t|"); - a+= sprintf(str+a, " Image %%x%d %%i%d|", IMA_SRC_FILE, ICON_IMAGE_DEHLT); - a+= sprintf(str+a, " Movie %%x%d %%i%d|", IMA_SRC_MOVIE, ICON_SEQUENCE); - a+= sprintf(str+a, " Sequence %%x%d %%i%d|", IMA_SRC_SEQUENCE, ICON_IMAGE_COL); - a+= sprintf(str+a, " Generated %%x%d %%i%d", IMA_SRC_GENERATED, ICON_BLANK1); - - return str; -}; - -/* copy from buttons_shading.c */ -static char *layer_menu(RenderResult *rr) -{ - RenderLayer *rl; - int len= 40 + 40*BLI_countlist(&rr->layers); - short a, nr; - char *str= MEM_callocN(len, "menu layers"); - - strcpy(str, "Layer %t"); - a= strlen(str); - for(nr=0, rl= rr->layers.first; rl; rl= rl->next, nr++) { - a+= sprintf(str+a, "|%s %%x%d", rl->name, nr); - } - - return str; -}; - -static void image_layer_cb(void *ima_v, void *iuser_v) -{ - - ntreeCompositForceHidden(G.scene->nodetree); - BKE_image_multilayer_index(ima_v, iuser_v); - allqueue(REDRAWNODE, 0); -}; - -static int node_composit_buts_image(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) -{ - ImageUser *iuser= node->storage; - - if(block) { - uiBut *bt; - short dy= (short)butr->ymax-19; - char *strp; - - uiBlockBeginAlign(block); - uiBlockSetCol(block, TH_BUT_SETTING2); - - /* browse button */ - IMAnames_to_pupstring(&strp, NULL, "LOAD NEW %x32767", &(G.main->image), NULL, NULL); - node->menunr= 0; - bt= uiDefButS(block, MENU, B_NOP, strp, - butr->xmin, dy, 19, 19, - &node->menunr, 0, 0, 0, 0, "Browses existing choices"); - uiButSetFunc(bt, node_browse_image_cb, ntree, node); - if(strp) MEM_freeN(strp); - - /* Add New button */ - if(node->id==NULL) { - bt= uiDefBut(block, BUT, B_NODE_LOADIMAGE, "Load New", - butr->xmin+19, dy, (short)(butr->xmax-butr->xmin-19.0f), 19, - NULL, 0.0, 0.0, 0, 0, "Add new Image"); - uiButSetFunc(bt, node_active_cb, ntree, node); - uiBlockSetCol(block, TH_AUTO); - } - else { - /* name button + type */ - Image *ima= (Image *)node->id; - short xmin= (short)butr->xmin, xmax= (short)butr->xmax; - short width= xmax - xmin - 45; - short icon= ICON_IMAGE_DEHLT; - - if(ima->source==IMA_SRC_MOVIE) icon= ICON_SEQUENCE; - else if(ima->source==IMA_SRC_SEQUENCE) icon= ICON_IMAGE_COL; - else if(ima->source==IMA_SRC_GENERATED) icon= ICON_BLANK1; - - bt= uiDefBut(block, TEX, B_NOP, "IM:", - xmin+19, dy, width, 19, - node->id->name+2, 0.0, 19.0, 0, 0, "Image name"); - uiButSetFunc(bt, node_ID_title_cb, node, NULL); - - /* buffer type option */ - strp= node_image_type_pup(); - bt= uiDefIconTextButS(block, MENU, B_NOP, icon, strp, - xmax-26, dy, 26, 19, - &ima->source, 0.0, 19.0, 0, 0, "Image type"); - uiButSetFunc(bt, node_image_type_cb, node, ima); - MEM_freeN(strp); - - if( ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE) ) { - width= (xmax-xmin)/2; - - dy-= 19; - uiDefButI(block, NUM, B_NODE_EXEC+node->nr, "Frs:", - xmin, dy, width, 19, - &iuser->frames, 0.0, 10000.0, 0, 0, "Amount of images used in animation"); - uiDefButI(block, NUM, B_NODE_EXEC+node->nr, "SFra:", - xmin+width, dy, width, 19, - &iuser->sfra, 1.0, 10000.0, 0, 0, "Start frame of animation"); - dy-= 19; - uiDefButI(block, NUM, B_NODE_EXEC+node->nr, "Offs:", - xmin, dy, width, 19, - &iuser->offset, 0.0, 10000.0, 0, 0, "Offsets the number of the frame to use in the animation"); - uiDefButS(block, TOG, B_NODE_EXEC+node->nr, "Cycl", - xmin+width, dy, width-20, 19, - &iuser->cycl, 0.0, 0.0, 0, 0, "Make animation go cyclic"); - uiDefIconButBitS(block, TOG, IMA_ANIM_ALWAYS, B_NODE_EXEC+node->nr, ICON_AUTO, - xmax-20, dy, 20, 19, - &iuser->flag, 0.0, 0.0, 0, 0, "Always refresh Image on frame changes"); - } - if( ima->type==IMA_TYPE_MULTILAYER && ima->rr) { - RenderLayer *rl= BLI_findlink(&ima->rr->layers, iuser->layer); - if(rl) { - width= (xmax-xmin); - dy-= 19; - strp= layer_menu(ima->rr); - bt= uiDefButS(block, MENU, B_NODE_EXEC+node->nr, strp, - xmin, dy, width, 19, - &iuser->layer, 0.0, 10000.0, 0, 0, "Layer"); - uiButSetFunc(bt, image_layer_cb, ima, node->storage); - MEM_freeN(strp); - } - } - } - - } - if(node->id) { - Image *ima= (Image *)node->id; - int retval= 19; - - /* for each draw we test for anim refresh event */ - if(iuser->flag & IMA_ANIM_REFRESHED) { - iuser->flag &= ~IMA_ANIM_REFRESHED; - addqueue(curarea->win, UI_BUT_EVENT, B_NODE_EXEC+node->nr); - } - - if( ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE) ) - retval+= 38; - if( ima->type==IMA_TYPE_MULTILAYER) - retval+= 19; - return retval; - } - else - return 19; -}; - static void node_composit_init_image(bNode* node) { ImageUser *iuser= MEM_callocN(sizeof(ImageUser), "node image user"); @@ -406,8 +219,8 @@ bNodeType cmp_node_image= { /* output sock */ cmp_node_rlayers_out, /* storage */ "ImageUser", /* execfunc */ node_composit_exec_image, - /* butfunc */ node_composit_buts_image, - node_composit_init_image + /* butfunc */ NULL, + /* initfunc */ node_composit_init_image }; /* **************** RENDER RESULT ******************** */ @@ -513,116 +326,6 @@ static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **in, } }; -/* if we use render layers from other scene, we make a nice title */ -static void set_render_layers_title(void *node_v, void *unused) -{ - bNode *node= node_v; - Scene *sce; - SceneRenderLayer *srl; - char str[64]; - - if(node->id) { - BLI_strncpy(str, node->id->name+2, 21); - strcat(str, "|"); - sce= (Scene *)node->id; - } - else { - str[0]= 0; - sce= G.scene; - } - srl= BLI_findlink(&sce->r.layers, node->custom1); - if(srl==NULL) { - node->custom1= 0; - srl= sce->r.layers.first; - } - - strcat(str, srl->name); - BLI_strncpy(node->name, str, 32); -}; - -static char *scene_layer_menu(Scene *sce) -{ - SceneRenderLayer *srl; - int len= 40 + 40*BLI_countlist(&sce->r.layers); - short a, nr; - char *str= MEM_callocN(len, "menu layers"); - - strcpy(str, "Active Layer %t"); - a= strlen(str); - for(nr=0, srl= sce->r.layers.first; srl; srl= srl->next, nr++) { - a+= sprintf(str+a, "|%s %%x%d", srl->name, nr); - } - - return str; -}; - -static void node_browse_scene_cb(void *ntree_v, void *node_v) -{ - bNodeTree *ntree= ntree_v; - bNode *node= node_v; - Scene *sce; - - if(node->menunr<1) return; - - if(node->id) { - node->id->us--; - node->id= NULL; - } - sce= BLI_findlink(&G.main->scene, node->menunr-1); - if(sce!=G.scene) { - node->id= &sce->id; - id_us_plus(node->id); - } - - set_render_layers_title(node, NULL); - nodeSetActive(ntree, node); - - allqueue(REDRAWBUTSSHADING, 0); - allqueue(REDRAWNODE, 0); - NodeTagChanged(ntree, node); - - node->menunr= 0; -}; - -static int node_composit_buts_renderlayers(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr) -{ - if(block) { - uiBut *bt; - char *strp; - - /* browse button scene */ - uiBlockBeginAlign(block); - IDnames_to_pupstring(&strp, NULL, "", &(G.main->scene), NULL, NULL); - node->menunr= 0; - bt= uiDefButS(block, MENU, B_NOP, strp, - butr->xmin, butr->ymin, 20, 19, - &node->menunr, 0, 0, 0, 0, "Browse Scene to use RenderLayer from"); - uiButSetFunc(bt, node_browse_scene_cb, ntree, node); - if(strp) MEM_freeN(strp); - - /* browse button layer */ - strp= scene_layer_menu(node->id?(Scene *)node->id:G.scene); - if(node->id) - bt= uiDefIconTextButS(block, MENU, B_NODE_EXEC+node->nr, ICON_SCENE_DEHLT, strp, - butr->xmin+20, butr->ymin, (butr->xmax-butr->xmin)-40, 19, - &node->custom1, 0, 0, 0, 0, "Choose Render Layer"); - else - bt= uiDefButS(block, MENU, B_NODE_EXEC+node->nr, strp, - butr->xmin+20, butr->ymin, (butr->xmax-butr->xmin)-40, 19, - &node->custom1, 0, 0, 0, 0, "Choose Render Layer"); - uiButSetFunc(bt, set_render_layers_title, node, NULL); - MEM_freeN(strp); - - /* re-render */ - /* uses custom2, not the best implementation of the world... but we need it to work now :) */ - bt= uiDefIconButS(block, TOG, B_NODE_EXEC+node->nr, ICON_SCENE, - butr->xmax-20, butr->ymin, 20, 19, - &node->custom2, 0, 0, 0, 0, "Re-render this Layer"); - - } - return 19; -}; - bNodeType cmp_node_rlayers= { /* type code */ CMP_NODE_R_LAYERS, @@ -633,8 +336,8 @@ bNodeType cmp_node_rlayers= { /* output sock */ cmp_node_rlayers_out, /* storage */ "", /* execfunc */ node_composit_exec_rlayers, - /* butfunc */ node_composit_buts_renderlayers, - NULL + /* butfunc */ NULL, + /* initfunc */ NULL }; |