Fixed some redraw problems with texture nodes.

This commit is contained in:
Robin Allen 2009-08-18 14:31:13 +00:00
parent 990dcd0f7f
commit 3803a3c5a7
6 changed files with 36 additions and 41 deletions

@ -950,9 +950,6 @@ bNode *nodeAddNodeType(bNodeTree *ntree, int type, bNodeTree *ngroup, ID *id)
if(ntype->initfunc!=NULL)
ntype->initfunc(node);
if(type==TEX_NODE_OUTPUT)
ntreeTexAssignIndex(ntree, node);
nodeAddSockets(node, ntype);
return node;
@ -1021,9 +1018,6 @@ bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal)
nnode->new_node= NULL;
nnode->preview= NULL;
if(node->type==TEX_NODE_OUTPUT)
ntreeTexAssignIndex(ntree, node);
return nnode;
}

@ -607,9 +607,9 @@ static void do_node_internal_buttons(bContext *C, void *node_v, int event)
}
WM_event_add_notifier(C, NC_SCENE|ND_NODES, CTX_data_scene(C));
}
// else if(snode->treetype==NTREE_TEXTURE)
// texture_node_event(snode, val);
else if(snode->treetype==NTREE_TEXTURE) {
WM_event_add_notifier(C, NC_TEXTURE|ND_NODES, snode->id);
}
}
}

@ -213,10 +213,8 @@ void snode_handle_recalc(bContext *C, SpaceNode *snode)
WM_event_add_notifier(C, NC_MATERIAL|ND_NODES, snode->id);
else if(snode->treetype==NTREE_COMPOSIT)
WM_event_add_notifier(C, NC_SCENE|ND_NODES, snode->id);
else if(snode->treetype==NTREE_TEXTURE) {
// ntreeTexUpdatePreviews(snode->nodetree); /* XXX texture nodes should follow shader node methods (ton) */
// XXX BIF_preview_changed(ID_TE);
}
else if(snode->treetype==NTREE_TEXTURE)
WM_event_add_notifier(C, NC_TEXTURE|ND_NODES, snode->id);
}
#if 0

@ -152,12 +152,16 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
if(wmn->data==ND_FILEREAD)
ED_area_tag_refresh(sa);
break;
/* future: add ID checks? */
case NC_MATERIAL:
/* future: add ID check? */
if(wmn->data==ND_SHADING)
ED_area_tag_refresh(sa);
break;
case NC_TEXTURE:
if(wmn->data==ND_NODES)
ED_area_tag_refresh(sa);
break;
}
}
@ -280,6 +284,9 @@ static void node_region_listener(ARegion *ar, wmNotifier *wmn)
case NC_MATERIAL:
ED_region_tag_redraw(ar);
break;
case NC_TEXTURE:
ED_region_tag_redraw(ar);
break;
}
}

@ -152,6 +152,26 @@ static void unique_name(bNode *node)
}
}
static void assign_index(struct bNode *node)
{
bNode *tnode;
int index = 1;
tnode = node;
while(tnode->prev)
tnode = tnode->prev;
check_index:
for(; tnode; tnode= tnode->next)
if(tnode->type == TEX_NODE_OUTPUT && tnode != node)
if(tnode->custom1 == index) {
index ++;
goto check_index;
}
node->custom1 = index;
}
static void init(bNode *node)
{
TexNodeOutput *tno = MEM_callocN(sizeof(TexNodeOutput), "TEX_output");
@ -159,17 +179,16 @@ static void init(bNode *node)
strcpy(tno->name, "Default");
unique_name(node);
ntreeTexAssignIndex(0, node);
assign_index(node);
}
static void copy(bNode *orig, bNode *new)
{
node_copy_standard_storage(orig, new);
unique_name(new);
ntreeTexAssignIndex(0, new);
assign_index(new);
}
bNodeType tex_node_output= {
/* *next,*prev */ NULL, NULL,
/* type code */ TEX_NODE_OUTPUT,

@ -297,26 +297,3 @@ char* ntreeTexOutputMenu(bNodeTree *ntree)
return str;
}
void ntreeTexAssignIndex(struct bNodeTree *ntree, struct bNode *node)
{
bNode *tnode;
int index = 1;
if(ntree)
tnode = ntree->nodes.first;
else {
tnode = node;
while(tnode->prev) tnode = tnode->prev;
}
check_index:
for(; tnode; tnode= tnode->next)
if(tnode->type == TEX_NODE_OUTPUT && tnode != node)
if(tnode->custom1 == index) {
index ++;
goto check_index;
}
node->custom1 = index;
}