mirror of https://github.com/GNOME/gimp.git
Issue #10811: implement GeglParamColor missing in some places.
Though I had already implemented passing GeglColor through the PDB, it was not complete. In particular, the protocol was not able to pass GeglParamColor specs. Fixes: > LibGimp-WARNING **: 16:06:09.451: _gimp_gp_param_def_to_param_spec: GParamSpec type unsupported 'GeglParamColor' This is part of the fix to issue #10811, though it's not complete yet.
This commit is contained in:
parent
4f8793eaa7
commit
0b6b76a419
|
@ -928,6 +928,58 @@ plug_in_proc_arg_deserialize (GScanner *scanner,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GP_PARAM_DEF_TYPE_GEGL_COLOR:
|
||||||
|
{
|
||||||
|
GPParamColor *default_val = NULL;
|
||||||
|
gint bpp = 0;
|
||||||
|
guint8 *data = NULL;
|
||||||
|
gchar *encoding = NULL;
|
||||||
|
gint profile_size = 0;
|
||||||
|
guint8 *profile_data = NULL;
|
||||||
|
|
||||||
|
if (! gimp_scanner_parse_int (scanner,
|
||||||
|
¶m_def.meta.m_gegl_color.has_alpha))
|
||||||
|
{
|
||||||
|
token = G_TOKEN_INT;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! gimp_scanner_parse_int (scanner, &bpp) ||
|
||||||
|
bpp > 40 ||
|
||||||
|
! gimp_scanner_parse_data (scanner, bpp, &data) ||
|
||||||
|
! gimp_scanner_parse_string (scanner, &encoding) ||
|
||||||
|
! gimp_scanner_parse_int (scanner, &profile_size) ||
|
||||||
|
! gimp_scanner_parse_data (scanner, profile_size, &profile_data))
|
||||||
|
{
|
||||||
|
g_free (data);
|
||||||
|
g_free (encoding);
|
||||||
|
g_free (profile_data);
|
||||||
|
|
||||||
|
token = G_TOKEN_INT;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bpp > 0)
|
||||||
|
{
|
||||||
|
default_val = g_new0 (GPParamColor, 1);
|
||||||
|
|
||||||
|
memcpy (default_val->data, data, bpp);
|
||||||
|
default_val->size = bpp;
|
||||||
|
default_val->encoding = encoding;
|
||||||
|
default_val->profile_size = profile_size;
|
||||||
|
default_val->profile_data = profile_data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_free (encoding);
|
||||||
|
g_free (profile_data);
|
||||||
|
}
|
||||||
|
g_free (data);
|
||||||
|
|
||||||
|
param_def.meta.m_gegl_color.default_val = default_val;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GP_PARAM_DEF_TYPE_ID:
|
case GP_PARAM_DEF_TYPE_ID:
|
||||||
if (! gimp_scanner_parse_int (scanner,
|
if (! gimp_scanner_parse_int (scanner,
|
||||||
¶m_def.meta.m_id.none_ok))
|
¶m_def.meta.m_id.none_ok))
|
||||||
|
@ -986,6 +1038,15 @@ plug_in_proc_arg_deserialize (GScanner *scanner,
|
||||||
g_free (param_def.meta.m_string.default_val);
|
g_free (param_def.meta.m_string.default_val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GP_PARAM_DEF_TYPE_GEGL_COLOR:
|
||||||
|
if (param_def.meta.m_gegl_color.default_val)
|
||||||
|
{
|
||||||
|
g_free (param_def.meta.m_gegl_color.default_val->encoding);
|
||||||
|
g_free (param_def.meta.m_gegl_color.default_val->profile_data);
|
||||||
|
g_free (param_def.meta.m_gegl_color.default_val);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GP_PARAM_DEF_TYPE_COLOR:
|
case GP_PARAM_DEF_TYPE_COLOR:
|
||||||
case GP_PARAM_DEF_TYPE_ID:
|
case GP_PARAM_DEF_TYPE_ID:
|
||||||
break;
|
break;
|
||||||
|
@ -1149,6 +1210,41 @@ plug_in_rc_write_proc_arg (GimpConfigWriter *writer,
|
||||||
buf[0], buf[1], buf[2], buf[3]);
|
buf[0], buf[1], buf[2], buf[3]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GP_PARAM_DEF_TYPE_GEGL_COLOR:
|
||||||
|
{
|
||||||
|
gint bpp = 0;
|
||||||
|
guint8 *data = NULL;
|
||||||
|
gchar *encoding = NULL;
|
||||||
|
guint32 profile_size = 0;
|
||||||
|
guint8 *profile_data = NULL;
|
||||||
|
|
||||||
|
gimp_config_writer_printf (writer, "%d",
|
||||||
|
param_def.meta.m_gegl_color.has_alpha);
|
||||||
|
|
||||||
|
if (param_def.meta.m_gegl_color.default_val &&
|
||||||
|
param_def.meta.m_gegl_color.default_val->size > 0)
|
||||||
|
{
|
||||||
|
bpp = param_def.meta.m_gegl_color.default_val->size;
|
||||||
|
data = param_def.meta.m_gegl_color.default_val->data;
|
||||||
|
encoding = param_def.meta.m_gegl_color.default_val->encoding;
|
||||||
|
profile_size = param_def.meta.m_gegl_color.default_val->profile_size;
|
||||||
|
profile_data = param_def.meta.m_gegl_color.default_val->profile_data;
|
||||||
|
|
||||||
|
gimp_config_writer_printf (writer, "%d", bpp);
|
||||||
|
gimp_config_writer_data (writer, bpp, data);
|
||||||
|
gimp_config_writer_string (writer, encoding);
|
||||||
|
|
||||||
|
gimp_config_writer_printf (writer, "%d", profile_size);
|
||||||
|
if (profile_size > 0)
|
||||||
|
gimp_config_writer_data (writer, profile_size, profile_data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gimp_config_writer_printf (writer, "%s", "NULL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GP_PARAM_DEF_TYPE_ID:
|
case GP_PARAM_DEF_TYPE_ID:
|
||||||
gimp_config_writer_printf (writer, "%d",
|
gimp_config_writer_printf (writer, "%d",
|
||||||
param_def.meta.m_id.none_ok);
|
param_def.meta.m_id.none_ok);
|
||||||
|
|
|
@ -163,6 +163,59 @@ _gimp_gp_param_def_to_param_spec (const GPParamDef *param_def)
|
||||||
flags);
|
flags);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GP_PARAM_DEF_TYPE_GEGL_COLOR:
|
||||||
|
if (! strcmp (param_def->type_name, "GeglParamColor"))
|
||||||
|
{
|
||||||
|
GeglColor *default_color = NULL;
|
||||||
|
|
||||||
|
if (param_def->meta.m_gegl_color.default_val)
|
||||||
|
{
|
||||||
|
GPParamColor *default_val = param_def->meta.m_gegl_color.default_val;
|
||||||
|
const Babl *format = NULL;
|
||||||
|
const Babl *space = NULL;
|
||||||
|
gint bpp;
|
||||||
|
|
||||||
|
default_color = gegl_color_new ("black");
|
||||||
|
|
||||||
|
if (default_val->profile_data)
|
||||||
|
{
|
||||||
|
GimpColorProfile *profile;
|
||||||
|
|
||||||
|
profile = gimp_color_profile_new_from_icc_profile (default_val->profile_data,
|
||||||
|
default_val->profile_size,
|
||||||
|
NULL);
|
||||||
|
if (profile)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
space = gimp_color_profile_get_space (profile,
|
||||||
|
GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC,
|
||||||
|
&error);
|
||||||
|
|
||||||
|
if (! space)
|
||||||
|
{
|
||||||
|
g_printerr ("%s: failed to create Babl space from profile: %s\n",
|
||||||
|
G_STRFUNC, error->message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
g_object_unref (profile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
format = babl_format_with_space (default_val->encoding, space);
|
||||||
|
bpp = babl_format_get_bytes_per_pixel (format);
|
||||||
|
|
||||||
|
if (bpp != default_val->size)
|
||||||
|
g_printerr ("%s: encoding \"%s\" expects %d bpp but data size is %d bpp.\n",
|
||||||
|
G_STRFUNC, default_val->encoding, bpp, default_val->size);
|
||||||
|
else
|
||||||
|
gegl_color_set_pixel (default_color, format, default_val->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return gegl_param_spec_color (name, nick, blurb, default_color, flags);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GP_PARAM_DEF_TYPE_ID:
|
case GP_PARAM_DEF_TYPE_ID:
|
||||||
if (! strcmp (param_def->type_name, "GimpParamDisplay"))
|
if (! strcmp (param_def->type_name, "GimpParamDisplay"))
|
||||||
return gimp_param_spec_display (name, nick, blurb,
|
return gimp_param_spec_display (name, nick, blurb,
|
||||||
|
@ -365,6 +418,45 @@ _gimp_param_spec_to_gp_param_def (GParamSpec *pspec,
|
||||||
gimp_param_spec_rgb_get_default (pspec,
|
gimp_param_spec_rgb_get_default (pspec,
|
||||||
¶m_def->meta.m_color.default_val);
|
¶m_def->meta.m_color.default_val);
|
||||||
}
|
}
|
||||||
|
else if (GEGL_IS_PARAM_SPEC_COLOR (pspec))
|
||||||
|
{
|
||||||
|
GPParamColor *default_val = NULL;
|
||||||
|
GeglColor *default_color;
|
||||||
|
|
||||||
|
param_def->param_def_type = GP_PARAM_DEF_TYPE_GEGL_COLOR;
|
||||||
|
/* TODO: no no-alpha support for the time being. */
|
||||||
|
param_def->meta.m_color.has_alpha = TRUE;
|
||||||
|
|
||||||
|
default_color = gegl_param_spec_color_get_default (pspec);
|
||||||
|
if (default_color != NULL)
|
||||||
|
{
|
||||||
|
const Babl *format;
|
||||||
|
|
||||||
|
format = gegl_color_get_format (default_color);
|
||||||
|
default_val = g_new0 (GPParamColor, 1);
|
||||||
|
|
||||||
|
default_val->size = babl_format_get_bytes_per_pixel (format);
|
||||||
|
default_val->encoding = (gchar *) g_strdup (babl_format_get_encoding (format));
|
||||||
|
|
||||||
|
default_val->profile_data = NULL;
|
||||||
|
default_val->profile_size = 0;
|
||||||
|
if (babl_format_get_space (format) != babl_space ("sRGB"))
|
||||||
|
{
|
||||||
|
const char *icc;
|
||||||
|
int icc_length;
|
||||||
|
|
||||||
|
icc = babl_space_get_icc (babl_format_get_space (format), &icc_length);
|
||||||
|
|
||||||
|
if (icc_length > 0)
|
||||||
|
{
|
||||||
|
default_val->profile_data = g_new0 (guint8, icc_length);
|
||||||
|
memcpy (default_val->profile_data, icc, icc_length);
|
||||||
|
}
|
||||||
|
default_val->profile_size = icc_length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
param_def->meta.m_gegl_color.default_val = default_val;
|
||||||
|
}
|
||||||
else if (pspec_type == GIMP_TYPE_PARAM_IMAGE)
|
else if (pspec_type == GIMP_TYPE_PARAM_IMAGE)
|
||||||
{
|
{
|
||||||
GimpParamSpecImage *ispec = GIMP_PARAM_SPEC_IMAGE (pspec);
|
GimpParamSpecImage *ispec = GIMP_PARAM_SPEC_IMAGE (pspec);
|
||||||
|
|
|
@ -1226,6 +1226,55 @@ _gp_param_def_read (GIOChannel *channel,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GP_PARAM_DEF_TYPE_GEGL_COLOR:
|
||||||
|
{
|
||||||
|
GPParamColor *default_val = NULL;
|
||||||
|
GBytes *pixel_data = NULL;
|
||||||
|
GBytes *icc_data = NULL;
|
||||||
|
gchar *encoding = NULL;
|
||||||
|
|
||||||
|
if (! _gimp_wire_read_int32 (channel,
|
||||||
|
(guint32 *) ¶m_def->meta.m_gegl_color.has_alpha, 1,
|
||||||
|
user_data) ||
|
||||||
|
! _gimp_wire_read_gegl_color (channel, &pixel_data, &icc_data, &encoding,
|
||||||
|
1, user_data))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (pixel_data != NULL)
|
||||||
|
{
|
||||||
|
default_val = g_new0 (GPParamColor, 1);
|
||||||
|
|
||||||
|
default_val->encoding = encoding;
|
||||||
|
default_val->size = g_bytes_get_size (pixel_data);
|
||||||
|
if (default_val->size > 40)
|
||||||
|
{
|
||||||
|
g_free (default_val);
|
||||||
|
g_free (encoding);
|
||||||
|
g_bytes_unref (pixel_data);
|
||||||
|
g_bytes_unref (icc_data);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
memcpy (default_val->data, g_bytes_get_data (pixel_data, NULL),
|
||||||
|
default_val->size);
|
||||||
|
g_bytes_unref (pixel_data);
|
||||||
|
if (icc_data)
|
||||||
|
{
|
||||||
|
gsize profile_size;
|
||||||
|
|
||||||
|
default_val->profile_data = g_bytes_unref_to_data (icc_data,
|
||||||
|
&profile_size);
|
||||||
|
default_val->profile_size = (guint32) profile_size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
default_val->profile_data = NULL;
|
||||||
|
default_val->profile_size = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
param_def->meta.m_gegl_color.default_val = default_val;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GP_PARAM_DEF_TYPE_ID:
|
case GP_PARAM_DEF_TYPE_ID:
|
||||||
if (! _gimp_wire_read_int32 (channel,
|
if (! _gimp_wire_read_int32 (channel,
|
||||||
(guint32 *) ¶m_def->meta.m_id.none_ok, 1,
|
(guint32 *) ¶m_def->meta.m_id.none_ok, 1,
|
||||||
|
@ -1274,6 +1323,15 @@ _gp_param_def_destroy (GPParamDef *param_def)
|
||||||
g_free (param_def->meta.m_string.default_val);
|
g_free (param_def->meta.m_string.default_val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GP_PARAM_DEF_TYPE_GEGL_COLOR:
|
||||||
|
if (param_def->meta.m_gegl_color.default_val)
|
||||||
|
{
|
||||||
|
g_free (param_def->meta.m_gegl_color.default_val->encoding);
|
||||||
|
g_free (param_def->meta.m_gegl_color.default_val->profile_data);
|
||||||
|
}
|
||||||
|
g_free (param_def->meta.m_gegl_color.default_val);
|
||||||
|
break;
|
||||||
|
|
||||||
case GP_PARAM_DEF_TYPE_COLOR:
|
case GP_PARAM_DEF_TYPE_COLOR:
|
||||||
case GP_PARAM_DEF_TYPE_ID:
|
case GP_PARAM_DEF_TYPE_ID:
|
||||||
break;
|
break;
|
||||||
|
@ -1518,6 +1576,42 @@ _gp_param_def_write (GIOChannel *channel,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GP_PARAM_DEF_TYPE_GEGL_COLOR:
|
||||||
|
{
|
||||||
|
GBytes *pixel_data = NULL;
|
||||||
|
GBytes *icc_data = NULL;
|
||||||
|
gchar *encoding = "";
|
||||||
|
|
||||||
|
if (! _gimp_wire_write_int32 (channel,
|
||||||
|
(guint32 *) ¶m_def->meta.m_gegl_color.has_alpha, 1,
|
||||||
|
user_data))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (param_def->meta.m_gegl_color.default_val)
|
||||||
|
{
|
||||||
|
pixel_data = g_bytes_new_static (param_def->meta.m_gegl_color.default_val->data,
|
||||||
|
param_def->meta.m_gegl_color.default_val->size);
|
||||||
|
icc_data = g_bytes_new_static (param_def->meta.m_gegl_color.default_val->profile_data,
|
||||||
|
param_def->meta.m_gegl_color.default_val->profile_size);
|
||||||
|
encoding = param_def->meta.m_gegl_color.default_val->encoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! _gimp_wire_write_gegl_color (channel,
|
||||||
|
&pixel_data,
|
||||||
|
&icc_data,
|
||||||
|
&encoding,
|
||||||
|
1, user_data))
|
||||||
|
{
|
||||||
|
g_bytes_unref (pixel_data);
|
||||||
|
g_bytes_unref (icc_data);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_bytes_unref (pixel_data);
|
||||||
|
g_bytes_unref (icc_data);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GP_PARAM_DEF_TYPE_ID:
|
case GP_PARAM_DEF_TYPE_ID:
|
||||||
if (! _gimp_wire_write_int32 (channel,
|
if (! _gimp_wire_write_int32 (channel,
|
||||||
(guint32 *) ¶m_def->meta.m_id.none_ok, 1,
|
(guint32 *) ¶m_def->meta.m_id.none_ok, 1,
|
||||||
|
|
|
@ -57,6 +57,7 @@ typedef enum
|
||||||
GP_PARAM_DEF_TYPE_FLOAT,
|
GP_PARAM_DEF_TYPE_FLOAT,
|
||||||
GP_PARAM_DEF_TYPE_STRING,
|
GP_PARAM_DEF_TYPE_STRING,
|
||||||
GP_PARAM_DEF_TYPE_COLOR,
|
GP_PARAM_DEF_TYPE_COLOR,
|
||||||
|
GP_PARAM_DEF_TYPE_GEGL_COLOR,
|
||||||
GP_PARAM_DEF_TYPE_ID,
|
GP_PARAM_DEF_TYPE_ID,
|
||||||
GP_PARAM_DEF_TYPE_ID_ARRAY
|
GP_PARAM_DEF_TYPE_ID_ARRAY
|
||||||
} GPParamDefType;
|
} GPParamDefType;
|
||||||
|
@ -79,31 +80,32 @@ typedef enum
|
||||||
} GPParamType;
|
} GPParamType;
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GPConfig GPConfig;
|
typedef struct _GPConfig GPConfig;
|
||||||
typedef struct _GPTileReq GPTileReq;
|
typedef struct _GPTileReq GPTileReq;
|
||||||
typedef struct _GPTileAck GPTileAck;
|
typedef struct _GPTileAck GPTileAck;
|
||||||
typedef struct _GPTileData GPTileData;
|
typedef struct _GPTileData GPTileData;
|
||||||
typedef struct _GPParamDef GPParamDef;
|
typedef struct _GPParamDef GPParamDef;
|
||||||
typedef struct _GPParamDefInt GPParamDefInt;
|
typedef struct _GPParamDefInt GPParamDefInt;
|
||||||
typedef struct _GPParamDefUnit GPParamDefUnit;
|
typedef struct _GPParamDefUnit GPParamDefUnit;
|
||||||
typedef struct _GPParamDefEnum GPParamDefEnum;
|
typedef struct _GPParamDefEnum GPParamDefEnum;
|
||||||
typedef struct _GPParamDefBoolean GPParamDefBoolean;
|
typedef struct _GPParamDefBoolean GPParamDefBoolean;
|
||||||
typedef struct _GPParamDefFloat GPParamDefFloat;
|
typedef struct _GPParamDefFloat GPParamDefFloat;
|
||||||
typedef struct _GPParamDefString GPParamDefString;
|
typedef struct _GPParamDefString GPParamDefString;
|
||||||
typedef struct _GPParamDefChoice GPParamDefChoice;
|
typedef struct _GPParamDefChoice GPParamDefChoice;
|
||||||
typedef struct _GPParamStrv GPParamStrv;
|
typedef struct _GPParamStrv GPParamStrv;
|
||||||
typedef struct _GPParamDefColor GPParamDefColor;
|
typedef struct _GPParamDefColor GPParamDefColor;
|
||||||
typedef struct _GPParamDefID GPParamDefID;
|
typedef struct _GPParamDefGeglColor GPParamDefGeglColor;
|
||||||
typedef struct _GPParamDefIDArray GPParamDefIDArray;
|
typedef struct _GPParamDefID GPParamDefID;
|
||||||
typedef struct _GPParam GPParam;
|
typedef struct _GPParamDefIDArray GPParamDefIDArray;
|
||||||
typedef struct _GPParamArray GPParamArray;
|
typedef struct _GPParam GPParam;
|
||||||
typedef struct _GPParamIDArray GPParamIDArray;
|
typedef struct _GPParamArray GPParamArray;
|
||||||
typedef struct _GPParamColor GPParamColor;
|
typedef struct _GPParamIDArray GPParamIDArray;
|
||||||
typedef struct _GPParamColorArray GPParamColorArray;
|
typedef struct _GPParamColor GPParamColor;
|
||||||
typedef struct _GPProcRun GPProcRun;
|
typedef struct _GPParamColorArray GPParamColorArray;
|
||||||
typedef struct _GPProcReturn GPProcReturn;
|
typedef struct _GPProcRun GPProcRun;
|
||||||
typedef struct _GPProcInstall GPProcInstall;
|
typedef struct _GPProcReturn GPProcReturn;
|
||||||
typedef struct _GPProcUninstall GPProcUninstall;
|
typedef struct _GPProcInstall GPProcInstall;
|
||||||
|
typedef struct _GPProcUninstall GPProcUninstall;
|
||||||
|
|
||||||
|
|
||||||
struct _GPConfig
|
struct _GPConfig
|
||||||
|
@ -208,6 +210,12 @@ struct _GPParamDefColor
|
||||||
GimpRGB default_val;
|
GimpRGB default_val;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _GPParamDefGeglColor
|
||||||
|
{
|
||||||
|
gint32 has_alpha;
|
||||||
|
GPParamColor *default_val;
|
||||||
|
};
|
||||||
|
|
||||||
struct _GPParamDefID
|
struct _GPParamDefID
|
||||||
{
|
{
|
||||||
gint32 none_ok;
|
gint32 none_ok;
|
||||||
|
@ -236,16 +244,17 @@ struct _GPParamDef
|
||||||
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
GPParamDefInt m_int;
|
GPParamDefInt m_int;
|
||||||
GPParamDefUnit m_unit;
|
GPParamDefUnit m_unit;
|
||||||
GPParamDefEnum m_enum;
|
GPParamDefEnum m_enum;
|
||||||
GPParamDefBoolean m_boolean;
|
GPParamDefBoolean m_boolean;
|
||||||
GPParamDefFloat m_float;
|
GPParamDefFloat m_float;
|
||||||
GPParamDefString m_string;
|
GPParamDefString m_string;
|
||||||
GPParamDefColor m_color;
|
GPParamDefColor m_color;
|
||||||
GPParamDefID m_id;
|
GPParamDefGeglColor m_gegl_color;
|
||||||
GPParamDefIDArray m_id_array;
|
GPParamDefID m_id;
|
||||||
GPParamDefChoice m_choice;
|
GPParamDefIDArray m_id_array;
|
||||||
|
GPParamDefChoice m_choice;
|
||||||
} meta;
|
} meta;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -513,7 +513,6 @@ _gimp_wire_read_gegl_color (GIOChannel *channel,
|
||||||
if (! _gimp_wire_read_int32 (channel,
|
if (! _gimp_wire_read_int32 (channel,
|
||||||
&size, 1,
|
&size, 1,
|
||||||
user_data) ||
|
user_data) ||
|
||||||
size == 0 ||
|
|
||||||
size > 40 ||
|
size > 40 ||
|
||||||
! _gimp_wire_read_int8 (channel, pixel, size, user_data) ||
|
! _gimp_wire_read_int8 (channel, pixel, size, user_data) ||
|
||||||
! _gimp_wire_read_string (channel, &(encoding[i]), 1, user_data) ||
|
! _gimp_wire_read_string (channel, &(encoding[i]), 1, user_data) ||
|
||||||
|
@ -522,6 +521,7 @@ _gimp_wire_read_gegl_color (GIOChannel *channel,
|
||||||
g_clear_pointer (&(encoding[i]), g_free);
|
g_clear_pointer (&(encoding[i]), g_free);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
pixel_data[i] = (size > 0 ? g_bytes_new (pixel, size) : NULL);
|
||||||
|
|
||||||
/* Read space (profile data). */
|
/* Read space (profile data). */
|
||||||
|
|
||||||
|
@ -539,10 +539,8 @@ _gimp_wire_read_gegl_color (GIOChannel *channel,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
icc_data[i] = g_bytes_new_take (icc, size);
|
icc_data[i] = g_bytes_new_take (icc, icc_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
pixel_data[i] = g_bytes_new (pixel, size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -743,19 +741,27 @@ _gimp_wire_write_gegl_color (GIOChannel *channel,
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
const guint8 *pixel;
|
const guint8 *pixel = NULL;
|
||||||
gsize bpp;
|
gsize bpp = 0;
|
||||||
const guint8 *icc;
|
const guint8 *icc = NULL;
|
||||||
gsize icc_length;
|
gsize icc_length = 0;
|
||||||
|
|
||||||
pixel = g_bytes_get_data (pixel_data[i], &bpp);
|
if (pixel_data[i])
|
||||||
icc = g_bytes_get_data (pixel_data[i], &icc_length);
|
pixel = g_bytes_get_data (pixel_data[i], &bpp);
|
||||||
|
if (icc_data[i])
|
||||||
|
icc = g_bytes_get_data (icc_data[i], &icc_length);
|
||||||
|
|
||||||
if (! _gimp_wire_write_int32 (channel, (const guint32 *) &bpp, 1, user_data) ||
|
if (! _gimp_wire_write_int32 (channel, (const guint32 *) &bpp, 1, user_data))
|
||||||
! _gimp_wire_write_int8 (channel, pixel, bpp, user_data) ||
|
return FALSE;
|
||||||
! _gimp_wire_write_string (channel, &(encoding[i]), 1, user_data) ||
|
|
||||||
! _gimp_wire_write_int32 (channel, (const guint32 *) &icc_length, 1, user_data) ||
|
if (bpp > 0 && ! _gimp_wire_write_int8 (channel, pixel, bpp, user_data))
|
||||||
! _gimp_wire_write_int8 (channel, icc, icc_length, user_data))
|
return FALSE;
|
||||||
|
|
||||||
|
if (! _gimp_wire_write_string (channel, &(encoding[i]), 1, user_data) ||
|
||||||
|
! _gimp_wire_write_int32 (channel, (const guint32 *) &icc_length, 1, user_data))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (icc_length > 0 && ! _gimp_wire_write_int8 (channel, icc, icc_length, user_data))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -291,7 +291,7 @@ gimp_config_param_spec_duplicate (GParamSpec *pspec)
|
||||||
copy = gegl_param_spec_color (name, nick, blurb,
|
copy = gegl_param_spec_color (name, nick, blurb,
|
||||||
/*TRUE,*/
|
/*TRUE,*/
|
||||||
color, flags);
|
color, flags);
|
||||||
g_object_unref (color);
|
g_clear_object (&color);
|
||||||
}
|
}
|
||||||
else if (G_IS_PARAM_SPEC_PARAM (pspec))
|
else if (G_IS_PARAM_SPEC_PARAM (pspec))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue