static int node_animation_properties(bNodeTree *ntree, bNode *node) { bNodeSocket *sock; const ListBase *lb; Link *link; PointerRNA ptr; PropertyRNA *prop; /* check to see if any of the node's properties have fcurves */ RNA_pointer_create((ID *)ntree, &RNA_Node, node, &ptr); lb = RNA_struct_type_properties(ptr.type); for (link = lb->first; link; link = link->next) { prop = (PropertyRNA *)link; if (RNA_property_animated(&ptr, prop)) { nodeUpdate(ntree, node); return 1; } } /* now check node sockets */ for (sock = node->inputs.first; sock; sock = sock->next) { RNA_pointer_create((ID *)ntree, &RNA_NodeSocket, sock, &ptr); prop = RNA_struct_find_property(&ptr, "default_value"); if (RNA_property_animated(&ptr, prop)) { nodeUpdate(ntree, node); return 1; } } return 0; }
static int node_animation_properties(bNodeTree *ntree, bNode *node) { bNodeSocket *sock; const ListBase *lb; Link *link; PointerRNA ptr; PropertyRNA *prop; /* check to see if any of the node's properties have fcurves */ RNA_pointer_create((ID *)ntree, &RNA_Node, node, &ptr); lb = RNA_struct_type_properties(ptr.type); for (link = lb->first; link; link = link->next) { int driven, len = 1, index; prop = (PropertyRNA *)link; if (RNA_property_array_check(prop)) len = RNA_property_array_length(&ptr, prop); for (index = 0; index < len; index++) { if (rna_get_fcurve(&ptr, prop, index, NULL, &driven)) { nodeUpdate(ntree, node); return 1; } } } /* now check node sockets */ for (sock = node->inputs.first; sock; sock = sock->next) { int driven, len = 1, index; RNA_pointer_create((ID *)ntree, &RNA_NodeSocket, sock, &ptr); prop = RNA_struct_find_property(&ptr, "default_value"); if (prop) { if (RNA_property_array_check(prop)) len = RNA_property_array_length(&ptr, prop); for (index = 0; index < len; index++) { if (rna_get_fcurve(&ptr, prop, index, NULL, &driven)) { nodeUpdate(ntree, node); return 1; } } } } return 0; }