app, libgimp*, modules, pdb, plug-ins: new GimpParamColor.

This is meant to obsolete GeglParamColor with at least an additional argument
has_alpha which we need in GIMP. It allows to advertize when a parameter wants
an opaque color, which in particular means we know when displaying a GUI to pick
colors with alpha or not.
This commit is contained in:
Jehan
2024-04-19 23:02:29 +02:00
parent cbb333c220
commit 2b27feb2fd
50 changed files with 526 additions and 162 deletions

View File

@ -67,6 +67,11 @@ static GParamSpec * check_param_spec_w (GObject *object,
const gchar *property_name,
GType type,
const gchar *strloc);
static GParamSpec * check_param_specs_w (GObject *object,
const gchar *property_name,
GType type1,
GType type2,
const gchar *strloc);
static gboolean get_numeric_values (GObject *object,
GParamSpec *param_spec,
@ -419,35 +424,10 @@ gimp_prop_int_combo_box_new (GObject *config,
g_return_val_if_fail (property_name != NULL, NULL);
/* Require property is integer valued type: INT or ENUM, and is writeable. */
param_spec = check_param_spec_quiet (config, property_name,
G_TYPE_PARAM_INT, G_STRFUNC);
if (param_spec)
{
param_spec = check_param_spec_w (config, property_name,
G_TYPE_PARAM_INT, G_STRFUNC);
if (! param_spec)
return NULL;
}
else
{
param_spec = check_param_spec_quiet (config, property_name,
G_TYPE_PARAM_ENUM, G_STRFUNC);
if (param_spec)
{
param_spec = check_param_spec_w (config, property_name,
G_TYPE_PARAM_ENUM, G_STRFUNC);
if (! param_spec)
return NULL;
}
else
{
g_warning ("%s: property '%s' of %s is not integer valued.",
G_STRFUNC,
param_spec->name,
g_type_name (param_spec->owner_type));
return NULL;
}
}
param_spec = check_param_specs_w (config, property_name, G_TYPE_PARAM_INT,
G_TYPE_PARAM_ENUM, G_STRFUNC);
if (! param_spec)
return NULL;
combo_box = g_object_new (GIMP_TYPE_INT_COMBO_BOX,
"model", store,
@ -4091,8 +4071,8 @@ gimp_prop_color_area_new (GObject *config,
GtkWidget *area;
GeglColor *color = NULL;
param_spec = check_param_spec_w (config, property_name,
GEGL_TYPE_PARAM_COLOR, G_STRFUNC);
param_spec = check_param_specs_w (config, property_name, GEGL_TYPE_PARAM_COLOR,
GIMP_TYPE_PARAM_COLOR, G_STRFUNC);
if (! param_spec)
return NULL;
@ -4199,8 +4179,8 @@ gimp_prop_color_select_new (GObject *config,
GtkWidget *button;
GeglColor *value = NULL;
param_spec = check_param_spec_w (config, property_name,
GEGL_TYPE_PARAM_COLOR, G_STRFUNC);
param_spec = check_param_specs_w (config, property_name, GEGL_TYPE_PARAM_COLOR,
GIMP_TYPE_PARAM_COLOR, G_STRFUNC);
if (! param_spec)
return NULL;
@ -4247,8 +4227,8 @@ gimp_prop_label_color_new (GObject *config,
const gchar *label;
GeglColor *value;
param_spec = check_param_spec_w (config, property_name,
GEGL_TYPE_PARAM_COLOR, G_STRFUNC);
param_spec = check_param_specs_w (config, property_name, GEGL_TYPE_PARAM_COLOR,
GIMP_TYPE_PARAM_COLOR, G_STRFUNC);
if (! param_spec)
return NULL;
@ -4716,6 +4696,44 @@ check_param_spec_w (GObject *object,
return param_spec;
}
static GParamSpec *
check_param_specs_w (GObject *object,
const gchar *property_name,
GType type1,
GType type2,
const gchar *strloc)
{
GParamSpec *param_spec;
param_spec = check_param_spec_quiet (object, property_name, type1, strloc);
if (param_spec)
{
param_spec = check_param_spec_w (object, property_name, type1, strloc);
if (! param_spec)
return NULL;
}
else
{
param_spec = check_param_spec_quiet (object, property_name, type2, strloc);
if (param_spec)
{
param_spec = check_param_spec_w (object, property_name, type2, strloc);
if (! param_spec)
return NULL;
}
}
if (! param_spec)
g_warning ("%s: property '%s' of %s must be of type %s or %s.",
strloc, property_name,
g_type_name (G_TYPE_FROM_INSTANCE (object)),
g_type_name (type1),
g_type_name (type2));
return param_spec;
}
static gboolean
get_numeric_values (GObject *object,
GParamSpec *param_spec,