void layer_add_gegl_node(GeglEditorLayer* layer, GeglNode* node) { //get input pads //gegl_pad_is_output GSList *pads = gegl_node_get_input_pads(node); guint num_inputs = g_slist_length(pads); gchar** inputs = malloc(sizeof(gchar*)*num_inputs); int i; for(i = 0; pads != NULL; pads = pads->next, i++) { inputs[i] = (gchar*)gegl_pad_get_name(pads->data); } gint id; if(gegl_node_get_pad(node, "output") == NULL) { id = gegl_editor_add_node(layer->editor, gegl_node_get_operation(node), num_inputs, inputs, 0, NULL); } else { gchar* output = "output"; gchar* outputs[] = {output}; id = gegl_editor_add_node(layer->editor, gegl_node_get_operation(node), num_inputs, inputs, 1, outputs); } node_id_pair* new_pair = malloc(sizeof(node_id_pair)); new_pair->node = node; new_pair->id = id; layer->pairs = g_slist_append(layer->pairs, new_pair); }
/* List should be freed */ GSList * gegl_pad_get_depends_on (GeglPad *self) { GSList *depends_on = NULL; if (gegl_pad_is_input (self)) { GeglPad *source_pad = gegl_pad_get_connected_to (self); if (source_pad) depends_on = g_slist_prepend (depends_on, source_pad); } else if (gegl_pad_is_output (self)) { GSList *input_pads = gegl_node_get_input_pads (self->node); depends_on = g_slist_copy (input_pads); } return depends_on; }