[gimp] app: show the real pixel values in GimpColorFrame's "Pixel" mode
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: show the real pixel values in GimpColorFrame's "Pixel" mode
- Date: Sun, 9 Jun 2013 22:31:54 +0000 (UTC)
commit a1e75913510b03c1be5dc5dad44f7d87b1530319
Author: Michael Natterer <mitch gimp org>
Date: Mon Jun 10 00:28:48 2013 +0200
app: show the real pixel values in GimpColorFrame's "Pixel" mode
Rewrite gimp_color_frame_update() to use gimp_babl_print_pixel()
app/widgets/gimpcolorframe.c | 182 +++++++++++++++++++++++++----------------
1 files changed, 111 insertions(+), 71 deletions(-)
---
diff --git a/app/widgets/gimpcolorframe.c b/app/widgets/gimpcolorframe.c
index a435cf7..b7582a8 100644
--- a/app/widgets/gimpcolorframe.c
+++ b/app/widgets/gimpcolorframe.c
@@ -486,19 +486,15 @@ gimp_color_frame_menu_callback (GtkWidget *widget,
static void
gimp_color_frame_update (GimpColorFrame *frame)
{
- const gchar *names[GIMP_COLOR_FRAME_ROWS] = { NULL, };
- gchar *values[GIMP_COLOR_FRAME_ROWS] = { NULL, };
- gboolean has_alpha;
- gint alpha_row = 3;
- guchar r, g, b, a;
- gint i;
+ const gchar *names[GIMP_COLOR_FRAME_ROWS] = { NULL, };
+ gchar **values = NULL;
+ gboolean has_alpha;
+ gint i;
has_alpha = babl_format_has_alpha (frame->sample_format);
if (frame->sample_valid)
{
- gimp_rgba_get_uchar (&frame->color, &r, &g, &b, &a);
-
gimp_color_area_set_color (GIMP_COLOR_AREA (frame->color_area),
&frame->color);
}
@@ -506,44 +502,82 @@ gimp_color_frame_update (GimpColorFrame *frame)
switch (frame->frame_mode)
{
case GIMP_COLOR_FRAME_MODE_PIXEL:
- if (gimp_babl_format_get_base_type (frame->sample_format) == GIMP_GRAY)
- {
- names[0] = _("Value:");
-
- if (frame->sample_valid)
- values[0] = g_strdup_printf ("%d", r);
-
- alpha_row = 1;
- }
- else
- {
- names[0] = _("Red:");
- names[1] = _("Green:");
- names[2] = _("Blue:");
-
- if (frame->sample_valid)
- {
- values[0] = g_strdup_printf ("%d", r);
- values[1] = g_strdup_printf ("%d", g);
- values[2] = g_strdup_printf ("%d", b);
- }
-
- alpha_row = 3;
-
- if (babl_format_is_palette (frame->sample_format))
- {
- names[4] = _("Index:");
-
- if (frame->sample_valid)
- {
- /* color_index will be -1 for an averaged sample */
- if (frame->color_index < 0)
- names[4] = NULL;
- else
- values[4] = g_strdup_printf ("%d", frame->color_index);
- }
- }
- }
+ {
+ GimpImageBaseType base_type;
+
+ base_type = gimp_babl_format_get_base_type (frame->sample_format);
+
+ if (frame->sample_valid)
+ {
+ const Babl *print_format = NULL;
+ gpointer pixel = g_alloca (5 * 64);
+
+ switch (gimp_babl_format_get_precision (frame->sample_format))
+ {
+ case GIMP_PRECISION_U8:
+ if (babl_format_is_palette (frame->sample_format))
+ {
+ print_format = gimp_babl_format (GIMP_RGB,
+ GIMP_PRECISION_U8,
+ has_alpha);
+ break;
+ }
+
+ case GIMP_PRECISION_U16:
+ case GIMP_PRECISION_U32:
+ print_format = frame->sample_format;
+ break;
+
+ case GIMP_PRECISION_HALF:
+ case GIMP_PRECISION_FLOAT:
+ print_format = gimp_babl_format (base_type,
+ GIMP_PRECISION_FLOAT,
+ has_alpha);
+ break;
+ }
+
+ gimp_rgba_get_pixel (&frame->color, print_format, pixel);
+
+ values = gimp_babl_print_pixel (print_format, pixel);
+ }
+
+ if (base_type == GIMP_GRAY)
+ {
+ names[0] = _("Value:");
+
+ if (has_alpha)
+ names[1] = _("Alpha:");
+ }
+ else
+ {
+ names[0] = _("Red:");
+ names[1] = _("Green:");
+ names[2] = _("Blue:");
+
+ if (has_alpha)
+ names[3] = _("Alpha:");
+
+ if (babl_format_is_palette (frame->sample_format))
+ {
+ names[4] = _("Index:");
+
+ if (frame->sample_valid)
+ {
+ gchar **v = g_new0 (gchar *, 6);
+ gchar **tmp = values;
+
+ memcpy (v, values, 4 * sizeof (gchar *));
+ values = v;
+
+ g_free (tmp);
+
+ /* color_index will be -1 for an averaged sample */
+ if (frame->color_index >= 0)
+ values[4] = g_strdup_printf ("%d", frame->color_index);
+ }
+ }
+ }
+ }
break;
case GIMP_COLOR_FRAME_MODE_RGB:
@@ -551,19 +585,29 @@ gimp_color_frame_update (GimpColorFrame *frame)
names[1] = _("Green:");
names[2] = _("Blue:");
+ if (has_alpha)
+ names[3] = _("Alpha:");
+
if (frame->sample_valid)
{
+ values = g_new0 (gchar *, 6);
+
values[0] = g_strdup_printf ("%d %%", ROUND (frame->color.r * 100.0));
values[1] = g_strdup_printf ("%d %%", ROUND (frame->color.g * 100.0));
values[2] = g_strdup_printf ("%d %%", ROUND (frame->color.b * 100.0));
+ values[3] = g_strdup_printf ("%d %%", ROUND (frame->color.a * 100.0));
}
- alpha_row = 3;
-
- names[4] = _("Hex:");
+ names[4] = _("Hex:");
if (frame->sample_valid)
- values[4] = g_strdup_printf ("%.2x%.2x%.2x", r, g, b);
+ {
+ guchar r, g, b;
+
+ gimp_rgb_get_uchar (&frame->color, &r, &g, &b);
+
+ values[4] = g_strdup_printf ("%.2x%.2x%.2x", r, g, b);
+ }
break;
case GIMP_COLOR_FRAME_MODE_HSV:
@@ -571,18 +615,23 @@ gimp_color_frame_update (GimpColorFrame *frame)
names[1] = _("Sat.:");
names[2] = _("Value:");
+ if (has_alpha)
+ names[3] = _("Alpha:");
+
if (frame->sample_valid)
{
GimpHSV hsv;
gimp_rgb_to_hsv (&frame->color, &hsv);
+ hsv.a = frame->color.a;
+
+ values = g_new0 (gchar *, 5);
values[0] = g_strdup_printf ("%d \302\260", ROUND (hsv.h * 360.0));
values[1] = g_strdup_printf ("%d %%", ROUND (hsv.s * 100.0));
values[2] = g_strdup_printf ("%d %%", ROUND (hsv.v * 100.0));
+ values[3] = g_strdup_printf ("%d %%", ROUND (hsv.a * 100.0));
}
-
- alpha_row = 3;
break;
case GIMP_COLOR_FRAME_MODE_CMYK:
@@ -591,43 +640,34 @@ gimp_color_frame_update (GimpColorFrame *frame)
names[2] = _("Yellow:");
names[3] = _("Black:");
+ if (has_alpha)
+ names[4] = _("Alpha:");
+
if (frame->sample_valid)
{
GimpCMYK cmyk;
gimp_rgb_to_cmyk (&frame->color, 1.0, &cmyk);
+ cmyk.a = frame->color.a;
+
+ values = g_new0 (gchar *, 6);
values[0] = g_strdup_printf ("%d %%", ROUND (cmyk.c * 100.0));
values[1] = g_strdup_printf ("%d %%", ROUND (cmyk.m * 100.0));
values[2] = g_strdup_printf ("%d %%", ROUND (cmyk.y * 100.0));
values[3] = g_strdup_printf ("%d %%", ROUND (cmyk.k * 100.0));
+ values[4] = g_strdup_printf ("%d %%", ROUND (cmyk.a * 100.0));
}
-
- alpha_row = 4;
break;
}
- if (has_alpha)
- {
- names[alpha_row] = _("Alpha:");
-
- if (frame->sample_valid)
- {
- if (frame->frame_mode == GIMP_COLOR_FRAME_MODE_PIXEL)
- values[alpha_row] = g_strdup_printf ("%d", a);
- else
- values[alpha_row] = g_strdup_printf ("%d %%",
- (gint) (frame->color.a * 100.0));
- }
- }
-
for (i = 0; i < GIMP_COLOR_FRAME_ROWS; i++)
{
if (names[i])
{
gtk_label_set_text (GTK_LABEL (frame->name_labels[i]), names[i]);
- if (frame->sample_valid)
+ if (frame->sample_valid && values[i])
gtk_label_set_text (GTK_LABEL (frame->value_labels[i]), values[i]);
else
gtk_label_set_text (GTK_LABEL (frame->value_labels[i]), _("n/a"));
@@ -637,7 +677,7 @@ gimp_color_frame_update (GimpColorFrame *frame)
gtk_label_set_text (GTK_LABEL (frame->name_labels[i]), " ");
gtk_label_set_text (GTK_LABEL (frame->value_labels[i]), " ");
}
-
- g_free (values[i]);
}
+
+ g_strfreev (values);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]