Пример #1
0
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,
		&params,
		&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);
}
Пример #2
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;
}