mirror of https://github.com/GNOME/gimp.git
app: clean up most "non-linear" vs. "perceptual" confusion
There should never be an image using GIMP_TRC_PERCEPTUAL, but things should work if one is encountered anyway. In the Image -> Precision menu and the Convert Precision dialog, have menu items / radio buttons for both non-linear and perceptual, but hide the perceptual choice unless the image is in perceptual TRC mode. This should eliminate the possibility to create perceptual TRC images from the GUI.
This commit is contained in:
parent
3cad4aa4c2
commit
eec1df23a5
|
@ -246,17 +246,23 @@ static const GimpRadioActionEntry image_convert_precision_actions[] =
|
||||||
|
|
||||||
static const GimpRadioActionEntry image_convert_trc_actions[] =
|
static const GimpRadioActionEntry image_convert_trc_actions[] =
|
||||||
{
|
{
|
||||||
{ "image-convert-gamma", NULL,
|
|
||||||
NC_("image-convert-action", "Perceptual gamma (sRGB)"), NULL,
|
|
||||||
NC_("image-convert-action",
|
|
||||||
"Convert the image to perceptual (sRGB) gamma"),
|
|
||||||
GIMP_TRC_NON_LINEAR, GIMP_HELP_IMAGE_CONVERT_GAMMA },
|
|
||||||
|
|
||||||
{ "image-convert-linear", NULL,
|
{ "image-convert-linear", NULL,
|
||||||
NC_("image-convert-action", "Linear light"), NULL,
|
NC_("image-convert-action", "Linear light"), NULL,
|
||||||
NC_("image-convert-action",
|
NC_("image-convert-action",
|
||||||
"Convert the image to linear light"),
|
"Convert the image to linear light"),
|
||||||
GIMP_TRC_LINEAR, GIMP_HELP_IMAGE_CONVERT_GAMMA }
|
GIMP_TRC_LINEAR, GIMP_HELP_IMAGE_CONVERT_GAMMA },
|
||||||
|
|
||||||
|
{ "image-convert-non-linear", NULL,
|
||||||
|
NC_("image-convert-action", "Non-Linear"), NULL,
|
||||||
|
NC_("image-convert-action",
|
||||||
|
"Convert the image to non-linear gamma from the color profile"),
|
||||||
|
GIMP_TRC_NON_LINEAR, GIMP_HELP_IMAGE_CONVERT_GAMMA },
|
||||||
|
|
||||||
|
{ "image-convert-perceptual", NULL,
|
||||||
|
NC_("image-convert-action", "Perceptual (sRGB)"), NULL,
|
||||||
|
NC_("image-convert-action",
|
||||||
|
"Convert the image to perceptual (sRGB) gamma"),
|
||||||
|
GIMP_TRC_PERCEPTUAL, GIMP_HELP_IMAGE_CONVERT_GAMMA }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const GimpEnumActionEntry image_flip_actions[] =
|
static const GimpEnumActionEntry image_flip_actions[] =
|
||||||
|
@ -361,6 +367,15 @@ image_actions_update (GimpActionGroup *group,
|
||||||
gboolean profile_hidden = FALSE;
|
gboolean profile_hidden = FALSE;
|
||||||
gboolean profile = FALSE;
|
gboolean profile = FALSE;
|
||||||
|
|
||||||
|
#define SET_LABEL(action,label) \
|
||||||
|
gimp_action_group_set_action_label (group, action, (label))
|
||||||
|
#define SET_SENSITIVE(action,condition) \
|
||||||
|
gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
|
||||||
|
#define SET_ACTIVE(action,condition) \
|
||||||
|
gimp_action_group_set_action_active (group, action, (condition) != 0)
|
||||||
|
#define SET_VISIBLE(action,condition) \
|
||||||
|
gimp_action_group_set_action_visible (group, action, (condition) != 0)
|
||||||
|
|
||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
GimpContainer *layers;
|
GimpContainer *layers;
|
||||||
|
@ -368,10 +383,13 @@ image_actions_update (GimpActionGroup *group,
|
||||||
GimpImageBaseType base_type;
|
GimpImageBaseType base_type;
|
||||||
GimpPrecision precision;
|
GimpPrecision precision;
|
||||||
GimpComponentType component_type;
|
GimpComponentType component_type;
|
||||||
|
GimpTRCType trc;
|
||||||
|
|
||||||
base_type = gimp_image_get_base_type (image);
|
base_type = gimp_image_get_base_type (image);
|
||||||
precision = gimp_image_get_precision (image);
|
precision = gimp_image_get_precision (image);
|
||||||
component_type = gimp_image_get_component_type (image);
|
component_type = gimp_image_get_component_type (image);
|
||||||
|
trc = gimp_babl_format_get_trc
|
||||||
|
(gimp_image_get_layer_format (image, FALSE));
|
||||||
|
|
||||||
switch (base_type)
|
switch (base_type)
|
||||||
{
|
{
|
||||||
|
@ -380,7 +398,7 @@ image_actions_update (GimpActionGroup *group,
|
||||||
case GIMP_INDEXED: action = "image-convert-indexed"; break;
|
case GIMP_INDEXED: action = "image-convert-indexed"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
gimp_action_group_set_action_active (group, action, TRUE);
|
SET_ACTIVE (action, TRUE);
|
||||||
|
|
||||||
switch (component_type)
|
switch (component_type)
|
||||||
{
|
{
|
||||||
|
@ -392,21 +410,28 @@ image_actions_update (GimpActionGroup *group,
|
||||||
case GIMP_COMPONENT_TYPE_DOUBLE: action = "image-convert-double"; break;
|
case GIMP_COMPONENT_TYPE_DOUBLE: action = "image-convert-double"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
gimp_action_group_set_action_active (group, action, TRUE);
|
SET_ACTIVE (action, TRUE);
|
||||||
|
|
||||||
if (gimp_babl_format_get_trc (gimp_image_get_layer_format (image,
|
switch (trc)
|
||||||
FALSE)) ==
|
|
||||||
GIMP_TRC_LINEAR)
|
|
||||||
{
|
{
|
||||||
gimp_action_group_set_action_active (group, "image-convert-linear",
|
case GIMP_TRC_LINEAR:
|
||||||
TRUE);
|
action = "image-convert-linear";
|
||||||
}
|
SET_VISIBLE ("image-convert-perceptual", FALSE);
|
||||||
else
|
break;
|
||||||
{
|
|
||||||
gimp_action_group_set_action_active (group, "image-convert-gamma",
|
case GIMP_TRC_NON_LINEAR:
|
||||||
TRUE);
|
action = "image-convert-non-linear";
|
||||||
|
SET_VISIBLE ("image-convert-perceptual", FALSE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GIMP_TRC_PERCEPTUAL:
|
||||||
|
action = "image-convert-perceptual";
|
||||||
|
SET_VISIBLE ("image-convert-perceptual", TRUE);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SET_ACTIVE (action, TRUE);
|
||||||
|
|
||||||
is_indexed = (base_type == GIMP_INDEXED);
|
is_indexed = (base_type == GIMP_INDEXED);
|
||||||
is_u8_gamma = (precision == GIMP_PRECISION_U8_NON_LINEAR);
|
is_u8_gamma = (precision == GIMP_PRECISION_U8_NON_LINEAR);
|
||||||
is_double = (component_type == GIMP_COMPONENT_TYPE_DOUBLE);
|
is_double = (component_type == GIMP_COMPONENT_TYPE_DOUBLE);
|
||||||
|
@ -421,15 +446,10 @@ image_actions_update (GimpActionGroup *group,
|
||||||
profile_srgb = gimp_image_get_use_srgb_profile (image, &profile_hidden);
|
profile_srgb = gimp_image_get_use_srgb_profile (image, &profile_hidden);
|
||||||
profile = (gimp_image_get_color_profile (image) != NULL);
|
profile = (gimp_image_get_color_profile (image) != NULL);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
#define SET_LABEL(action,label) \
|
{
|
||||||
gimp_action_group_set_action_label (group, action, (label))
|
SET_VISIBLE ("image-convert-perceptual", FALSE);
|
||||||
#define SET_SENSITIVE(action,condition) \
|
}
|
||||||
gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
|
|
||||||
#define SET_ACTIVE(action,condition) \
|
|
||||||
gimp_action_group_set_action_active (group, action, (condition) != 0)
|
|
||||||
#define SET_VISIBLE(action,condition) \
|
|
||||||
gimp_action_group_set_action_visible (group, action, (condition) != 0)
|
|
||||||
|
|
||||||
SET_SENSITIVE ("image-duplicate", image);
|
SET_SENSITIVE ("image-duplicate", image);
|
||||||
|
|
||||||
|
@ -460,8 +480,9 @@ image_actions_update (GimpActionGroup *group,
|
||||||
SET_SENSITIVE ("image-convert-double", image && !is_indexed);
|
SET_SENSITIVE ("image-convert-double", image && !is_indexed);
|
||||||
SET_VISIBLE ("image-convert-double", is_double);
|
SET_VISIBLE ("image-convert-double", is_double);
|
||||||
|
|
||||||
SET_SENSITIVE ("image-convert-gamma", image);
|
SET_SENSITIVE ("image-convert-linear", image && !is_indexed);
|
||||||
SET_SENSITIVE ("image-convert-linear", image && !is_indexed);
|
SET_SENSITIVE ("image-convert-non-linear", image);
|
||||||
|
SET_SENSITIVE ("image-convert-perceptual", image && !is_indexed);
|
||||||
|
|
||||||
SET_SENSITIVE ("image-color-profile-use-srgb", image && (profile || profile_hidden));
|
SET_SENSITIVE ("image-color-profile-use-srgb", image && (profile || profile_hidden));
|
||||||
SET_ACTIVE ("image-color-profile-use-srgb", image && profile_srgb);
|
SET_ACTIVE ("image-color-profile-use-srgb", image && profile_srgb);
|
||||||
|
|
|
@ -81,6 +81,7 @@ convert_precision_dialog_new (GimpImage *image,
|
||||||
GtkWidget *main_vbox;
|
GtkWidget *main_vbox;
|
||||||
GtkWidget *vbox;
|
GtkWidget *vbox;
|
||||||
GtkWidget *frame;
|
GtkWidget *frame;
|
||||||
|
GtkWidget *perceptual_radio;
|
||||||
const gchar *enum_desc;
|
const gchar *enum_desc;
|
||||||
gchar *blurb;
|
gchar *blurb;
|
||||||
const Babl *old_format;
|
const Babl *old_format;
|
||||||
|
@ -209,9 +210,13 @@ convert_precision_dialog_new (GimpImage *image,
|
||||||
GIMP_TRC_NON_LINEAR, NULL,
|
GIMP_TRC_NON_LINEAR, NULL,
|
||||||
|
|
||||||
_("Perceptual (sRGB)"),
|
_("Perceptual (sRGB)"),
|
||||||
GIMP_TRC_PERCEPTUAL, NULL,
|
GIMP_TRC_PERCEPTUAL, &perceptual_radio,
|
||||||
|
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
if (private->trc != GIMP_TRC_PERCEPTUAL)
|
||||||
|
gtk_widget_hide (perceptual_radio);
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (frame), vbox);
|
gtk_container_add (GTK_CONTAINER (frame), vbox);
|
||||||
gtk_widget_show (vbox);
|
gtk_widget_show (vbox);
|
||||||
|
|
||||||
|
|
|
@ -377,8 +377,9 @@
|
||||||
<menuitem action="image-convert-float" />
|
<menuitem action="image-convert-float" />
|
||||||
<menuitem action="image-convert-double" />
|
<menuitem action="image-convert-double" />
|
||||||
<separator />
|
<separator />
|
||||||
<menuitem action="image-convert-gamma" />
|
|
||||||
<menuitem action="image-convert-linear" />
|
<menuitem action="image-convert-linear" />
|
||||||
|
<menuitem action="image-convert-non-linear" />
|
||||||
|
<menuitem action="image-convert-perceptual" />
|
||||||
<separator />
|
<separator />
|
||||||
</menu>
|
</menu>
|
||||||
<menu action="image-color-management-menu" name="Color Management">
|
<menu action="image-color-management-menu" name="Color Management">
|
||||||
|
|
Loading…
Reference in New Issue