forked from bartvdbraak/blender
Fixed some redraw problems with texture nodes.
This commit is contained in:
parent
990dcd0f7f
commit
3803a3c5a7
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user