Conversion of "Toggle Link" tool to "Make Link"

This commit alters the behaviour of "Toggle Link" tool found in the node
editor so that it only makes link between selected sockets. Links cannot
be deleted by using the tool again as before. Instead deleting links can
be done by using the old method (drag with lmb).

The delete functionality may require further investigation to see if it
should be improved.
This commit is contained in:
Juho Vepsalainen
2008-01-07 12:55:37 +00:00
parent 5efa093dfc
commit e895b7a36a
4 changed files with 17 additions and 20 deletions

View File

@@ -1855,34 +1855,31 @@ void node_select_linked(SpaceNode *snode, int out)
allqueue(REDRAWNODE, 1);
}
void node_toggle_link(SpaceNode *snode)
/* makes a link between selected output and input sockets */
void node_make_link(SpaceNode *snode)
{
bNode *fromnode, *tonode;
bNodeLink *remlink, *link;
bNodeLink *link;
bNodeSocket *outsock= snode->edittree->selout;
bNodeSocket *insock= snode->edittree->selin;
if(!insock || !outsock) return;
if(nodeFindLink(snode->edittree, outsock, insock)) return;
remlink= nodeFindLink(snode->edittree, outsock, insock);
if(remlink) nodeRemLink(snode->edittree, remlink);
else {
if(nodeFindNode(snode->edittree, outsock, &fromnode, NULL) &&
nodeFindNode(snode->edittree, insock, &tonode, NULL)) {
link= nodeAddLink(snode->edittree, fromnode, outsock, tonode, insock);
NodeTagChanged(snode->edittree, tonode);
node_remove_extra_links(snode, insock, link);
}
else return;
if(nodeFindNode(snode->edittree, outsock, &fromnode, NULL) &&
nodeFindNode(snode->edittree, insock, &tonode, NULL)) {
link= nodeAddLink(snode->edittree, fromnode, outsock, tonode, insock);
NodeTagChanged(snode->edittree, tonode);
node_remove_extra_links(snode, insock, link);
}
else return;
ntreeSolveOrder(snode->edittree);
snode_verify_groups(snode);
snode_handle_recalc(snode);
allqueue(REDRAWNODE, 0);
BIF_undo_push("Toggle Link");
BIF_undo_push("Make Link Between Sockets");
}
static void node_border_link_delete(SpaceNode *snode)
@@ -2278,7 +2275,7 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
snode_handle_recalc(snode);
break;
case FKEY:
node_toggle_link(snode);
node_make_link(snode);
break;
case GKEY:
if(fromlib) fromlib= -1;