diff --git a/ChangeLog b/ChangeLog index 7991ed617b..29aab7a8ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-05-19 Sven Neumann <sven@gimp.org> + + * libgimpwidgets/gimpcolorscales.c: removed the hex entry from the + GimpColorScales widget. + + * libgimpwidgets/gimpcolorselection.c: added it here instead. + + * app/widgets/gimpcoloreditor.[ch]: and here, next to the FG/BG + editor. + 2005-05-19 Sven Neumann <sven@gimp.org> * app/core/gimpstrokeoptions.[ch]: renamed property "miter" to diff --git a/app/widgets/gimpcoloreditor.c b/app/widgets/gimpcoloreditor.c index 023398b626..ac9d938126 100644 --- a/app/widgets/gimpcoloreditor.c +++ b/app/widgets/gimpcoloreditor.c @@ -76,6 +76,8 @@ static void gimp_color_editor_fg_bg_notify (GtkWidget *widget, static void gimp_color_editor_color_picked (GtkWidget *widget, const GimpRGB *rgb, GimpColorEditor *editor); +static void gimp_color_editor_entry_changed (GimpColorHexEntry *entry, + GimpColorEditor *editor); static GimpEditorClass *parent_class = NULL; @@ -135,6 +137,8 @@ static void gimp_color_editor_init (GimpColorEditor *editor) { GtkWidget *notebook; + GtkWidget *hbox; + GtkWidget *vbox; gint content_spacing; gint button_spacing; GtkIconSize button_icon_size; @@ -229,15 +233,35 @@ gimp_color_editor_init (GimpColorEditor *editor) editor); } + hbox = gtk_hbox_new (TRUE, 6); + gtk_box_pack_start (GTK_BOX (editor), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); + /* FG/BG editor */ editor->fg_bg = gimp_fg_bg_editor_new (NULL); gtk_widget_set_size_request (editor->fg_bg, -1, 48); - gtk_box_pack_start (GTK_BOX (editor), editor->fg_bg, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), editor->fg_bg, TRUE, TRUE, 0); gtk_widget_show (editor->fg_bg); g_signal_connect (editor->fg_bg, "notify::active-color", G_CALLBACK (gimp_color_editor_fg_bg_notify), editor); + + /* The hex triplet entry */ + vbox = gtk_vbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); + gtk_widget_show (vbox); + + editor->hex_entry = gimp_color_hex_entry_new (); + gimp_help_set_help_data (editor->hex_entry, + _("Hexadecimal color notation " + "as used in HTML and CSS"), NULL); + gtk_box_pack_end (GTK_BOX (vbox), editor->hex_entry, FALSE, FALSE, 0); + gtk_widget_show (editor->hex_entry); + + g_signal_connect (editor->hex_entry, "color_changed", + G_CALLBACK (gimp_color_editor_entry_changed), + editor); } static GtkWidget * @@ -390,9 +414,6 @@ gimp_color_editor_destroy (GtkObject *object) GTK_OBJECT_CLASS (parent_class)->destroy (object); } - -/* public functions */ - GtkWidget * gimp_color_editor_new (GimpContext *context) { @@ -422,7 +443,36 @@ gimp_color_editor_style_set (GtkWidget *widget, } -/* public functions */ +static void +gimp_color_editor_set_color (GimpColorEditor *editor, + const GimpRGB *rgb) +{ + GimpHSV hsv; + + gimp_rgb_to_hsv (rgb, &hsv); + + g_signal_handlers_block_by_func (editor->notebook, + gimp_color_editor_color_changed, + editor); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (editor->notebook), + rgb, &hsv); + + g_signal_handlers_unblock_by_func (editor->notebook, + gimp_color_editor_color_changed, + editor); + + g_signal_handlers_block_by_func (editor->hex_entry, + gimp_color_editor_entry_changed, + editor); + + gimp_color_hex_entry_set_color (GIMP_COLOR_HEX_ENTRY (editor->hex_entry), + rgb); + + g_signal_handlers_unblock_by_func (editor->hex_entry, + gimp_color_editor_entry_changed, + editor); +} static void gimp_color_editor_fg_changed (GimpContext *context, @@ -430,22 +480,7 @@ gimp_color_editor_fg_changed (GimpContext *context, GimpColorEditor *editor) { if (! editor->edit_bg) - { - GimpHSV hsv; - - gimp_rgb_to_hsv (rgb, &hsv); - - g_signal_handlers_block_by_func (editor->notebook, - gimp_color_editor_color_changed, - editor); - - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (editor->notebook), - rgb, &hsv); - - g_signal_handlers_unblock_by_func (editor->notebook, - gimp_color_editor_color_changed, - editor); - } + gimp_color_editor_set_color (editor, rgb); } static void @@ -454,22 +489,7 @@ gimp_color_editor_bg_changed (GimpContext *context, GimpColorEditor *editor) { if (editor->edit_bg) - { - GimpHSV hsv; - - gimp_rgb_to_hsv (rgb, &hsv); - - g_signal_handlers_block_by_func (editor->notebook, - gimp_color_editor_color_changed, - editor); - - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (editor->notebook), - rgb, &hsv); - - g_signal_handlers_unblock_by_func (editor->notebook, - gimp_color_editor_color_changed, - editor); - } + gimp_color_editor_set_color (editor, rgb); } static void @@ -505,6 +525,17 @@ gimp_color_editor_color_changed (GimpColorSelector *selector, editor); } } + + g_signal_handlers_block_by_func (editor->hex_entry, + gimp_color_editor_entry_changed, + editor); + + gimp_color_hex_entry_set_color (GIMP_COLOR_HEX_ENTRY (editor->hex_entry), + rgb); + + g_signal_handlers_unblock_by_func (editor->hex_entry, + gimp_color_editor_entry_changed, + editor); } static void @@ -577,3 +608,20 @@ gimp_color_editor_color_picked (GtkWidget *widget, gimp_context_set_foreground (editor->context, rgb); } } + +static void +gimp_color_editor_entry_changed (GimpColorHexEntry *entry, + GimpColorEditor *editor) +{ + GimpRGB rgb; + + gimp_color_hex_entry_get_color (entry, &rgb); + + if (editor->context) + { + if (editor->edit_bg) + gimp_context_set_background (editor->context, &rgb); + else + gimp_context_set_foreground (editor->context, &rgb); + } +} diff --git a/app/widgets/gimpcoloreditor.h b/app/widgets/gimpcoloreditor.h index 26422cfedf..ecd6842dbe 100644 --- a/app/widgets/gimpcoloreditor.h +++ b/app/widgets/gimpcoloreditor.h @@ -46,6 +46,7 @@ struct _GimpColorEditor GtkWidget *hbox; GtkWidget *notebook; GtkWidget *fg_bg; + GtkWidget *hex_entry; }; struct _GimpColorEditorClass diff --git a/libgimpwidgets/gimpcolorscales.c b/libgimpwidgets/gimpcolorscales.c index d48fb9667f..b5e0e6a66b 100644 --- a/libgimpwidgets/gimpcolorscales.c +++ b/libgimpwidgets/gimpcolorscales.c @@ -36,7 +36,6 @@ #include "gimpcolorscale.h" #include "gimpcolorscales.h" -#include "gimpcolorhexentry.h" #include "gimpwidgets.h" #include "libgimp/libgimp-intl.h" @@ -56,7 +55,6 @@ struct _GimpColorScales GtkWidget *toggles[7]; GtkWidget *sliders[7]; GtkObject *slider_data[7]; - GtkWidget *hex_entry; }; struct _GimpColorScalesClass @@ -88,9 +86,6 @@ static void gimp_color_scales_toggle_update (GtkWidget *widget, static void gimp_color_scales_scale_update (GtkAdjustment *adjustment, GimpColorScales *scales); -static void gimp_color_scales_entry_changed (GimpColorHexEntry *entry, - GimpColorScales *scales); - static GimpColorSelectorClass *parent_class = NULL; @@ -145,8 +140,6 @@ gimp_color_scales_init (GimpColorScales *scales) { GimpColorSelector *selector = GIMP_COLOR_SELECTOR (scales); GtkWidget *table; - GtkWidget *hbox; - GtkWidget *label; GSList *group; gint i; @@ -232,27 +225,6 @@ gimp_color_scales_init (GimpColorScales *scales) G_CALLBACK (gimp_color_scales_scale_update), scales); } - - /* The hex triplet entry */ - hbox = gtk_hbox_new (FALSE, 6); - gtk_box_pack_end (GTK_BOX (scales), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - scales->hex_entry = gimp_color_hex_entry_new (); - gimp_help_set_help_data (scales->hex_entry, - _("Hexadecimal color notation " - "as used in HTML and CSS"), NULL); - gtk_box_pack_end (GTK_BOX (hbox), scales->hex_entry, TRUE, TRUE, 0); - gtk_widget_show (scales->hex_entry); - - label = gtk_label_new_with_mnemonic (_("HTML _Notation:")); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), scales->hex_entry); - gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - g_signal_connect (scales->hex_entry, "color_changed", - G_CALLBACK (gimp_color_scales_entry_changed), - scales); } static void @@ -375,17 +347,6 @@ gimp_color_scales_update_scales (GimpColorScales *scales, gimp_color_scale_set_color (GIMP_COLOR_SCALE (scales->sliders[i]), &selector->rgb, &selector->hsv); } - - g_signal_handlers_block_by_func (scales->hex_entry, - gimp_color_scales_entry_changed, - scales); - - gimp_color_hex_entry_set_color (GIMP_COLOR_HEX_ENTRY (scales->hex_entry), - &selector->rgb); - - g_signal_handlers_unblock_by_func (scales->hex_entry, - gimp_color_scales_entry_changed, - scales); } static void @@ -465,17 +426,3 @@ gimp_color_scales_scale_update (GtkAdjustment *adjustment, gimp_color_selector_color_changed (selector); } - -static void -gimp_color_scales_entry_changed (GimpColorHexEntry *entry, - GimpColorScales *scales) -{ - GimpColorSelector *selector = GIMP_COLOR_SELECTOR (scales); - - gimp_color_hex_entry_get_color (entry, &selector->rgb); - - gimp_rgb_to_hsv (&selector->rgb, &selector->hsv); - gimp_color_scales_update_scales (scales, -1); - - gimp_color_selector_color_changed (selector); -} diff --git a/libgimpwidgets/gimpcolorselection.c b/libgimpwidgets/gimpcolorselection.c index 6091b76e9c..dbb378733c 100644 --- a/libgimpwidgets/gimpcolorselection.c +++ b/libgimpwidgets/gimpcolorselection.c @@ -50,9 +50,15 @@ typedef enum { UPDATE_NOTEBOOK = 1 << 0, UPDATE_SCALES = 1 << 1, - UPDATE_NEW_COLOR = 1 << 2 + UPDATE_ENTRY = 1 << 2, + UPDATE_COLOR = 1 << 3 } UpdateType; +#define UPDATE_ALL (UPDATE_NOTEBOOK | \ + UPDATE_SCALES | \ + UPDATE_ENTRY | \ + UPDATE_COLOR) + enum { COLOR_CHANGED, @@ -75,6 +81,8 @@ static void gimp_color_selection_scales_changed (GimpColorSelector *select const GimpRGB *rgb, const GimpHSV *hsv, GimpColorSelection *selection); +static void gimp_color_selection_entry_changed (GimpColorHexEntry *entry, + GimpColorSelection *selection); static void gimp_color_selection_channel_changed (GimpColorSelector *selector, GimpColorSelectorChannel channel, GimpColorSelection *selection); @@ -141,6 +149,9 @@ gimp_color_selection_init (GimpColorSelection *selection) GtkWidget *main_hbox; GtkWidget *frame; GtkWidget *table; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *entry; selection->show_alpha = TRUE; @@ -259,6 +270,29 @@ gimp_color_selection_init (GimpColorSelection *selection) g_signal_connect (selection->scales, "color_changed", G_CALLBACK (gimp_color_selection_scales_changed), selection); + + /* The hex triplet entry */ + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_end (GTK_BOX (selection->right_vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); + + entry = gimp_color_hex_entry_new (); + gimp_help_set_help_data (entry, + _("Hexadecimal color notation " + "as used in HTML and CSS"), NULL); + gtk_box_pack_end (GTK_BOX (hbox), entry, TRUE, TRUE, 0); + gtk_widget_show (entry); + + label = gtk_label_new_with_mnemonic (_("HTML _Notation:")); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); + gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + g_object_set_data (G_OBJECT (selection), "color-hex-entry", entry); + + g_signal_connect (entry, "color_changed", + G_CALLBACK (gimp_color_selection_entry_changed), + selection); } /** @@ -340,10 +374,7 @@ gimp_color_selection_set_color (GimpColorSelection *selection, selection->rgb = *color; gimp_rgb_to_hsv (&selection->rgb, &selection->hsv); - gimp_color_selection_update (selection, - UPDATE_NOTEBOOK | - UPDATE_SCALES | - UPDATE_NEW_COLOR); + gimp_color_selection_update (selection, UPDATE_ALL); gimp_color_selection_color_changed (selection); } @@ -458,7 +489,8 @@ gimp_color_selection_notebook_changed (GimpColorSelector *selector, selection->hsv = *hsv; selection->rgb = *rgb; - gimp_color_selection_update (selection, UPDATE_SCALES | UPDATE_NEW_COLOR); + gimp_color_selection_update (selection, + UPDATE_SCALES | UPDATE_ENTRY | UPDATE_COLOR); gimp_color_selection_color_changed (selection); } @@ -471,7 +503,21 @@ gimp_color_selection_scales_changed (GimpColorSelector *selector, selection->rgb = *rgb; selection->hsv = *hsv; - gimp_color_selection_update (selection, UPDATE_NOTEBOOK | UPDATE_NEW_COLOR); + gimp_color_selection_update (selection, + UPDATE_ENTRY | UPDATE_NOTEBOOK | UPDATE_COLOR); + gimp_color_selection_color_changed (selection); +} + +static void +gimp_color_selection_entry_changed (GimpColorHexEntry *entry, + GimpColorSelection *selection) +{ + gimp_color_hex_entry_get_color (entry, &selection->rgb); + + gimp_rgb_to_hsv (&selection->rgb, &selection->hsv); + + gimp_color_selection_update (selection, + UPDATE_NOTEBOOK | UPDATE_SCALES | UPDATE_COLOR); gimp_color_selection_color_changed (selection); } @@ -493,7 +539,8 @@ gimp_color_selection_new_color_changed (GtkWidget *widget, gimp_color_area_get_color (GIMP_COLOR_AREA (widget), &selection->rgb); gimp_rgb_to_hsv (&selection->rgb, &selection->hsv); - gimp_color_selection_update (selection, UPDATE_NOTEBOOK | UPDATE_SCALES); + gimp_color_selection_update (selection, + UPDATE_NOTEBOOK | UPDATE_SCALES | UPDATE_ENTRY); gimp_color_selection_color_changed (selection); } @@ -531,7 +578,24 @@ gimp_color_selection_update (GimpColorSelection *selection, selection); } - if (update & UPDATE_NEW_COLOR) + if (update & UPDATE_ENTRY) + { + GimpColorHexEntry *entry; + + entry = g_object_get_data (G_OBJECT (selection), "color-hex-entry"); + + g_signal_handlers_block_by_func (entry, + gimp_color_selection_entry_changed, + selection); + + gimp_color_hex_entry_set_color (entry, &selection->rgb); + + g_signal_handlers_unblock_by_func (entry, + gimp_color_selection_entry_changed, + selection); + } + + if (update & UPDATE_COLOR) { g_signal_handlers_block_by_func (selection->new_color, gimp_color_selection_new_color_changed,