static gboolean proc_has_compatible_params(gchar* proc_name) { gchar* proc_blurb; gchar* proc_help; gchar* proc_author; gchar* proc_copyright; gchar* proc_date; GimpPDBProcType proc_type; gint num_params; gint num_values; GimpParamDef *params; GimpParamDef *return_vals; gimp_procedural_db_proc_info ( proc_name, &proc_blurb, &proc_help, &proc_author, &proc_copyright, &proc_date, &proc_type, &num_params, &num_values, ¶ms, &return_vals ); int i; GimpParamDef param; gboolean compatible = TRUE; for (i = 0; (i < num_params) && compatible; i++) { param = bimp_get_param_info(proc_name, i); if ( param.type == GIMP_PDB_INT32 || param.type == GIMP_PDB_INT16 || param.type == GIMP_PDB_INT8 || param.type == GIMP_PDB_FLOAT || //(param.type == GIMP_PDB_STRING && strstr(param.name, "filename") == NULL) || param.type == GIMP_PDB_STRING || param.type == GIMP_PDB_COLOR || param.type == GIMP_PDB_DRAWABLE || param.type == GIMP_PDB_IMAGE ) { compatible = TRUE; } else { compatible = FALSE; } } return (compatible && num_params > 0); }
static gboolean apply_userdef(userdef_settings settings, image_output out) { gboolean success = TRUE; int param_i; GimpParamDef param_info; gboolean saving_function = (strstr(settings->procedure, "-save") != NULL); for (param_i = 0; param_i < settings->num_params; param_i++) { switch((settings->params[param_i]).type) { case GIMP_PDB_IMAGE: (settings->params[param_i]).data.d_image = out->image_id; break; case GIMP_PDB_DRAWABLE: (settings->params[param_i]).data.d_drawable = out->drawable_id; break; case GIMP_PDB_STRING: if (saving_function) { param_info = bimp_get_param_info(settings->procedure, param_i); if (strcmp(param_info.name, "filename") == 0) { (settings->params[param_i]).data.d_string = g_strdup(out->filepath); } else if (strcmp(param_info.name, "raw-filename") == 0) { (settings->params[param_i]).data.d_string = g_strdup(out->filename); } } break; default: break; } } gint nreturn_vals; GimpParam *return_vals = gimp_run_procedure2( settings->procedure, &nreturn_vals, settings->num_params, settings->params ); if (!saving_function) out->drawable_id = gimp_image_merge_visible_layers(out->image_id, GIMP_CLIP_TO_IMAGE); return success; }