static GimpValueArray * procedural_db_set_data_invoker (GimpProcedure *procedure, Gimp *gimp, GimpContext *context, GimpProgress *progress, const GimpValueArray *args, GError **error) { gboolean success = TRUE; const gchar *identifier; gint32 bytes; const guint8 *data; identifier = g_value_get_string (gimp_value_array_index (args, 0)); bytes = g_value_get_int (gimp_value_array_index (args, 1)); data = gimp_value_get_int8array (gimp_value_array_index (args, 2)); if (success) { gchar *canonical = gimp_canonicalize_identifier (identifier); gimp_plug_in_manager_set_data (gimp->plug_in_manager, canonical, bytes, data); g_free (canonical); } return gimp_procedure_get_return_values (procedure, success, error ? *error : NULL); }
static GValueArray * plugin_icon_register_invoker (GimpProcedure *procedure, Gimp *gimp, GimpContext *context, GimpProgress *progress, const GValueArray *args, GError **error) { gboolean success = TRUE; const gchar *procedure_name; gint32 icon_type; gint32 icon_data_length; const guint8 *icon_data; procedure_name = g_value_get_string (&args->values[0]); icon_type = g_value_get_enum (&args->values[1]); icon_data_length = g_value_get_int (&args->values[2]); icon_data = gimp_value_get_int8array (&args->values[3]); if (success) { GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in; if (plug_in && plug_in->call_mode == GIMP_PLUG_IN_CALL_QUERY) { GimpPlugInProcedure *proc; gchar *canonical; canonical = gimp_canonicalize_identifier (procedure_name); proc = gimp_plug_in_procedure_find (plug_in->plug_in_def->procedures, canonical); g_free (canonical); if (proc) gimp_plug_in_procedure_set_icon (proc, icon_type, icon_data, icon_data_length); else success = FALSE; } else { success = FALSE; } } return gimp_procedure_get_return_values (procedure, success, error ? *error : NULL); }
static GimpValueArray * image_convert_color_profile_invoker (GimpProcedure *procedure, Gimp *gimp, GimpContext *context, GimpProgress *progress, const GimpValueArray *args, GError **error) { gboolean success = TRUE; GimpImage *image; gint32 num_bytes; const guint8 *color_profile; gint32 intent; gboolean bpc; image = gimp_value_get_image (gimp_value_array_index (args, 0), gimp); num_bytes = g_value_get_int (gimp_value_array_index (args, 1)); color_profile = gimp_value_get_int8array (gimp_value_array_index (args, 2)); intent = g_value_get_enum (gimp_value_array_index (args, 3)); bpc = g_value_get_boolean (gimp_value_array_index (args, 4)); if (success) { if (color_profile) { GimpColorProfile *profile; profile = gimp_color_profile_new_from_icc_profile (color_profile, num_bytes, error); if (profile) { success = gimp_image_convert_color_profile (image, profile, intent, bpc, progress, error); g_object_unref (profile); } else success = FALSE; } else success = FALSE; } return gimp_procedure_get_return_values (procedure, success, error ? *error : NULL); }
static GimpValueArray * image_convert_set_dither_matrix_invoker (GimpProcedure *procedure, Gimp *gimp, GimpContext *context, GimpProgress *progress, const GimpValueArray *args, GError **error) { gboolean success = TRUE; gint32 width; gint32 height; gint32 matrix_length; const guint8 *matrix; width = g_value_get_int (gimp_value_array_index (args, 0)); height = g_value_get_int (gimp_value_array_index (args, 1)); matrix_length = g_value_get_int (gimp_value_array_index (args, 2)); matrix = gimp_value_get_int8array (gimp_value_array_index (args, 3)); if (success) { if (width == 0 || height == 0 || matrix_length == width * height) { gimp_image_convert_type_set_dither_matrix (matrix, width, height); } else { g_set_error_literal (error, GIMP_PDB_ERROR, GIMP_PDB_ERROR_INVALID_ARGUMENT, "Dither matrix length must be width * height"); success = FALSE; } } return gimp_procedure_get_return_values (procedure, success, error ? *error : NULL); }
GPParam * plug_in_args_to_params (GimpValueArray *args, gboolean full_copy) { GPParam *params; gint length; gint i; g_return_val_if_fail (args != NULL, NULL); params = g_new0 (GPParam, gimp_value_array_length (args)); length = gimp_value_array_length (args); for (i = 0; i < length; i++) { GValue *value = gimp_value_array_index (args, i); params[i].type = gimp_pdb_compat_arg_type_from_gtype (G_VALUE_TYPE (value)); switch (params[i].type) { case GIMP_PDB_INT32: if (G_VALUE_HOLDS_INT (value)) params[i].data.d_int32 = g_value_get_int (value); else if (G_VALUE_HOLDS_UINT (value)) params[i].data.d_int32 = g_value_get_uint (value); else if (G_VALUE_HOLDS_ENUM (value)) params[i].data.d_int32 = g_value_get_enum (value); else if (G_VALUE_HOLDS_BOOLEAN (value)) params[i].data.d_int32 = g_value_get_boolean (value); else { g_printerr ("%s: unhandled GIMP_PDB_INT32 type: %s\n", G_STRFUNC, g_type_name (G_VALUE_TYPE (value))); g_return_val_if_reached (params); } break; case GIMP_PDB_INT16: params[i].data.d_int16 = g_value_get_int (value); break; case GIMP_PDB_INT8: params[i].data.d_int8 = g_value_get_uint (value); break; case GIMP_PDB_FLOAT: params[i].data.d_float = g_value_get_double (value); break; case GIMP_PDB_STRING: if (full_copy) params[i].data.d_string = g_value_dup_string (value); else params[i].data.d_string = (gchar *) g_value_get_string (value); break; case GIMP_PDB_INT32ARRAY: if (full_copy) params[i].data.d_int32array = gimp_value_dup_int32array (value); else params[i].data.d_int32array = (gint32 *) gimp_value_get_int32array (value); break; case GIMP_PDB_INT16ARRAY: if (full_copy) params[i].data.d_int16array = gimp_value_dup_int16array (value); else params[i].data.d_int16array = (gint16 *) gimp_value_get_int16array (value); break; case GIMP_PDB_INT8ARRAY: if (full_copy) params[i].data.d_int8array = gimp_value_dup_int8array (value); else params[i].data.d_int8array = (guint8 *) gimp_value_get_int8array (value); break; case GIMP_PDB_FLOATARRAY: if (full_copy) params[i].data.d_floatarray = gimp_value_dup_floatarray (value); else params[i].data.d_floatarray = (gdouble *) gimp_value_get_floatarray (value); break; case GIMP_PDB_STRINGARRAY: if (full_copy) params[i].data.d_stringarray = gimp_value_dup_stringarray (value); else params[i].data.d_stringarray = (gchar **) gimp_value_get_stringarray (value); break; case GIMP_PDB_COLOR: gimp_value_get_rgb (value, ¶ms[i].data.d_color); break; case GIMP_PDB_ITEM: params[i].data.d_item = g_value_get_int (value); break; case GIMP_PDB_DISPLAY: params[i].data.d_display = g_value_get_int (value); break; case GIMP_PDB_IMAGE: params[i].data.d_image = g_value_get_int (value); break; case GIMP_PDB_LAYER: params[i].data.d_layer = g_value_get_int (value); break; case GIMP_PDB_CHANNEL: params[i].data.d_channel = g_value_get_int (value); break; case GIMP_PDB_DRAWABLE: params[i].data.d_drawable = g_value_get_int (value); break; case GIMP_PDB_SELECTION: params[i].data.d_selection = g_value_get_int (value); break; case GIMP_PDB_COLORARRAY: if (full_copy) params[i].data.d_colorarray = gimp_value_dup_colorarray (value); else params[i].data.d_colorarray = (GimpRGB *) gimp_value_get_colorarray (value); break; case GIMP_PDB_VECTORS: params[i].data.d_vectors = g_value_get_int (value); break; case GIMP_PDB_PARASITE: { GimpParasite *parasite = (full_copy ? g_value_dup_boxed (value) : g_value_get_boxed (value)); if (parasite) { params[i].data.d_parasite.name = parasite->name; params[i].data.d_parasite.flags = parasite->flags; params[i].data.d_parasite.size = parasite->size; params[i].data.d_parasite.data = parasite->data; if (full_copy) { parasite->name = NULL; parasite->flags = 0; parasite->size = 0; parasite->data = NULL; gimp_parasite_free (parasite); } } else { params[i].data.d_parasite.name = NULL; params[i].data.d_parasite.flags = 0; params[i].data.d_parasite.size = 0; params[i].data.d_parasite.data = NULL; } } break; case GIMP_PDB_STATUS: params[i].data.d_status = g_value_get_enum (value); break; case GIMP_PDB_END: break; } } return params; }