From e4a16ae679fa5eece0e28129a9fa3dd3f06317e2 Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Tue, 16 Jan 2001 19:42:37 +0000 Subject: [PATCH] fixed RGB to HSV routine 2001-01-16 Sven Neumann * libgimp/gimpcolorspace.c: fixed RGB to HSV routine * app/color_notebook.c: tweaked dialog layout a little, disabled toggle_buttons if the colorselector does not implement the set_channel method. * modules/colorsel_gtk.c * modules/colorsel_triangle.c * modules/colorsel_water.c: removed empty set_channel methods --- ChangeLog | 12 +++++ app/color_notebook.c | 85 ++++++++++++++++++++--------------- app/dialogs/color-dialog.c | 85 ++++++++++++++++++++--------------- app/gui/color-notebook.c | 85 ++++++++++++++++++++--------------- app/widgets/gimpcolordialog.c | 85 ++++++++++++++++++++--------------- libgimp/gimpcolorspace.c | 8 +--- modules/colorsel_gtk.c | 10 +---- modules/colorsel_triangle.c | 9 +--- modules/colorsel_water.c | 10 +---- 9 files changed, 217 insertions(+), 172 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5673f14bd4..6dc5f1689f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2001-01-16 Sven Neumann + + * libgimp/gimpcolorspace.c: fixed RGB to HSV routine + + * app/color_notebook.c: tweaked dialog layout a little, disabled + toggle_buttons if the colorselector does not implement the set_channel + method. + + * modules/colorsel_gtk.c + * modules/colorsel_triangle.c + * modules/colorsel_water.c: removed empty set_channel methods + 2001-01-16 Sven Neumann * app/devices.c: don't show the alpha value of fore/background colors diff --git a/app/color_notebook.c b/app/color_notebook.c index 6f413ee1b4..3e37b32037 100644 --- a/app/color_notebook.c +++ b/app/color_notebook.c @@ -18,8 +18,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define __COLOR_NOTEBOOK_C__ 1 - #include "config.h" #include @@ -194,7 +192,8 @@ color_notebook_new (GimpRGB *color, GtkWidget *color_area; GimpRGB bw; GSList *group; - gchar buffer[16]; + guchar r, g, b; + gchar buffer[8]; ColorSelectorInfo *info; ColorSelectorInstance *csel; gint i; @@ -409,7 +408,7 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->orig_color); /* The color space sliders, toggle buttons and entries */ - table = gtk_table_new (show_alpha ? 7 : 6, 4, FALSE); + table = gtk_table_new (show_alpha ? 8 : 7, 4, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); @@ -417,15 +416,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (table); group = NULL; - for (i = 0; i < (show_alpha ? 7 : 6); i++) + for (i = 0; i < (show_alpha ? 8 : 7); i++) { - label = gtk_label_new (toggle_titles[i]); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 1, 2, i, i + 1, - GTK_SHRINK, GTK_EXPAND, 0, 0); - gtk_widget_show (label); - if (i == 6) { cnp->toggles[i] = NULL; @@ -447,8 +439,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->toggles[i]); } - cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 2, i, - NULL, + cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 1, i, + gettext (toggle_titles[i]), 80, 55, slider_initial_vals[i], 0.0, slider_max_vals[i], @@ -463,17 +455,17 @@ color_notebook_new (GimpRGB *color, /* The hex triplet entry */ hbox = gtk_hbox_new (FALSE, 3); - gtk_box_pack_start (GTK_BOX (right_vbox), hbox, FALSE, FALSE, 0); + gtk_table_attach (GTK_TABLE (table), hbox, 1, 4, + show_alpha ? 8 : 7, show_alpha ? 8 : 9, + GTK_FILL | GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_widget_show (hbox); - cnp->hex_entry = gtk_entry_new (); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (color->r * 255.999), - (gint) (color->g * 255.999), - (gint) (color->b * 255.999)); + cnp->hex_entry = gtk_entry_new_with_max_length (7); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); gtk_entry_set_text (GTK_ENTRY (cnp->hex_entry), buffer); - gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 75, 0); - gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, FALSE, FALSE, 2); + gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 60, 0); + gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, TRUE, TRUE, 2); gtk_signal_connect (GTK_OBJECT (cnp->hex_entry), "focus_out_event", GTK_SIGNAL_FUNC (color_notebook_hex_entry_events), cnp); @@ -699,6 +691,8 @@ color_notebook_ok_callback (GtkWidget *widget, cnp = (ColorNotebook *) data; + color_history_add_clicked (NULL, cnp); + if (cnp->callback) { (* cnp->callback) (&cnp->rgb, @@ -731,6 +725,7 @@ color_notebook_page_switch (GtkWidget *widget, { ColorNotebook *cnp; ColorSelectorInstance *csel; + gint i; cnp = (ColorNotebook *) data; @@ -740,6 +735,13 @@ color_notebook_page_switch (GtkWidget *widget, cnp->cur_page = csel; + for (i = 0; i < 7; i++) + { + if (cnp->toggles[i]) + gtk_widget_set_sensitive (cnp->toggles[i], + csel->info->methods.set_channel != NULL); + } + color_notebook_update (cnp, UPDATE_CHANNEL | UPDATE_NOTEBOOK); } @@ -883,9 +885,11 @@ color_notebook_update_notebook (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_color (csel->selector_data, - &cnp->hsv, - &cnp->rgb); + + if (csel->info->methods.set_color) + csel->info->methods.set_color (csel->selector_data, + &cnp->hsv, + &cnp->rgb); } static void @@ -896,8 +900,10 @@ color_notebook_update_channel (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_channel (csel->selector_data, - cnp->active_channel); + + if (csel->info->methods.set_channel) + csel->info->methods.set_channel (csel->selector_data, + cnp->active_channel); } static void @@ -960,7 +966,7 @@ color_notebook_update_scales (ColorNotebook *cnp, gint skip) { gint values[7]; - gchar buffer[16]; + gchar buffer[8]; gint i; if (! cnp) @@ -985,6 +991,15 @@ color_notebook_update_scales (ColorNotebook *cnp, cnp); } + g_print ("RGB: %d %d %d HSV: %d %d %d ALPHA: %d\n", + values[GIMP_COLOR_SELECTOR_RED], + values[GIMP_COLOR_SELECTOR_GREEN], + values[GIMP_COLOR_SELECTOR_BLUE], + values[GIMP_COLOR_SELECTOR_HUE], + values[GIMP_COLOR_SELECTOR_SATURATION], + values[GIMP_COLOR_SELECTOR_VALUE], + values[GIMP_COLOR_SELECTOR_ALPHA]); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", values[GIMP_COLOR_SELECTOR_RED], values[GIMP_COLOR_SELECTOR_GREEN], @@ -1088,6 +1103,7 @@ color_notebook_hex_entry_events (GtkWidget *widget, gchar buffer[8]; gchar *hex_color; guint hex_rgb; + guchar r, g, b; cnp = (ColorNotebook *) data; @@ -1104,10 +1120,8 @@ color_notebook_hex_entry_events (GtkWidget *widget, case GDK_FOCUS_CHANGE: hex_color = g_strdup (gtk_entry_get_text (GTK_ENTRY (cnp->hex_entry))); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (cnp->rgb.r * 255.999), - (gint) (cnp->rgb.g * 255.999), - (gint) (cnp->rgb.b * 255.999)); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); if ((strlen (hex_color) == 7) && (g_strcasecmp (buffer, hex_color) != 0)) @@ -1115,9 +1129,10 @@ color_notebook_hex_entry_events (GtkWidget *widget, if ((sscanf (hex_color, "#%x", &hex_rgb) == 1) && (hex_rgb < (1 << 24))) { - cnp->rgb.r = ((hex_rgb & 0xff0000) >> 16) / 255.0; - cnp->rgb.g = ((hex_rgb & 0x00ff00) >> 8) / 255.0; - cnp->rgb.b = ((hex_rgb & 0x0000ff)) / 255.0; + gimp_rgb_set_uchar (&cnp->rgb, + (hex_rgb & 0xff0000) >> 16, + (hex_rgb & 0x00ff00) >> 8, + (hex_rgb & 0x0000ff)); color_notebook_update_hsv_values (cnp); color_notebook_update_scales (cnp, -1); diff --git a/app/dialogs/color-dialog.c b/app/dialogs/color-dialog.c index 6f413ee1b4..3e37b32037 100644 --- a/app/dialogs/color-dialog.c +++ b/app/dialogs/color-dialog.c @@ -18,8 +18,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define __COLOR_NOTEBOOK_C__ 1 - #include "config.h" #include @@ -194,7 +192,8 @@ color_notebook_new (GimpRGB *color, GtkWidget *color_area; GimpRGB bw; GSList *group; - gchar buffer[16]; + guchar r, g, b; + gchar buffer[8]; ColorSelectorInfo *info; ColorSelectorInstance *csel; gint i; @@ -409,7 +408,7 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->orig_color); /* The color space sliders, toggle buttons and entries */ - table = gtk_table_new (show_alpha ? 7 : 6, 4, FALSE); + table = gtk_table_new (show_alpha ? 8 : 7, 4, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); @@ -417,15 +416,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (table); group = NULL; - for (i = 0; i < (show_alpha ? 7 : 6); i++) + for (i = 0; i < (show_alpha ? 8 : 7); i++) { - label = gtk_label_new (toggle_titles[i]); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 1, 2, i, i + 1, - GTK_SHRINK, GTK_EXPAND, 0, 0); - gtk_widget_show (label); - if (i == 6) { cnp->toggles[i] = NULL; @@ -447,8 +439,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->toggles[i]); } - cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 2, i, - NULL, + cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 1, i, + gettext (toggle_titles[i]), 80, 55, slider_initial_vals[i], 0.0, slider_max_vals[i], @@ -463,17 +455,17 @@ color_notebook_new (GimpRGB *color, /* The hex triplet entry */ hbox = gtk_hbox_new (FALSE, 3); - gtk_box_pack_start (GTK_BOX (right_vbox), hbox, FALSE, FALSE, 0); + gtk_table_attach (GTK_TABLE (table), hbox, 1, 4, + show_alpha ? 8 : 7, show_alpha ? 8 : 9, + GTK_FILL | GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_widget_show (hbox); - cnp->hex_entry = gtk_entry_new (); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (color->r * 255.999), - (gint) (color->g * 255.999), - (gint) (color->b * 255.999)); + cnp->hex_entry = gtk_entry_new_with_max_length (7); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); gtk_entry_set_text (GTK_ENTRY (cnp->hex_entry), buffer); - gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 75, 0); - gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, FALSE, FALSE, 2); + gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 60, 0); + gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, TRUE, TRUE, 2); gtk_signal_connect (GTK_OBJECT (cnp->hex_entry), "focus_out_event", GTK_SIGNAL_FUNC (color_notebook_hex_entry_events), cnp); @@ -699,6 +691,8 @@ color_notebook_ok_callback (GtkWidget *widget, cnp = (ColorNotebook *) data; + color_history_add_clicked (NULL, cnp); + if (cnp->callback) { (* cnp->callback) (&cnp->rgb, @@ -731,6 +725,7 @@ color_notebook_page_switch (GtkWidget *widget, { ColorNotebook *cnp; ColorSelectorInstance *csel; + gint i; cnp = (ColorNotebook *) data; @@ -740,6 +735,13 @@ color_notebook_page_switch (GtkWidget *widget, cnp->cur_page = csel; + for (i = 0; i < 7; i++) + { + if (cnp->toggles[i]) + gtk_widget_set_sensitive (cnp->toggles[i], + csel->info->methods.set_channel != NULL); + } + color_notebook_update (cnp, UPDATE_CHANNEL | UPDATE_NOTEBOOK); } @@ -883,9 +885,11 @@ color_notebook_update_notebook (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_color (csel->selector_data, - &cnp->hsv, - &cnp->rgb); + + if (csel->info->methods.set_color) + csel->info->methods.set_color (csel->selector_data, + &cnp->hsv, + &cnp->rgb); } static void @@ -896,8 +900,10 @@ color_notebook_update_channel (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_channel (csel->selector_data, - cnp->active_channel); + + if (csel->info->methods.set_channel) + csel->info->methods.set_channel (csel->selector_data, + cnp->active_channel); } static void @@ -960,7 +966,7 @@ color_notebook_update_scales (ColorNotebook *cnp, gint skip) { gint values[7]; - gchar buffer[16]; + gchar buffer[8]; gint i; if (! cnp) @@ -985,6 +991,15 @@ color_notebook_update_scales (ColorNotebook *cnp, cnp); } + g_print ("RGB: %d %d %d HSV: %d %d %d ALPHA: %d\n", + values[GIMP_COLOR_SELECTOR_RED], + values[GIMP_COLOR_SELECTOR_GREEN], + values[GIMP_COLOR_SELECTOR_BLUE], + values[GIMP_COLOR_SELECTOR_HUE], + values[GIMP_COLOR_SELECTOR_SATURATION], + values[GIMP_COLOR_SELECTOR_VALUE], + values[GIMP_COLOR_SELECTOR_ALPHA]); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", values[GIMP_COLOR_SELECTOR_RED], values[GIMP_COLOR_SELECTOR_GREEN], @@ -1088,6 +1103,7 @@ color_notebook_hex_entry_events (GtkWidget *widget, gchar buffer[8]; gchar *hex_color; guint hex_rgb; + guchar r, g, b; cnp = (ColorNotebook *) data; @@ -1104,10 +1120,8 @@ color_notebook_hex_entry_events (GtkWidget *widget, case GDK_FOCUS_CHANGE: hex_color = g_strdup (gtk_entry_get_text (GTK_ENTRY (cnp->hex_entry))); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (cnp->rgb.r * 255.999), - (gint) (cnp->rgb.g * 255.999), - (gint) (cnp->rgb.b * 255.999)); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); if ((strlen (hex_color) == 7) && (g_strcasecmp (buffer, hex_color) != 0)) @@ -1115,9 +1129,10 @@ color_notebook_hex_entry_events (GtkWidget *widget, if ((sscanf (hex_color, "#%x", &hex_rgb) == 1) && (hex_rgb < (1 << 24))) { - cnp->rgb.r = ((hex_rgb & 0xff0000) >> 16) / 255.0; - cnp->rgb.g = ((hex_rgb & 0x00ff00) >> 8) / 255.0; - cnp->rgb.b = ((hex_rgb & 0x0000ff)) / 255.0; + gimp_rgb_set_uchar (&cnp->rgb, + (hex_rgb & 0xff0000) >> 16, + (hex_rgb & 0x00ff00) >> 8, + (hex_rgb & 0x0000ff)); color_notebook_update_hsv_values (cnp); color_notebook_update_scales (cnp, -1); diff --git a/app/gui/color-notebook.c b/app/gui/color-notebook.c index 6f413ee1b4..3e37b32037 100644 --- a/app/gui/color-notebook.c +++ b/app/gui/color-notebook.c @@ -18,8 +18,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define __COLOR_NOTEBOOK_C__ 1 - #include "config.h" #include @@ -194,7 +192,8 @@ color_notebook_new (GimpRGB *color, GtkWidget *color_area; GimpRGB bw; GSList *group; - gchar buffer[16]; + guchar r, g, b; + gchar buffer[8]; ColorSelectorInfo *info; ColorSelectorInstance *csel; gint i; @@ -409,7 +408,7 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->orig_color); /* The color space sliders, toggle buttons and entries */ - table = gtk_table_new (show_alpha ? 7 : 6, 4, FALSE); + table = gtk_table_new (show_alpha ? 8 : 7, 4, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); @@ -417,15 +416,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (table); group = NULL; - for (i = 0; i < (show_alpha ? 7 : 6); i++) + for (i = 0; i < (show_alpha ? 8 : 7); i++) { - label = gtk_label_new (toggle_titles[i]); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 1, 2, i, i + 1, - GTK_SHRINK, GTK_EXPAND, 0, 0); - gtk_widget_show (label); - if (i == 6) { cnp->toggles[i] = NULL; @@ -447,8 +439,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->toggles[i]); } - cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 2, i, - NULL, + cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 1, i, + gettext (toggle_titles[i]), 80, 55, slider_initial_vals[i], 0.0, slider_max_vals[i], @@ -463,17 +455,17 @@ color_notebook_new (GimpRGB *color, /* The hex triplet entry */ hbox = gtk_hbox_new (FALSE, 3); - gtk_box_pack_start (GTK_BOX (right_vbox), hbox, FALSE, FALSE, 0); + gtk_table_attach (GTK_TABLE (table), hbox, 1, 4, + show_alpha ? 8 : 7, show_alpha ? 8 : 9, + GTK_FILL | GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_widget_show (hbox); - cnp->hex_entry = gtk_entry_new (); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (color->r * 255.999), - (gint) (color->g * 255.999), - (gint) (color->b * 255.999)); + cnp->hex_entry = gtk_entry_new_with_max_length (7); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); gtk_entry_set_text (GTK_ENTRY (cnp->hex_entry), buffer); - gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 75, 0); - gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, FALSE, FALSE, 2); + gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 60, 0); + gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, TRUE, TRUE, 2); gtk_signal_connect (GTK_OBJECT (cnp->hex_entry), "focus_out_event", GTK_SIGNAL_FUNC (color_notebook_hex_entry_events), cnp); @@ -699,6 +691,8 @@ color_notebook_ok_callback (GtkWidget *widget, cnp = (ColorNotebook *) data; + color_history_add_clicked (NULL, cnp); + if (cnp->callback) { (* cnp->callback) (&cnp->rgb, @@ -731,6 +725,7 @@ color_notebook_page_switch (GtkWidget *widget, { ColorNotebook *cnp; ColorSelectorInstance *csel; + gint i; cnp = (ColorNotebook *) data; @@ -740,6 +735,13 @@ color_notebook_page_switch (GtkWidget *widget, cnp->cur_page = csel; + for (i = 0; i < 7; i++) + { + if (cnp->toggles[i]) + gtk_widget_set_sensitive (cnp->toggles[i], + csel->info->methods.set_channel != NULL); + } + color_notebook_update (cnp, UPDATE_CHANNEL | UPDATE_NOTEBOOK); } @@ -883,9 +885,11 @@ color_notebook_update_notebook (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_color (csel->selector_data, - &cnp->hsv, - &cnp->rgb); + + if (csel->info->methods.set_color) + csel->info->methods.set_color (csel->selector_data, + &cnp->hsv, + &cnp->rgb); } static void @@ -896,8 +900,10 @@ color_notebook_update_channel (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_channel (csel->selector_data, - cnp->active_channel); + + if (csel->info->methods.set_channel) + csel->info->methods.set_channel (csel->selector_data, + cnp->active_channel); } static void @@ -960,7 +966,7 @@ color_notebook_update_scales (ColorNotebook *cnp, gint skip) { gint values[7]; - gchar buffer[16]; + gchar buffer[8]; gint i; if (! cnp) @@ -985,6 +991,15 @@ color_notebook_update_scales (ColorNotebook *cnp, cnp); } + g_print ("RGB: %d %d %d HSV: %d %d %d ALPHA: %d\n", + values[GIMP_COLOR_SELECTOR_RED], + values[GIMP_COLOR_SELECTOR_GREEN], + values[GIMP_COLOR_SELECTOR_BLUE], + values[GIMP_COLOR_SELECTOR_HUE], + values[GIMP_COLOR_SELECTOR_SATURATION], + values[GIMP_COLOR_SELECTOR_VALUE], + values[GIMP_COLOR_SELECTOR_ALPHA]); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", values[GIMP_COLOR_SELECTOR_RED], values[GIMP_COLOR_SELECTOR_GREEN], @@ -1088,6 +1103,7 @@ color_notebook_hex_entry_events (GtkWidget *widget, gchar buffer[8]; gchar *hex_color; guint hex_rgb; + guchar r, g, b; cnp = (ColorNotebook *) data; @@ -1104,10 +1120,8 @@ color_notebook_hex_entry_events (GtkWidget *widget, case GDK_FOCUS_CHANGE: hex_color = g_strdup (gtk_entry_get_text (GTK_ENTRY (cnp->hex_entry))); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (cnp->rgb.r * 255.999), - (gint) (cnp->rgb.g * 255.999), - (gint) (cnp->rgb.b * 255.999)); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); if ((strlen (hex_color) == 7) && (g_strcasecmp (buffer, hex_color) != 0)) @@ -1115,9 +1129,10 @@ color_notebook_hex_entry_events (GtkWidget *widget, if ((sscanf (hex_color, "#%x", &hex_rgb) == 1) && (hex_rgb < (1 << 24))) { - cnp->rgb.r = ((hex_rgb & 0xff0000) >> 16) / 255.0; - cnp->rgb.g = ((hex_rgb & 0x00ff00) >> 8) / 255.0; - cnp->rgb.b = ((hex_rgb & 0x0000ff)) / 255.0; + gimp_rgb_set_uchar (&cnp->rgb, + (hex_rgb & 0xff0000) >> 16, + (hex_rgb & 0x00ff00) >> 8, + (hex_rgb & 0x0000ff)); color_notebook_update_hsv_values (cnp); color_notebook_update_scales (cnp, -1); diff --git a/app/widgets/gimpcolordialog.c b/app/widgets/gimpcolordialog.c index 6f413ee1b4..3e37b32037 100644 --- a/app/widgets/gimpcolordialog.c +++ b/app/widgets/gimpcolordialog.c @@ -18,8 +18,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define __COLOR_NOTEBOOK_C__ 1 - #include "config.h" #include @@ -194,7 +192,8 @@ color_notebook_new (GimpRGB *color, GtkWidget *color_area; GimpRGB bw; GSList *group; - gchar buffer[16]; + guchar r, g, b; + gchar buffer[8]; ColorSelectorInfo *info; ColorSelectorInstance *csel; gint i; @@ -409,7 +408,7 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->orig_color); /* The color space sliders, toggle buttons and entries */ - table = gtk_table_new (show_alpha ? 7 : 6, 4, FALSE); + table = gtk_table_new (show_alpha ? 8 : 7, 4, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); @@ -417,15 +416,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (table); group = NULL; - for (i = 0; i < (show_alpha ? 7 : 6); i++) + for (i = 0; i < (show_alpha ? 8 : 7); i++) { - label = gtk_label_new (toggle_titles[i]); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 1, 2, i, i + 1, - GTK_SHRINK, GTK_EXPAND, 0, 0); - gtk_widget_show (label); - if (i == 6) { cnp->toggles[i] = NULL; @@ -447,8 +439,8 @@ color_notebook_new (GimpRGB *color, gtk_widget_show (cnp->toggles[i]); } - cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 2, i, - NULL, + cnp->slider_data[i] = gimp_scale_entry_new (GTK_TABLE (table), 1, i, + gettext (toggle_titles[i]), 80, 55, slider_initial_vals[i], 0.0, slider_max_vals[i], @@ -463,17 +455,17 @@ color_notebook_new (GimpRGB *color, /* The hex triplet entry */ hbox = gtk_hbox_new (FALSE, 3); - gtk_box_pack_start (GTK_BOX (right_vbox), hbox, FALSE, FALSE, 0); + gtk_table_attach (GTK_TABLE (table), hbox, 1, 4, + show_alpha ? 8 : 7, show_alpha ? 8 : 9, + GTK_FILL | GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_widget_show (hbox); - cnp->hex_entry = gtk_entry_new (); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (color->r * 255.999), - (gint) (color->g * 255.999), - (gint) (color->b * 255.999)); + cnp->hex_entry = gtk_entry_new_with_max_length (7); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); gtk_entry_set_text (GTK_ENTRY (cnp->hex_entry), buffer); - gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 75, 0); - gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, FALSE, FALSE, 2); + gtk_widget_set_usize (GTK_WIDGET (cnp->hex_entry), 60, 0); + gtk_box_pack_end (GTK_BOX (hbox), cnp->hex_entry, TRUE, TRUE, 2); gtk_signal_connect (GTK_OBJECT (cnp->hex_entry), "focus_out_event", GTK_SIGNAL_FUNC (color_notebook_hex_entry_events), cnp); @@ -699,6 +691,8 @@ color_notebook_ok_callback (GtkWidget *widget, cnp = (ColorNotebook *) data; + color_history_add_clicked (NULL, cnp); + if (cnp->callback) { (* cnp->callback) (&cnp->rgb, @@ -731,6 +725,7 @@ color_notebook_page_switch (GtkWidget *widget, { ColorNotebook *cnp; ColorSelectorInstance *csel; + gint i; cnp = (ColorNotebook *) data; @@ -740,6 +735,13 @@ color_notebook_page_switch (GtkWidget *widget, cnp->cur_page = csel; + for (i = 0; i < 7; i++) + { + if (cnp->toggles[i]) + gtk_widget_set_sensitive (cnp->toggles[i], + csel->info->methods.set_channel != NULL); + } + color_notebook_update (cnp, UPDATE_CHANNEL | UPDATE_NOTEBOOK); } @@ -883,9 +885,11 @@ color_notebook_update_notebook (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_color (csel->selector_data, - &cnp->hsv, - &cnp->rgb); + + if (csel->info->methods.set_color) + csel->info->methods.set_color (csel->selector_data, + &cnp->hsv, + &cnp->rgb); } static void @@ -896,8 +900,10 @@ color_notebook_update_channel (ColorNotebook *cnp) g_return_if_fail (cnp != NULL); csel = cnp->cur_page; - csel->info->methods.set_channel (csel->selector_data, - cnp->active_channel); + + if (csel->info->methods.set_channel) + csel->info->methods.set_channel (csel->selector_data, + cnp->active_channel); } static void @@ -960,7 +966,7 @@ color_notebook_update_scales (ColorNotebook *cnp, gint skip) { gint values[7]; - gchar buffer[16]; + gchar buffer[8]; gint i; if (! cnp) @@ -985,6 +991,15 @@ color_notebook_update_scales (ColorNotebook *cnp, cnp); } + g_print ("RGB: %d %d %d HSV: %d %d %d ALPHA: %d\n", + values[GIMP_COLOR_SELECTOR_RED], + values[GIMP_COLOR_SELECTOR_GREEN], + values[GIMP_COLOR_SELECTOR_BLUE], + values[GIMP_COLOR_SELECTOR_HUE], + values[GIMP_COLOR_SELECTOR_SATURATION], + values[GIMP_COLOR_SELECTOR_VALUE], + values[GIMP_COLOR_SELECTOR_ALPHA]); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", values[GIMP_COLOR_SELECTOR_RED], values[GIMP_COLOR_SELECTOR_GREEN], @@ -1088,6 +1103,7 @@ color_notebook_hex_entry_events (GtkWidget *widget, gchar buffer[8]; gchar *hex_color; guint hex_rgb; + guchar r, g, b; cnp = (ColorNotebook *) data; @@ -1104,10 +1120,8 @@ color_notebook_hex_entry_events (GtkWidget *widget, case GDK_FOCUS_CHANGE: hex_color = g_strdup (gtk_entry_get_text (GTK_ENTRY (cnp->hex_entry))); - g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", - (gint) (cnp->rgb.r * 255.999), - (gint) (cnp->rgb.g * 255.999), - (gint) (cnp->rgb.b * 255.999)); + gimp_rgb_get_uchar (&cnp->rgb, &r, &g, &b); + g_snprintf (buffer, sizeof (buffer), "#%.2x%.2x%.2x", r, g, b); if ((strlen (hex_color) == 7) && (g_strcasecmp (buffer, hex_color) != 0)) @@ -1115,9 +1129,10 @@ color_notebook_hex_entry_events (GtkWidget *widget, if ((sscanf (hex_color, "#%x", &hex_rgb) == 1) && (hex_rgb < (1 << 24))) { - cnp->rgb.r = ((hex_rgb & 0xff0000) >> 16) / 255.0; - cnp->rgb.g = ((hex_rgb & 0x00ff00) >> 8) / 255.0; - cnp->rgb.b = ((hex_rgb & 0x0000ff)) / 255.0; + gimp_rgb_set_uchar (&cnp->rgb, + (hex_rgb & 0xff0000) >> 16, + (hex_rgb & 0x00ff00) >> 8, + (hex_rgb & 0x0000ff)); color_notebook_update_hsv_values (cnp); color_notebook_update_scales (cnp, -1); diff --git a/libgimp/gimpcolorspace.c b/libgimp/gimpcolorspace.c index cc53da68ae..efeb51355a 100644 --- a/libgimp/gimpcolorspace.c +++ b/libgimp/gimpcolorspace.c @@ -47,16 +47,12 @@ gimp_rgb_to_hsv (const GimpRGB *rgb, min = gimp_rgb_min (rgb); hsv->v = max; + delta = max - min; - if (max != 0.0) + if (delta > 0.0001) { - delta = max - min; - hsv->s = delta / max; - if (delta == 0.0) - delta = 1.0; - if (rgb->r == max) { hsv->h = (rgb->g - rgb->b) / delta; diff --git a/modules/colorsel_gtk.c b/modules/colorsel_gtk.c index 51346b8448..e6df25952b 100644 --- a/modules/colorsel_gtk.c +++ b/modules/colorsel_gtk.c @@ -45,8 +45,6 @@ static void colorsel_gtk_free (gpointer data); static void colorsel_gtk_set_color (gpointer data, const GimpHSV *hsv, const GimpRGB *rgb); -static void colorsel_gtk_set_channel (gpointer data, - GimpColorSelectorChannelType channel); static void colorsel_gtk_update (GtkWidget *widget, gpointer data); @@ -62,7 +60,7 @@ static GimpColorSelectorMethods methods = colorsel_gtk_new, colorsel_gtk_free, colorsel_gtk_set_color, - colorsel_gtk_set_channel + NULL /* set_channel */ }; static GimpModuleInfo info = @@ -205,12 +203,6 @@ colorsel_gtk_set_color (gpointer data, gtk_color_selection_set_color (GTK_COLOR_SELECTION (p->selector), color); } -static void -colorsel_gtk_set_channel (gpointer data, - GimpColorSelectorChannelType channel) -{ -} - static void colorsel_gtk_update (GtkWidget *widget, gpointer data) diff --git a/modules/colorsel_triangle.c b/modules/colorsel_triangle.c index 01449c82d7..5e0036e5fc 100644 --- a/modules/colorsel_triangle.c +++ b/modules/colorsel_triangle.c @@ -49,8 +49,6 @@ static void colorsel_triangle_free (gpointer selector_data); static void colorsel_triangle_set_color (gpointer selector_data, const GimpHSV *hsv, const GimpRGB *rgb); -static void colorsel_triangle_set_channel (gpointer selector_data, - GimpColorSelectorChannelType channel); /* local methods */ @@ -59,7 +57,7 @@ static GimpColorSelectorMethods methods = colorsel_triangle_new, colorsel_triangle_free, colorsel_triangle_set_color, - colorsel_triangle_set_channel + NULL /* set_channel */ }; @@ -238,11 +236,6 @@ colorsel_triangle_set_color (gpointer selector_data, update_previews (coldata, TRUE); } -static void -colorsel_triangle_set_channel (gpointer selector_data, - GimpColorSelectorChannelType channel) -{ -} /*************************************************************/ /* helper functions */ diff --git a/modules/colorsel_water.c b/modules/colorsel_water.c index d5f0bca545..f4a306df0f 100644 --- a/modules/colorsel_water.c +++ b/modules/colorsel_water.c @@ -69,8 +69,6 @@ static void colorsel_water_free (gpointer data); static void colorsel_water_set_color (gpointer data, const GimpHSV *hsv, const GimpRGB *rgb); -static void colorsel_water_set_channel (gpointer data, - GimpColorSelectorChannelType channel); static void colorsel_water_update (ColorselWater *colorsel); @@ -80,7 +78,7 @@ static GimpColorSelectorMethods methods = colorsel_water_new, colorsel_water_free, colorsel_water_set_color, - colorsel_water_set_channel + NULL /* set_channel */ }; @@ -507,12 +505,6 @@ colorsel_water_set_color (gpointer data, colorsel->rgb = *rgb; } -static void -colorsel_water_set_channel (gpointer data, - GimpColorSelectorChannelType channel) -{ -} - static void colorsel_water_update (ColorselWater *colorsel) {