~siretart/ubuntu/utopic/blender/libav10

« back to all changes in this revision

Viewing changes to source/blender/editors/space_node/node_edit.c

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2012-05-12 20:02:22 UTC
  • mfrom: (14.2.16 sid)
  • Revision ID: package-import@ubuntu.com-20120512200222-lznjs2cxzaq96wua
Tags: 2.63a-1
* New upstream bugfix release
  + debian/patches/: re-worked since source code changed

Show diffs side-by-side

added added

removed removed

Lines of Context:
243
243
                return nodeGetActive(ntree);
244
244
}
245
245
 
246
 
void snode_dag_update(bContext *UNUSED(C), SpaceNode *snode)
247
 
{
 
246
static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
 
247
{
 
248
        bNode *node;
 
249
        
 
250
        if (ntree == lookup)
 
251
                return 1;
 
252
        
 
253
        for (node=ntree->nodes.first; node; node=node->next)
 
254
                if (node->type == NODE_GROUP && node->id)
 
255
                        if (has_nodetree((bNodeTree*)node->id, lookup))
 
256
                                return 1;
 
257
        
 
258
        return 0;
 
259
}
 
260
 
 
261
static void snode_dag_update_group(void *calldata, ID *owner_id, bNodeTree *ntree)
 
262
{
 
263
        if (has_nodetree(ntree, calldata))
 
264
                DAG_id_tag_update(owner_id, 0);
 
265
}
 
266
 
 
267
void snode_dag_update(bContext *C, SpaceNode *snode)
 
268
{
 
269
        Main *bmain = CTX_data_main(C);
 
270
 
 
271
        /* for groups, update all ID's using this */
 
272
        if (snode->edittree!=snode->nodetree) {
 
273
                bNodeTreeType *tti= ntreeGetType(snode->edittree->type);
 
274
                tti->foreach_nodetree(bmain, snode->edittree, snode_dag_update_group);
 
275
        }
 
276
 
248
277
        DAG_id_tag_update(snode->id, 0);
249
278
}
250
279
 
585
614
                nodeUpdateID(snode->nodetree, gnode->id);
586
615
}
587
616
 
588
 
static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
589
 
{
590
 
        bNode *node;
591
 
        
592
 
        if (ntree == lookup)
593
 
                return 1;
594
 
        
595
 
        for (node=ntree->nodes.first; node; node=node->next)
596
 
                if (node->type == NODE_GROUP && node->id)
597
 
                        if (has_nodetree((bNodeTree*)node->id, lookup))
598
 
                                return 1;
599
 
        
600
 
        return 0;
601
 
}
602
 
 
603
617
void ED_node_set_active(Main *bmain, bNodeTree *ntree, bNode *node)
604
618
{
605
619
        int was_active_texture = (node->flag & NODE_ACTIVE_TEXTURE);
2412
2426
                                /* when linking to group outputs, update the socket type */
2413
2427
                                /* XXX this should all be part of a generic update system */
2414
2428
                                if (!link->tonode) {
2415
 
                                        link->tosock->type = link->fromsock->type;
 
2429
                                        if(link->tosock->type != link->fromsock->type)
 
2430
                                                nodeSocketSetType(link->tosock, link->fromsock->type);
2416
2431
                                }
2417
2432
                        }
2418
2433
                        else if (outside_group_rect(snode) && (link->tonode || link->fromnode)) {