libgimpbase: add support for arrays of object IDs to gimpprotocol

This commit is contained in:
Michael Natterer 2019-09-05 11:34:54 +02:00
parent 0fefb7e922
commit 85591eb799
2 changed files with 81 additions and 1 deletions

View file

@ -1133,6 +1133,13 @@ _gp_param_def_read (GIOChannel *channel,
return FALSE;
break;
case GP_PARAM_DEF_TYPE_ID_ARRAY:
if (! _gimp_wire_read_string (channel,
&param_def->meta.m_id_array.type_name, 1,
user_data))
return FALSE;
break;
case GP_PARAM_DEF_TYPE_PARAM_DEF:
if (! _gimp_wire_read_string (channel,
&param_def->meta.m_param_def.type_name, 1,
@ -1175,6 +1182,10 @@ _gp_param_def_destroy (GPParamDef *param_def)
case GP_PARAM_DEF_TYPE_ID:
break;
case GP_PARAM_DEF_TYPE_ID_ARRAY:
g_free (param_def->meta.m_id_array.type_name);
break;
case GP_PARAM_DEF_TYPE_PARAM_DEF:
g_free (param_def->meta.m_param_def.type_name);
break;
@ -1411,6 +1422,13 @@ _gp_param_def_write (GIOChannel *channel,
return FALSE;
break;
case GP_PARAM_DEF_TYPE_ID_ARRAY:
if (! _gimp_wire_write_string (channel,
&param_def->meta.m_id_array.type_name, 1,
user_data))
return FALSE;
break;
case GP_PARAM_DEF_TYPE_PARAM_DEF:
if (! _gimp_wire_write_string (channel,
&param_def->meta.m_param_def.type_name, 1,
@ -1704,6 +1722,31 @@ _gp_params_read (GIOChannel *channel,
}
break;
case GP_PARAM_TYPE_ID_ARRAY:
if (! _gimp_wire_read_string (channel,
&(*params)[i].data.d_id_array.type_name, 1,
user_data))
goto cleanup;
if (! _gimp_wire_read_int32 (channel,
&(*params)[i].data.d_id_array.size, 1,
user_data))
goto cleanup;
(*params)[i].data.d_id_array.data = g_new0 (gint32,
(*params)[i].data.d_id_array.size);
if (! _gimp_wire_read_int32 (channel,
(guint32 *) (*params)[i].data.d_id_array.data,
(*params)[i].data.d_id_array.size,
user_data))
{
g_free ((*params)[i].data.d_id_array.data);
(*params)[i].data.d_id_array.data = NULL;
goto cleanup;
}
break;
case GP_PARAM_TYPE_PARASITE:
if (! _gimp_wire_read_string (channel,
&(*params)[i].data.d_parasite.name, 1,
@ -1833,6 +1876,20 @@ _gp_params_write (GIOChannel *channel,
return;
break;
case GP_PARAM_TYPE_ID_ARRAY:
if (! _gimp_wire_write_string (channel,
&params[i].data.d_id_array.type_name, 1,
user_data) ||
! _gimp_wire_write_int32 (channel,
(const guint32 *) &params[i].data.d_id_array.size, 1,
user_data) ||
! _gimp_wire_write_int32 (channel,
(const guint32 *) params[i].data.d_id_array.data,
params[i].data.d_id_array.size,
user_data))
return;
break;
case GP_PARAM_TYPE_PARASITE:
{
GimpParasite *p = &params[i].data.d_parasite;
@ -1909,6 +1966,11 @@ _gp_params_destroy (GPParam *params,
}
break;
case GP_PARAM_TYPE_ID_ARRAY:
g_free (params[i].data.d_id_array.type_name);
g_free (params[i].data.d_id_array.data);
break;
case GP_PARAM_TYPE_PARASITE:
if (params[i].data.d_parasite.name)
g_free (params[i].data.d_parasite.name);

View file

@ -57,6 +57,7 @@ typedef enum
GP_PARAM_DEF_TYPE_STRING,
GP_PARAM_DEF_TYPE_COLOR,
GP_PARAM_DEF_TYPE_ID,
GP_PARAM_DEF_TYPE_ID_ARRAY,
GP_PARAM_DEF_TYPE_PARAM_DEF
} GPParamDefType;
@ -69,6 +70,7 @@ typedef enum
GP_PARAM_TYPE_PARASITE,
GP_PARAM_TYPE_ARRAY,
GP_PARAM_TYPE_STRING_ARRAY,
GP_PARAM_TYPE_ID_ARRAY,
GP_PARAM_TYPE_PARAM_DEF
} GPParamType;
@ -86,10 +88,12 @@ typedef struct _GPParamDefFloat GPParamDefFloat;
typedef struct _GPParamDefString GPParamDefString;
typedef struct _GPParamDefColor GPParamDefColor;
typedef struct _GPParamDefID GPParamDefID;
typedef struct _GPParamDefIDArray GPParamDefIDArray;
typedef struct _GPParamDefParamDef GPParamDefParamDef;
typedef struct _GPParam GPParam;
typedef struct _GPParamArray GPParamArray;
typedef struct _GPParamStringArray GPParamStringArray;
typedef struct _GPParamIDArray GPParamIDArray;
typedef struct _GPProcRun GPProcRun;
typedef struct _GPProcReturn GPProcReturn;
typedef struct _GPProcInstall GPProcInstall;
@ -189,6 +193,11 @@ struct _GPParamDefID
gint32 none_ok;
};
struct _GPParamDefIDArray
{
gchar *type_name;
};
struct _GPParamDefParamDef
{
gchar *type_name;
@ -213,6 +222,7 @@ struct _GPParamDef
GPParamDefString m_string;
GPParamDefColor m_color;
GPParamDefID m_id;
GPParamDefIDArray m_id_array;
GPParamDefParamDef m_param_def;
} meta;
};
@ -229,6 +239,13 @@ struct _GPParamStringArray
gchar **data;
};
struct _GPParamIDArray
{
gchar *type_name;
guint32 size;
gint32 *data;
};
struct _GPParam
{
GPParamType param_type;
@ -243,6 +260,7 @@ struct _GPParam
GimpParasite d_parasite;
GPParamArray d_array;
GPParamStringArray d_string_array;
GPParamIDArray d_id_array;
GPParamDef d_param_def;
} data;
};