core, widgets: Convert HSV/A to float

Per Pippin, the only color model that can
have double precision is RGB/A.
Therefore, we need to switch all others to
use float instead. This patch converts the
HSV and HSVA double babl formats.
This commit is contained in:
Alx Sa 2024-04-21 03:42:27 +00:00
parent 2dc6f41114
commit 32d64ab1c9
11 changed files with 117 additions and 102 deletions

View file

@ -305,19 +305,19 @@ context_foreground_hue_cmd_callback (GimpAction *action,
{ {
GimpContext *context; GimpContext *context;
GeglColor *color; GeglColor *color;
gdouble pixel[3]; gfloat pixel[3];
GimpActionSelectType select_type; GimpActionSelectType select_type;
return_if_no_context (context, data); return_if_no_context (context, data);
select_type = (GimpActionSelectType) g_variant_get_int32 (value); select_type = (GimpActionSelectType) g_variant_get_int32 (value);
color = gegl_color_duplicate (gimp_context_get_foreground (context)); color = gegl_color_duplicate (gimp_context_get_foreground (context));
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
pixel[0] = action_select_value (select_type, pixel[0] = (gfloat) action_select_value (select_type,
pixel[0], pixel[0],
0.0, 1.0, 1.0, 0.0, 1.0, 1.0,
1.0 / 360.0, 0.01, 0.1, 0.0, FALSE); 1.0 / 360.0, 0.01, 0.1, 0.0, FALSE);
gegl_color_set_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_set_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
gimp_context_set_foreground (context, color); gimp_context_set_foreground (context, color);
g_object_unref (color); g_object_unref (color);
} }
@ -329,19 +329,19 @@ context_foreground_saturation_cmd_callback (GimpAction *action,
{ {
GimpContext *context; GimpContext *context;
GeglColor *color; GeglColor *color;
gdouble pixel[3]; gfloat pixel[3];
GimpActionSelectType select_type; GimpActionSelectType select_type;
return_if_no_context (context, data); return_if_no_context (context, data);
select_type = (GimpActionSelectType) g_variant_get_int32 (value); select_type = (GimpActionSelectType) g_variant_get_int32 (value);
color = gegl_color_duplicate (gimp_context_get_foreground (context)); color = gegl_color_duplicate (gimp_context_get_foreground (context));
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
pixel[1] = action_select_value (select_type, pixel[1] = (gfloat) action_select_value (select_type,
pixel[1], pixel[1],
0.0, 1.0, 1.0, 0.0, 1.0, 1.0,
0.01, 0.01, 0.1, 0.0, FALSE); 0.01, 0.01, 0.1, 0.0, FALSE);
gegl_color_set_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_set_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
gimp_context_set_foreground (context, color); gimp_context_set_foreground (context, color);
g_object_unref (color); g_object_unref (color);
} }
@ -353,19 +353,19 @@ context_foreground_value_cmd_callback (GimpAction *action,
{ {
GimpContext *context; GimpContext *context;
GeglColor *color; GeglColor *color;
gdouble pixel[3]; gfloat pixel[3];
GimpActionSelectType select_type; GimpActionSelectType select_type;
return_if_no_context (context, data); return_if_no_context (context, data);
select_type = (GimpActionSelectType) g_variant_get_int32 (value); select_type = (GimpActionSelectType) g_variant_get_int32 (value);
color = gegl_color_duplicate (gimp_context_get_foreground (context)); color = gegl_color_duplicate (gimp_context_get_foreground (context));
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
pixel[2] = action_select_value (select_type, pixel[2] = (gfloat) action_select_value (select_type,
pixel[2], pixel[2],
0.0, 1.0, 1.0, 0.0, 1.0, 1.0,
0.01, 0.01, 0.1, 0.0, FALSE); 0.01, 0.01, 0.1, 0.0, FALSE);
gegl_color_set_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_set_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
gimp_context_set_foreground (context, color); gimp_context_set_foreground (context, color);
g_object_unref (color); g_object_unref (color);
} }
@ -377,19 +377,19 @@ context_background_hue_cmd_callback (GimpAction *action,
{ {
GimpContext *context; GimpContext *context;
GeglColor *color; GeglColor *color;
gdouble pixel[3]; gfloat pixel[3];
GimpActionSelectType select_type; GimpActionSelectType select_type;
return_if_no_context (context, data); return_if_no_context (context, data);
select_type = (GimpActionSelectType) g_variant_get_int32 (value); select_type = (GimpActionSelectType) g_variant_get_int32 (value);
color = gegl_color_duplicate (gimp_context_get_background (context)); color = gegl_color_duplicate (gimp_context_get_background (context));
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
pixel[0] = action_select_value (select_type, pixel[0] = (gfloat) action_select_value (select_type,
pixel[0], pixel[0],
0.0, 1.0, 1.0, 0.0, 1.0, 1.0,
1.0 / 360.0, 0.01, 0.1, 0.0, FALSE); 1.0 / 360.0, 0.01, 0.1, 0.0, FALSE);
gegl_color_set_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_set_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
gimp_context_set_background (context, color); gimp_context_set_background (context, color);
g_object_unref (color); g_object_unref (color);
} }
@ -401,19 +401,19 @@ context_background_saturation_cmd_callback (GimpAction *action,
{ {
GimpContext *context; GimpContext *context;
GeglColor *color; GeglColor *color;
gdouble pixel[3]; gfloat pixel[3];
GimpActionSelectType select_type; GimpActionSelectType select_type;
return_if_no_context (context, data); return_if_no_context (context, data);
select_type = (GimpActionSelectType) g_variant_get_int32 (value); select_type = (GimpActionSelectType) g_variant_get_int32 (value);
color = gegl_color_duplicate (gimp_context_get_background (context)); color = gegl_color_duplicate (gimp_context_get_background (context));
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
pixel[1] = action_select_value (select_type, pixel[1] = (gfloat) action_select_value (select_type,
pixel[1], pixel[1],
0.0, 1.0, 1.0, 0.0, 1.0, 1.0,
0.01, 0.01, 0.1, 0.0, FALSE); 0.01, 0.01, 0.1, 0.0, FALSE);
gegl_color_set_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_set_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
gimp_context_set_background (context, color); gimp_context_set_background (context, color);
g_object_unref (color); g_object_unref (color);
} }
@ -425,19 +425,19 @@ context_background_value_cmd_callback (GimpAction *action,
{ {
GimpContext *context; GimpContext *context;
GeglColor *color; GeglColor *color;
gdouble pixel[3]; gfloat pixel[3];
GimpActionSelectType select_type; GimpActionSelectType select_type;
return_if_no_context (context, data); return_if_no_context (context, data);
select_type = (GimpActionSelectType) g_variant_get_int32 (value); select_type = (GimpActionSelectType) g_variant_get_int32 (value);
color = gegl_color_duplicate (gimp_context_get_background (context)); color = gegl_color_duplicate (gimp_context_get_background (context));
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
pixel[2] = action_select_value (select_type, pixel[2] = (gfloat) action_select_value (select_type,
pixel[2], pixel[2],
0.0, 1.0, 1.0, 0.0, 1.0, 1.0,
0.01, 0.01, 0.1, 0.0, FALSE); 0.01, 0.01, 0.1, 0.0, FALSE);
gegl_color_set_pixel (color, babl_format_with_space ("HSV double", NULL), pixel); gegl_color_set_pixel (color, babl_format_with_space ("HSV float", NULL), pixel);
gimp_context_set_background (context, color); gimp_context_set_background (context, color);
g_object_unref (color); g_object_unref (color);
} }

View file

@ -596,11 +596,11 @@ gimp_gradient_get_color_at (GimpGradient *gradient,
} }
else else
{ {
gdouble left_hsv[3]; gfloat left_hsv[3];
gdouble right_hsv[3]; gfloat right_hsv[3];
gegl_color_get_pixel (left_color, babl_format ("HSV double"), left_hsv); gegl_color_get_pixel (left_color, babl_format ("HSV float"), left_hsv);
gegl_color_get_pixel (right_color, babl_format ("HSV double"), right_hsv); gegl_color_get_pixel (right_color, babl_format ("HSV float"), right_hsv);
left_hsv[1] = left_hsv[1] + (right_hsv[1] - left_hsv[1]) * factor; left_hsv[1] = left_hsv[1] + (right_hsv[1] - left_hsv[1]) * factor;
left_hsv[2] = left_hsv[2] + (right_hsv[2] - left_hsv[2]) * factor; left_hsv[2] = left_hsv[2] + (right_hsv[2] - left_hsv[2]) * factor;
@ -641,7 +641,7 @@ gimp_gradient_get_color_at (GimpGradient *gradient,
break; break;
} }
gegl_color_set_pixel (*color, babl_format ("HSV double"), left_hsv); gegl_color_set_pixel (*color, babl_format ("HSV float"), left_hsv);
} }
/* Calculate alpha */ /* Calculate alpha */

View file

@ -563,11 +563,11 @@ gimp_palette_load_aco (GimpContext *context,
} }
else if (color_space == 1) /* HSV */ else if (color_space == 1) /* HSV */
{ {
gdouble hsv[3] = { ((gdouble) w) / 65536.0, gfloat hsv[3] = { ((gfloat) w) / 65536.0f,
((gdouble) x) / 65536.0, ((gfloat) x) / 65536.0f,
((gdouble) y) / 65536.0}; ((gfloat) y) / 65536.0f};
gegl_color_set_pixel (color, babl_format ("HSV double"), hsv); gegl_color_set_pixel (color, babl_format ("HSV float"), hsv);
color_ok = TRUE; color_ok = TRUE;
} }
else if (color_space == 2) /* CMYK */ else if (color_space == 2) /* CMYK */

View file

@ -508,14 +508,14 @@ gimp_circle_background_hsv (gdouble angle,
gdouble distance, gdouble distance,
guchar *rgb) guchar *rgb)
{ {
gdouble hsv[3]; gfloat hsv[3];
GeglColor *color = gegl_color_new ("black"); GeglColor *color = gegl_color_new ("black");
hsv[0] = angle / (2.0 * G_PI); hsv[0] = angle / (2.0 * G_PI);
hsv[1] = distance; hsv[1] = distance;
hsv[2] = 1 - sqrt (distance) / 4; hsv[2] = 1 - sqrt (distance) / 4;
gegl_color_set_pixel (color, babl_format ("HSV double"), hsv); gegl_color_set_pixel (color, babl_format ("HSV float"), hsv);
gegl_color_get_pixel (color, babl_format ("R'G'B' u8"), rgb); gegl_color_get_pixel (color, babl_format ("R'G'B' u8"), rgb);
g_object_unref (color); g_object_unref (color);
} }

View file

@ -1310,7 +1310,7 @@ view_set_hint (GimpGradientEditor *editor,
GimpDataEditor *data_editor = GIMP_DATA_EDITOR (editor); GimpDataEditor *data_editor = GIMP_DATA_EDITOR (editor);
GeglColor *color = NULL; GeglColor *color = NULL;
gdouble rgb[4]; gdouble rgb[4];
gdouble hsv[3]; gfloat hsv[3];
gdouble xpos; gdouble xpos;
gchar *str1; gchar *str1;
gchar *str2; gchar *str2;
@ -1326,7 +1326,7 @@ view_set_hint (GimpGradientEditor *editor,
gimp_color_area_set_color (GIMP_COLOR_AREA (editor->current_color), color); gimp_color_area_set_color (GIMP_COLOR_AREA (editor->current_color), color);
gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgb); gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgb);
gegl_color_get_pixel (color, babl_format ("HSV double"), hsv); gegl_color_get_pixel (color, babl_format ("HSV float"), hsv);
str1 = g_strdup_printf (_("Position: %0.4f"), xpos); str1 = g_strdup_printf (_("Position: %0.4f"), xpos);
/* TODO: Current hints are displaying sRGB values. Ideally we'd want to update /* TODO: Current hints are displaying sRGB values. Ideally we'd want to update

View file

@ -1030,6 +1030,7 @@ gimp_scanner_parse_deprecated_color (GimpScanner *scanner,
case G_TOKEN_SYMBOL: case G_TOKEN_SYMBOL:
{ {
gdouble col[4] = { 0.0, 0.0, 0.0, 1.0 }; gdouble col[4] = { 0.0, 0.0, 0.0, 1.0 };
gdouble col_f[4] = { 0.0, 0.0, 0.0, 1.0 };
gint n_channels = 4; gint n_channels = 4;
gboolean is_hsv = FALSE; gboolean is_hsv = FALSE;
gint i; gint i;
@ -1056,11 +1057,13 @@ gimp_scanner_parse_deprecated_color (GimpScanner *scanner,
{ {
if (! gimp_scanner_parse_float (scanner, &col[i])) if (! gimp_scanner_parse_float (scanner, &col[i]))
goto finish; goto finish;
col_f[i] = (gfloat) col[i];
} }
*color = gegl_color_new (NULL); *color = gegl_color_new (NULL);
if (is_hsv) if (is_hsv)
gegl_color_set_pixel (*color, babl_format ("HSVA double"), col); gegl_color_set_pixel (*color, babl_format ("HSVA float"), col_f);
else else
gegl_color_set_pixel (*color, babl_format ("R'G'B'A double"), col); gegl_color_set_pixel (*color, babl_format ("R'G'B'A double"), col);

View file

@ -149,7 +149,7 @@ gimp_color_scale_class_init (GimpColorScaleClass *klass)
fish_lch_to_rgb = babl_fish (babl_format ("CIE LCH(ab) double"), fish_lch_to_rgb = babl_fish (babl_format ("CIE LCH(ab) double"),
babl_format ("R'G'B' double")); babl_format ("R'G'B' double"));
fish_hsv_to_rgb = babl_fish (babl_format ("HSV double"), fish_hsv_to_rgb = babl_fish (babl_format ("HSV float"),
babl_format ("R'G'B' double")); babl_format ("R'G'B' double"));
fish_rgb_to_cairo = babl_fish (babl_format ("R'G'B' u8"), fish_rgb_to_cairo = babl_fish (babl_format ("R'G'B' u8"),
babl_format ("cairo-RGB24")); babl_format ("cairo-RGB24"));
@ -519,7 +519,7 @@ gimp_color_scale_set_format (GimpColorScale *scale,
scale->priv->format = format; scale->priv->format = format;
fish_lch_to_rgb = babl_fish (babl_format ("CIE LCH(ab) double"), fish_lch_to_rgb = babl_fish (babl_format ("CIE LCH(ab) double"),
babl_format_with_space ("R'G'B' double", format)); babl_format_with_space ("R'G'B' double", format));
fish_hsv_to_rgb = babl_fish (babl_format_with_space ("HSV double", format), fish_hsv_to_rgb = babl_fish (babl_format_with_space ("HSV float", format),
babl_format_with_space ("R'G'B' double", format)); babl_format_with_space ("R'G'B' double", format));
scale->priv->needs_render = TRUE; scale->priv->needs_render = TRUE;
gtk_widget_queue_draw (GTK_WIDGET (scale)); gtk_widget_queue_draw (GTK_WIDGET (scale));
@ -657,13 +657,14 @@ gimp_color_scale_render (GimpColorScale *scale)
GimpColorScalePrivate *priv = GET_PRIVATE (scale); GimpColorScalePrivate *priv = GET_PRIVATE (scale);
GtkRange *range = GTK_RANGE (scale); GtkRange *range = GTK_RANGE (scale);
gdouble rgb[4]; gdouble rgb[4];
gdouble hsv[3]; gfloat hsv[3];
gdouble lch[3]; gdouble lch[3];
gint multiplier = 1; gint multiplier = 1;
guint x, y; guint x, y;
gdouble *channel_value = NULL; gdouble *channel_value = NULL;
gboolean from_hsv = FALSE; gfloat *channel_value_f = NULL;
gboolean from_lch = FALSE; gboolean from_hsv = FALSE;
gboolean from_lch = FALSE;
gboolean invert; gboolean invert;
guchar *buf; guchar *buf;
guchar *d; guchar *d;
@ -678,14 +679,14 @@ gimp_color_scale_render (GimpColorScale *scale)
} }
gegl_color_get_pixel (priv->color, babl_format_with_space ("R'G'B'A double", priv->format), rgb); gegl_color_get_pixel (priv->color, babl_format_with_space ("R'G'B'A double", priv->format), rgb);
gegl_color_get_pixel (priv->color, babl_format_with_space ("HSV double", priv->format), hsv); gegl_color_get_pixel (priv->color, babl_format_with_space ("HSV float", priv->format), hsv);
gegl_color_get_pixel (priv->color, babl_format ("CIE LCH(ab) double"), lch); gegl_color_get_pixel (priv->color, babl_format ("CIE LCH(ab) double"), lch);
switch (priv->channel) switch (priv->channel)
{ {
case GIMP_COLOR_SELECTOR_HUE: channel_value = &hsv[0]; break; case GIMP_COLOR_SELECTOR_HUE: channel_value_f = &hsv[0]; break;
case GIMP_COLOR_SELECTOR_SATURATION: channel_value = &hsv[1]; break; case GIMP_COLOR_SELECTOR_SATURATION: channel_value_f = &hsv[1]; break;
case GIMP_COLOR_SELECTOR_VALUE: channel_value = &hsv[2]; break; case GIMP_COLOR_SELECTOR_VALUE: channel_value_f = &hsv[2]; break;
case GIMP_COLOR_SELECTOR_RED: channel_value = &rgb[0]; break; case GIMP_COLOR_SELECTOR_RED: channel_value = &rgb[0]; break;
case GIMP_COLOR_SELECTOR_GREEN: channel_value = &rgb[1]; break; case GIMP_COLOR_SELECTOR_GREEN: channel_value = &rgb[1]; break;
@ -734,7 +735,10 @@ gimp_color_scale_render (GimpColorScale *scale)
if (invert) if (invert)
value = multiplier - value; value = multiplier - value;
*channel_value = value; if (channel_value)
*channel_value = value;
else if (channel_value_f)
*channel_value_f = (gfloat) value;
if (from_hsv) if (from_hsv)
babl_process (fish_hsv_to_rgb, &hsv, &rgb, 1); babl_process (fish_hsv_to_rgb, &hsv, &rgb, 1);
@ -778,7 +782,10 @@ gimp_color_scale_render (GimpColorScale *scale)
if (invert) if (invert)
value = multiplier - value; value = multiplier - value;
*channel_value = value; if (channel_value)
*channel_value = value;
else if (channel_value_f)
*channel_value_f = (gfloat) value;
if (from_hsv) if (from_hsv)
babl_process (fish_hsv_to_rgb, &hsv, &rgb, 1); babl_process (fish_hsv_to_rgb, &hsv, &rgb, 1);

View file

@ -803,13 +803,14 @@ gimp_color_scales_update_scales (GimpColorScales *scales,
GimpColorSelector *selector = GIMP_COLOR_SELECTOR (scales); GimpColorSelector *selector = GIMP_COLOR_SELECTOR (scales);
GeglColor *color = gimp_color_selector_get_color (selector); GeglColor *color = gimp_color_selector_get_color (selector);
gdouble pixel[4]; gdouble pixel[4];
gfloat pixel_f[4];
gdouble values[G_N_ELEMENTS (scale_defs)]; gdouble values[G_N_ELEMENTS (scale_defs)];
gint i; gint i;
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", scales->format), pixel); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", scales->format), pixel_f);
values[GIMP_COLOR_SELECTOR_HUE] = pixel[0] * 360.0; values[GIMP_COLOR_SELECTOR_HUE] = pixel_f[0] * 360.0;
values[GIMP_COLOR_SELECTOR_SATURATION] = pixel[1] * 100.0; values[GIMP_COLOR_SELECTOR_SATURATION] = pixel_f[1] * 100.0;
values[GIMP_COLOR_SELECTOR_VALUE] = pixel[2] * 100.0; values[GIMP_COLOR_SELECTOR_VALUE] = pixel_f[2] * 100.0;
gegl_color_get_pixel (color, babl_format_with_space ("R'G'B'A double", scales->format), pixel); gegl_color_get_pixel (color, babl_format_with_space ("R'G'B'A double", scales->format), pixel);
values[GIMP_COLOR_SELECTOR_RED] = pixel[0] * 100.0; values[GIMP_COLOR_SELECTOR_RED] = pixel[0] * 100.0;
@ -887,7 +888,7 @@ gimp_color_scales_scale_changed (GtkWidget *scale,
GeglColor *color = gimp_color_selector_get_color (selector); GeglColor *color = gimp_color_selector_get_color (selector);
gdouble value = gimp_label_spin_get_value (GIMP_LABEL_SPIN (scale)); gdouble value = gimp_label_spin_get_value (GIMP_LABEL_SPIN (scale));
gdouble lch[4]; gdouble lch[4];
gdouble hsv[4]; gfloat hsv[4];
gdouble rgb[4]; gdouble rgb[4];
gint i; gint i;
@ -896,21 +897,21 @@ gimp_color_scales_scale_changed (GtkWidget *scale,
break; break;
gegl_color_get_pixel (color, babl_format_with_space ("R'G'B'A double", scales->format), rgb); gegl_color_get_pixel (color, babl_format_with_space ("R'G'B'A double", scales->format), rgb);
gegl_color_get_pixel (color, babl_format_with_space ("HSVA double", scales->format), hsv); gegl_color_get_pixel (color, babl_format_with_space ("HSVA float", scales->format), hsv);
gegl_color_get_pixel (color, babl_format ("CIE LCH(ab) alpha double"), lch); gegl_color_get_pixel (color, babl_format ("CIE LCH(ab) alpha double"), lch);
switch (i) switch (i)
{ {
case GIMP_COLOR_SELECTOR_HUE: case GIMP_COLOR_SELECTOR_HUE:
hsv[0] = value / 360.0; hsv[0] = value / 360.0f;
break; break;
case GIMP_COLOR_SELECTOR_SATURATION: case GIMP_COLOR_SELECTOR_SATURATION:
hsv[1] = value / 100.0; hsv[1] = value / 100.0f;
break; break;
case GIMP_COLOR_SELECTOR_VALUE: case GIMP_COLOR_SELECTOR_VALUE:
hsv[2] = value / 100.0; hsv[2] = value / 100.0f;
break; break;
case GIMP_COLOR_SELECTOR_RED: case GIMP_COLOR_SELECTOR_RED:
@ -962,7 +963,7 @@ gimp_color_scales_scale_changed (GtkWidget *scale,
if ((i >= GIMP_COLOR_SELECTOR_HUE) && if ((i >= GIMP_COLOR_SELECTOR_HUE) &&
(i <= GIMP_COLOR_SELECTOR_VALUE)) (i <= GIMP_COLOR_SELECTOR_VALUE))
{ {
gegl_color_set_pixel (color, babl_format_with_space ("HSVA double", scales->format), hsv); gegl_color_set_pixel (color, babl_format_with_space ("HSVA float", scales->format), hsv);
} }
else if ((i >= GIMP_COLOR_SELECTOR_LCH_LIGHTNESS) && else if ((i >= GIMP_COLOR_SELECTOR_LCH_LIGHTNESS) &&
(i <= GIMP_COLOR_SELECTOR_LCH_HUE)) (i <= GIMP_COLOR_SELECTOR_LCH_HUE))

View file

@ -894,11 +894,12 @@ gimp_color_select_update_values (GimpColorSelect *select)
GimpColorSelector *selector = GIMP_COLOR_SELECTOR (select); GimpColorSelector *selector = GIMP_COLOR_SELECTOR (select);
GeglColor *color = gimp_color_selector_get_color (selector); GeglColor *color = gimp_color_selector_get_color (selector);
gdouble values[3]; gdouble values[3];
gfloat values_float[3];
const Babl *rgb_format; const Babl *rgb_format;
const Babl *hsv_format; const Babl *hsv_format;
rgb_format = babl_format_with_space ("R'G'B' double", select->format); rgb_format = babl_format_with_space ("R'G'B' double", select->format);
hsv_format = babl_format_with_space ("HSV double", select->format); hsv_format = babl_format_with_space ("HSV float", select->format);
switch (select->z_color_fill) switch (select->z_color_fill)
{ {
@ -919,19 +920,22 @@ gimp_color_select_update_values (GimpColorSelect *select)
break; break;
case COLOR_SELECT_HUE: case COLOR_SELECT_HUE:
values[0] = select->pos[2]; values_float[0] = select->pos[2];
values[1] = select->pos[0]; values_float[1] = select->pos[0];
values[2] = select->pos[1]; values_float[2] = select->pos[1];
gegl_color_set_pixel (color, hsv_format, values); gegl_color_set_pixel (color, hsv_format, values_float);
break; break;
case COLOR_SELECT_SATURATION: case COLOR_SELECT_SATURATION:
values[0] = select->pos[0]; values_float[0] = select->pos[0];
values[1] = select->pos[2]; values_float[1] = select->pos[2];
values[2] = select->pos[1]; values_float[2] = select->pos[1];
gegl_color_set_pixel (color, hsv_format, values); gegl_color_set_pixel (color, hsv_format, values_float);
break; break;
case COLOR_SELECT_VALUE: case COLOR_SELECT_VALUE:
gegl_color_set_pixel (color, hsv_format, select->pos); values_float[0] = select->pos[0];
values_float[1] = select->pos[1];
values_float[2] = select->pos[2];
gegl_color_set_pixel (color, hsv_format, values_float);
break; break;
case COLOR_SELECT_LCH_LIGHTNESS: case COLOR_SELECT_LCH_LIGHTNESS:
@ -969,10 +973,10 @@ gimp_color_select_update_pos (GimpColorSelect *select)
GeglColor *color = gimp_color_selector_get_color (selector); GeglColor *color = gimp_color_selector_get_color (selector);
gdouble rgb[3]; gdouble rgb[3];
gdouble lch[3]; gdouble lch[3];
gdouble hsv[3]; gfloat hsv[3];
gegl_color_get_pixel (color, babl_format_with_space ("R'G'B' double", select->format), rgb); gegl_color_get_pixel (color, babl_format_with_space ("R'G'B' double", select->format), rgb);
gegl_color_get_pixel (color, babl_format_with_space ("HSV double", select->format), hsv); gegl_color_get_pixel (color, babl_format_with_space ("HSV float", select->format), hsv);
gegl_color_get_pixel (color, babl_format ("CIE LCH(ab) double"), lch); gegl_color_get_pixel (color, babl_format ("CIE LCH(ab) double"), lch);
g_object_unref (color); g_object_unref (color);

View file

@ -415,10 +415,10 @@ read_image_palette (GimpImage *image,
for (index = 0; index < ncolors; ++index) for (index = 0; index < ncolors; ++index)
{ {
GeglColor *c = colors[index]; GeglColor *c = colors[index];
gdouble hsv[3]; gfloat hsv[3];
gchar *text = g_strdup_printf ("%d", index); gchar *text = g_strdup_printf ("%d", index);
gegl_color_get_pixel (c, babl_format ("HSV double"), hsv); gegl_color_get_pixel (c, babl_format ("HSV float"), hsv);
reverse_order[index] = ncolors - index - 1; reverse_order[index] = ncolors - index - 1;

View file

@ -725,14 +725,14 @@ load_resource_1007 (const PSDimageres *res_a,
case PSD_CS_HSB: case PSD_CS_HSB:
{ {
gdouble hsv[3] = gfloat hsv[3] =
{ {
ps_color.hsv.hue / 65535.0, ps_color.hsv.hue / 65535.0f,
ps_color.hsv.saturation / 65535.0, ps_color.hsv.saturation / 65535.0f,
ps_color.hsv.value / 65535.0 ps_color.hsv.value / 65535.0f
}; };
gegl_color_set_pixel (color, babl_format ("HSV double"), hsv); gegl_color_set_pixel (color, babl_format ("HSV float"), hsv);
} }
break; break;
@ -1461,14 +1461,14 @@ load_resource_1077 (const PSDimageres *res_a,
case PSD_CS_HSB: case PSD_CS_HSB:
{ {
gdouble hsv[3] = gfloat hsv[3] =
{ {
ps_color.hsv.hue / 65535.0, ps_color.hsv.hue / 65535.0f,
ps_color.hsv.saturation / 65535.0, ps_color.hsv.saturation / 65535.0f,
ps_color.hsv.value / 65535.0 ps_color.hsv.value / 65535.0f
}; };
gegl_color_set_pixel (color, babl_format ("HSV double"), hsv); gegl_color_set_pixel (color, babl_format ("HSV float"), hsv);
} }
break; break;