diff options
author | Ton Roosendaal <ton@blender.org> | 2008-02-15 18:20:50 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-02-15 18:20:50 +0300 |
commit | de707a32be8f07dc826665c5f24bd8478503743c (patch) | |
tree | a915262a388613c09a40bddb2af3be58292b60ac /source/blender/src/editnode.c | |
parent | b5437cc8a2fbc8d0d6c8bfad74e3b031ea855e93 (diff) |
Simple but useful compositor feature:
CTRL+click on node will not only select it, but also connect the active
viewer to the top output of the node.
To evaluate: make viewing option to have this as a default on select.
Could work nice for collapsed nodes.
Diffstat (limited to 'source/blender/src/editnode.c')
-rw-r--r-- | source/blender/src/editnode.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c index f1cfd9c630c..d59f095ea1d 100644 --- a/source/blender/src/editnode.c +++ b/source/blender/src/editnode.c @@ -1316,6 +1316,47 @@ static int do_header_hidden_node(SpaceNode *snode, bNode *node, float mx, float return 0; } +static void node_link_viewer(SpaceNode *snode, bNode *tonode) +{ + bNode *node; + + /* context check */ + if(tonode==NULL || tonode->outputs.first==NULL) + return; + if( ELEM(tonode->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) + return; + + /* get viewer */ + for(node= snode->edittree->nodes.first; node; node= node->next) + if( ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) + if(node->flag & NODE_DO_OUTPUT) + break; + + if(node) { + bNodeLink *link; + + /* get link to viewer */ + for(link= snode->edittree->links.first; link; link= link->next) + if(link->tonode==node) + break; + + if(link) { + link->fromnode= tonode; + link->fromsock= tonode->outputs.first; + NodeTagChanged(snode->edittree, node); + + snode_handle_recalc(snode); + } + } +} + + +void node_active_link_viewer(SpaceNode *snode) +{ + bNode *node= editnode_get_active(snode->edittree); + if(node) + node_link_viewer(snode, node); +} /* return 0: nothing done */ static int node_mouse_select(SpaceNode *snode, unsigned short event) @@ -1358,6 +1399,10 @@ static int node_mouse_select(SpaceNode *snode, unsigned short event) node_set_active(snode, node); + /* viewer linking */ + if(G.qual & LR_CTRLKEY) + node_link_viewer(snode, node); + /* not so nice (no event), but function below delays redraw otherwise */ force_draw(0); |