From 2743f9fae109a52530e35100fa1304453ba16d05 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Tue, 5 Nov 2002 00:02:56 +0000 Subject: [PATCH] added virtual functions set_toggles_visible() and set_toggles_sensitive(). 2002-11-05 Michael Natterer * libgimpwidgets/gimpcolorselector.[ch]: added virtual functions set_toggles_visible() and set_toggles_sensitive(). Added a stock_id. Emit "color_changed" and "channel_changed" on set_color() and set_channel() resp. * libgimpwidgets/gimpcolornotebook.[ch]: implement the new methods. Added gimp_color_notebook_set_has_page() to control which selectors a notebook contains. * libgimpwidgets/gimpcolorscales.[ch]: removed the toggle API and implement the new methods. * libgimpwidgets/gimpcolorselect.c: added toggle buttons for the channels so the widget doesn't need external ones. * app/gui/color-notebook.c: changed accordingly. * libgimpwidgets/gimpstock.[ch] * themes/Default/images/Makefile.am * themes/Default/images/stock-color-triangle-16.png: added a (bad) icon for the triangle color selector. * modules/colorsel_triangle.c: use the new icon. * modules/colorsel_water.c: use the "Paintbrush" icon for now. * app/widgets/gimpcoloreditor.[ch]: new widget for editing the FG/BG color featuring a color notebook, stock buttons for selecting the pages and a GimpPickButton. * app/widgets/Makefile.am * app/widgets/widgets-types.h: changed accordingly. * app/gui/dialogs-constructors.[ch] * app/gui/dialogs.c: added a dockable wrapper for GimpColorEditor. * app/gui/menus.c: added it to the menus. Also added separate Layers, Channels and Paths entries. Bind L to the new callback so it doesn't always create a new layers dialog. --- ChangeLog | 41 ++ app/dialogs/color-dialog.c | 40 +- app/dialogs/dialogs-constructors.c | 32 + app/dialogs/dialogs-constructors.h | 4 + app/dialogs/dialogs.c | 2 + app/gui/color-notebook.c | 40 +- app/gui/dialogs-constructors.c | 32 + app/gui/dialogs-constructors.h | 4 + app/gui/dialogs.c | 2 + app/gui/menus.c | 127 ++-- app/menus/menus.c | 127 ++-- app/widgets/Makefile.am | 2 + app/widgets/gimpcolordialog.c | 40 +- app/widgets/gimpcoloreditor.c | 563 ++++++++++++++++++ app/widgets/gimpcoloreditor.h | 64 ++ app/widgets/widgets-types.h | 1 + libgimpwidgets/gimpcolornotebook.c | 130 +++- libgimpwidgets/gimpcolornotebook.h | 6 +- libgimpwidgets/gimpcolorscales.c | 107 ++-- libgimpwidgets/gimpcolorscales.h | 5 +- libgimpwidgets/gimpcolorselect.c | 215 +++++-- libgimpwidgets/gimpcolorselector.c | 88 ++- libgimpwidgets/gimpcolorselector.h | 63 +- libgimpwidgets/gimpstock.c | 2 + libgimpwidgets/gimpstock.h | 1 + modules/colorsel_triangle.c | 1 + modules/colorsel_water.c | 1 + themes/Default/images/Makefile.am | 1 + .../images/stock-color-triangle-16.png | Bin 0 -> 844 bytes 29 files changed, 1492 insertions(+), 249 deletions(-) create mode 100644 app/widgets/gimpcoloreditor.c create mode 100644 app/widgets/gimpcoloreditor.h create mode 100644 themes/Default/images/stock-color-triangle-16.png diff --git a/ChangeLog b/ChangeLog index f18a4e39fc..70f6d50159 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,44 @@ +2002-11-05 Michael Natterer + + * libgimpwidgets/gimpcolorselector.[ch]: added virtual functions + set_toggles_visible() and set_toggles_sensitive(). Added a + stock_id. Emit "color_changed" and "channel_changed" on + set_color() and set_channel() resp. + + * libgimpwidgets/gimpcolornotebook.[ch]: implement the new + methods. Added gimp_color_notebook_set_has_page() to control + which selectors a notebook contains. + + * libgimpwidgets/gimpcolorscales.[ch]: removed the toggle + API and implement the new methods. + + * libgimpwidgets/gimpcolorselect.c: added toggle buttons for the + channels so the widget doesn't need external ones. + + * app/gui/color-notebook.c: changed accordingly. + + * libgimpwidgets/gimpstock.[ch] + * themes/Default/images/Makefile.am + * themes/Default/images/stock-color-triangle-16.png: added a + (bad) icon for the triangle color selector. + + * modules/colorsel_triangle.c: use the new icon. + * modules/colorsel_water.c: use the "Paintbrush" icon for now. + + * app/widgets/gimpcoloreditor.[ch]: new widget for editing the + FG/BG color featuring a color notebook, stock buttons for + selecting the pages and a GimpPickButton. + + * app/widgets/Makefile.am + * app/widgets/widgets-types.h: changed accordingly. + + * app/gui/dialogs-constructors.[ch] + * app/gui/dialogs.c: added a dockable wrapper for GimpColorEditor. + + * app/gui/menus.c: added it to the menus. Also added separate + Layers, Channels and Paths entries. Bind L to the new + callback so it doesn't always create a new layers dialog. + 2002-11-05 Michael Natterer * libgimpmodule/gimpmodule.c: on error, always close the module diff --git a/app/dialogs/color-dialog.c b/app/dialogs/color-dialog.c index cdb25fdf9a..79b9202011 100644 --- a/app/dialogs/color-dialog.c +++ b/app/dialogs/color-dialog.c @@ -369,6 +369,8 @@ color_notebook_new_internal (GimpViewable *viewable, &cnp->rgb, &cnp->hsv, cnp->active_channel); + gimp_color_selector_set_toggles_visible (GIMP_COLOR_SELECTOR (cnp->notebook), + FALSE); gtk_box_pack_start (GTK_BOX (left_vbox), cnp->notebook, TRUE, TRUE, 0); gtk_widget_show (cnp->notebook); @@ -447,6 +449,8 @@ color_notebook_new_internal (GimpViewable *viewable, &cnp->rgb, &cnp->hsv, cnp->active_channel); + gimp_color_selector_set_toggles_visible (GIMP_COLOR_SELECTOR (cnp->scales), + TRUE); gimp_color_selector_set_show_alpha (GIMP_COLOR_SELECTOR (cnp->scales), cnp->show_alpha); gtk_box_pack_start (GTK_BOX (right_vbox), cnp->scales, TRUE, TRUE, 0); @@ -570,18 +574,38 @@ color_notebook_update (ColorNotebook *cnp, return; if (update & UPDATE_NOTEBOOK) - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->notebook), - &cnp->rgb, - &cnp->hsv); + { + g_signal_handlers_block_by_func (G_OBJECT (cnp->notebook), + G_CALLBACK (color_notebook_notebook_changed), + cnp); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->notebook), + &cnp->rgb, + &cnp->hsv); + + g_signal_handlers_unblock_by_func (G_OBJECT (cnp->notebook), + G_CALLBACK (color_notebook_notebook_changed), + cnp); + } if (update & UPDATE_CHANNEL) gimp_color_selector_set_channel (GIMP_COLOR_SELECTOR (cnp->notebook), cnp->active_channel); if (update & UPDATE_SCALES) - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->scales), - &cnp->rgb, - &cnp->hsv); + { + g_signal_handlers_block_by_func (G_OBJECT (cnp->scales), + G_CALLBACK (color_notebook_scales_changed), + cnp); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->scales), + &cnp->rgb, + &cnp->hsv); + + g_signal_handlers_unblock_by_func (G_OBJECT (cnp->scales), + G_CALLBACK (color_notebook_scales_changed), + cnp); + } if (update & UPDATE_ORIG_COLOR) gimp_color_area_set_color (GIMP_COLOR_AREA (cnp->orig_color), @@ -670,8 +694,8 @@ color_notebook_switch_page (GtkWidget *widget, set_channel = (GIMP_COLOR_SELECTOR_GET_CLASS (notebook->cur_page)->set_channel != NULL); - gimp_color_scales_set_toggles_sensitive (GIMP_COLOR_SCALES (cnp->scales), - set_channel); + gimp_color_selector_set_toggles_sensitive (GIMP_COLOR_SELECTOR (cnp->scales), + set_channel); } diff --git a/app/dialogs/dialogs-constructors.c b/app/dialogs/dialogs-constructors.c index b2eb55ee41..42d6541a4a 100644 --- a/app/dialogs/dialogs-constructors.c +++ b/app/dialogs/dialogs-constructors.c @@ -40,6 +40,7 @@ #include "widgets/gimpbrusheditor.h" #include "widgets/gimpbrushfactoryview.h" #include "widgets/gimpbufferview.h" +#include "widgets/gimpcoloreditor.h" #include "widgets/gimpcolormapeditor.h" #include "widgets/gimpcontainerlistview.h" #include "widgets/gimpcontainergridview.h" @@ -126,6 +127,8 @@ static void dialogs_set_view_context_func (GimpDockable *dockable, GimpContext *context); static void dialogs_set_editor_context_func (GimpDockable *dockable, GimpContext *context); +static void dialogs_set_color_editor_context_func (GimpDockable *dockable, + GimpContext *context); static void dialogs_set_image_item_context_func (GimpDockable *dockable, GimpContext *context); static void dialogs_set_path_context_func (GimpDockable *dockable, @@ -844,6 +847,22 @@ dialogs_selection_editor_new (GimpDialogFactory *factory, /***** misc dockables *****/ +GtkWidget * +dialogs_color_editor_new (GimpDialogFactory *factory, + GimpContext *context, + gint preview_size) +{ + GtkWidget *view; + + view = gimp_color_editor_new (context); + + return dialogs_dockable_new (view, + _("Color Editor"), _("Color"), + GTK_STOCK_SELECT_COLOR, + dialogs_stock_text_tab_func, + dialogs_set_color_editor_context_func); +} + GtkWidget * dialogs_document_history_new (GimpDialogFactory *factory, GimpContext *context, @@ -1254,6 +1273,19 @@ dialogs_set_editor_context_func (GimpDockable *dockable, gimp_container_view_set_context (editor->view, context); } +static void +dialogs_set_color_editor_context_func (GimpDockable *dockable, + GimpContext *context) +{ + GimpColorEditor *editor; + + editor = (GimpColorEditor *) g_object_get_data (G_OBJECT (dockable), + "gimp-dialogs-view"); + + if (editor) + gimp_color_editor_set_context (editor, context); +} + static void dialogs_set_image_item_context_func (GimpDockable *dockable, GimpContext *context) diff --git a/app/dialogs/dialogs-constructors.h b/app/dialogs/dialogs-constructors.h index 9ab025071a..bdd45e4549 100644 --- a/app/dialogs/dialogs-constructors.h +++ b/app/dialogs/dialogs-constructors.h @@ -127,6 +127,10 @@ GtkWidget * dialogs_selection_editor_new (GimpDialogFactory *factory, GimpContext *context, gint preview_size); +GtkWidget * dialogs_color_editor_new (GimpDialogFactory *factory, + GimpContext *context, + gint preview_size); + GtkWidget * dialogs_document_history_new (GimpDialogFactory *factory, GimpContext *context, gint preview_size); diff --git a/app/dialogs/dialogs.c b/app/dialogs/dialogs.c index ace894234a..921125dbdf 100644 --- a/app/dialogs/dialogs.c +++ b/app/dialogs/dialogs.c @@ -76,6 +76,8 @@ static const GimpDialogFactoryEntry dock_entries[] = { "gimp-indexed-palette", dialogs_indexed_palette_new, 32, FALSE, FALSE, FALSE, TRUE }, { "gimp-selection-editor", dialogs_selection_editor_new, 0, FALSE, FALSE, FALSE, TRUE }, + { "gimp-color-editor", dialogs_color_editor_new, 0, FALSE, FALSE, FALSE, TRUE }, + { "gimp-document-history", dialogs_document_history_new, 48, FALSE, FALSE, FALSE, TRUE }, { "gimp-brush-editor", dialogs_brush_editor_get, 0, TRUE, FALSE, FALSE, TRUE }, diff --git a/app/gui/color-notebook.c b/app/gui/color-notebook.c index cdb25fdf9a..79b9202011 100644 --- a/app/gui/color-notebook.c +++ b/app/gui/color-notebook.c @@ -369,6 +369,8 @@ color_notebook_new_internal (GimpViewable *viewable, &cnp->rgb, &cnp->hsv, cnp->active_channel); + gimp_color_selector_set_toggles_visible (GIMP_COLOR_SELECTOR (cnp->notebook), + FALSE); gtk_box_pack_start (GTK_BOX (left_vbox), cnp->notebook, TRUE, TRUE, 0); gtk_widget_show (cnp->notebook); @@ -447,6 +449,8 @@ color_notebook_new_internal (GimpViewable *viewable, &cnp->rgb, &cnp->hsv, cnp->active_channel); + gimp_color_selector_set_toggles_visible (GIMP_COLOR_SELECTOR (cnp->scales), + TRUE); gimp_color_selector_set_show_alpha (GIMP_COLOR_SELECTOR (cnp->scales), cnp->show_alpha); gtk_box_pack_start (GTK_BOX (right_vbox), cnp->scales, TRUE, TRUE, 0); @@ -570,18 +574,38 @@ color_notebook_update (ColorNotebook *cnp, return; if (update & UPDATE_NOTEBOOK) - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->notebook), - &cnp->rgb, - &cnp->hsv); + { + g_signal_handlers_block_by_func (G_OBJECT (cnp->notebook), + G_CALLBACK (color_notebook_notebook_changed), + cnp); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->notebook), + &cnp->rgb, + &cnp->hsv); + + g_signal_handlers_unblock_by_func (G_OBJECT (cnp->notebook), + G_CALLBACK (color_notebook_notebook_changed), + cnp); + } if (update & UPDATE_CHANNEL) gimp_color_selector_set_channel (GIMP_COLOR_SELECTOR (cnp->notebook), cnp->active_channel); if (update & UPDATE_SCALES) - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->scales), - &cnp->rgb, - &cnp->hsv); + { + g_signal_handlers_block_by_func (G_OBJECT (cnp->scales), + G_CALLBACK (color_notebook_scales_changed), + cnp); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->scales), + &cnp->rgb, + &cnp->hsv); + + g_signal_handlers_unblock_by_func (G_OBJECT (cnp->scales), + G_CALLBACK (color_notebook_scales_changed), + cnp); + } if (update & UPDATE_ORIG_COLOR) gimp_color_area_set_color (GIMP_COLOR_AREA (cnp->orig_color), @@ -670,8 +694,8 @@ color_notebook_switch_page (GtkWidget *widget, set_channel = (GIMP_COLOR_SELECTOR_GET_CLASS (notebook->cur_page)->set_channel != NULL); - gimp_color_scales_set_toggles_sensitive (GIMP_COLOR_SCALES (cnp->scales), - set_channel); + gimp_color_selector_set_toggles_sensitive (GIMP_COLOR_SELECTOR (cnp->scales), + set_channel); } diff --git a/app/gui/dialogs-constructors.c b/app/gui/dialogs-constructors.c index b2eb55ee41..42d6541a4a 100644 --- a/app/gui/dialogs-constructors.c +++ b/app/gui/dialogs-constructors.c @@ -40,6 +40,7 @@ #include "widgets/gimpbrusheditor.h" #include "widgets/gimpbrushfactoryview.h" #include "widgets/gimpbufferview.h" +#include "widgets/gimpcoloreditor.h" #include "widgets/gimpcolormapeditor.h" #include "widgets/gimpcontainerlistview.h" #include "widgets/gimpcontainergridview.h" @@ -126,6 +127,8 @@ static void dialogs_set_view_context_func (GimpDockable *dockable, GimpContext *context); static void dialogs_set_editor_context_func (GimpDockable *dockable, GimpContext *context); +static void dialogs_set_color_editor_context_func (GimpDockable *dockable, + GimpContext *context); static void dialogs_set_image_item_context_func (GimpDockable *dockable, GimpContext *context); static void dialogs_set_path_context_func (GimpDockable *dockable, @@ -844,6 +847,22 @@ dialogs_selection_editor_new (GimpDialogFactory *factory, /***** misc dockables *****/ +GtkWidget * +dialogs_color_editor_new (GimpDialogFactory *factory, + GimpContext *context, + gint preview_size) +{ + GtkWidget *view; + + view = gimp_color_editor_new (context); + + return dialogs_dockable_new (view, + _("Color Editor"), _("Color"), + GTK_STOCK_SELECT_COLOR, + dialogs_stock_text_tab_func, + dialogs_set_color_editor_context_func); +} + GtkWidget * dialogs_document_history_new (GimpDialogFactory *factory, GimpContext *context, @@ -1254,6 +1273,19 @@ dialogs_set_editor_context_func (GimpDockable *dockable, gimp_container_view_set_context (editor->view, context); } +static void +dialogs_set_color_editor_context_func (GimpDockable *dockable, + GimpContext *context) +{ + GimpColorEditor *editor; + + editor = (GimpColorEditor *) g_object_get_data (G_OBJECT (dockable), + "gimp-dialogs-view"); + + if (editor) + gimp_color_editor_set_context (editor, context); +} + static void dialogs_set_image_item_context_func (GimpDockable *dockable, GimpContext *context) diff --git a/app/gui/dialogs-constructors.h b/app/gui/dialogs-constructors.h index 9ab025071a..bdd45e4549 100644 --- a/app/gui/dialogs-constructors.h +++ b/app/gui/dialogs-constructors.h @@ -127,6 +127,10 @@ GtkWidget * dialogs_selection_editor_new (GimpDialogFactory *factory, GimpContext *context, gint preview_size); +GtkWidget * dialogs_color_editor_new (GimpDialogFactory *factory, + GimpContext *context, + gint preview_size); + GtkWidget * dialogs_document_history_new (GimpDialogFactory *factory, GimpContext *context, gint preview_size); diff --git a/app/gui/dialogs.c b/app/gui/dialogs.c index ace894234a..921125dbdf 100644 --- a/app/gui/dialogs.c +++ b/app/gui/dialogs.c @@ -76,6 +76,8 @@ static const GimpDialogFactoryEntry dock_entries[] = { "gimp-indexed-palette", dialogs_indexed_palette_new, 32, FALSE, FALSE, FALSE, TRUE }, { "gimp-selection-editor", dialogs_selection_editor_new, 0, FALSE, FALSE, FALSE, TRUE }, + { "gimp-color-editor", dialogs_color_editor_new, 0, FALSE, FALSE, FALSE, TRUE }, + { "gimp-document-history", dialogs_document_history_new, 48, FALSE, FALSE, FALSE, TRUE }, { "gimp-brush-editor", dialogs_brush_editor_get, 0, TRUE, FALSE, FALSE, TRUE }, diff --git a/app/gui/menus.c b/app/gui/menus.c index 417863e9f1..c4a22ba705 100644 --- a/app/gui/menus.c +++ b/app/gui/menus.c @@ -147,7 +147,7 @@ static GimpItemFactoryEntry toolbox_entries[] = /* /File/Dialogs */ - { { N_("/File/Dialogs/Layers, Channels & Paths..."), "L", + { { N_("/File/Dialogs/Layers, Channels & Paths..."), NULL, dialogs_create_lc_cmd_callback, 0 }, NULL, "file/dialogs/layers_and_channels.html", NULL }, @@ -167,6 +167,41 @@ static GimpItemFactoryEntry toolbox_entries[] = SEPARATOR ("/File/Dialogs/---"), + { { N_("/File/Dialogs/Layers..."), "L", + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-layer-list", + NULL, NULL }, + { { N_("/File/Dialogs/Channels..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-channel-list", + NULL, NULL }, + { { N_("/File/Dialogs/Paths..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-vectors-list", + NULL, NULL }, + { { N_("/File/Dialogs/Indexed Palette..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-indexed-palette", + "file/dialogs/indexed_palette.html", NULL }, + { { N_("/File/Dialogs/Selection Editor..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_TOOL_RECT_SELECT }, + "gimp-selection-editor", + NULL, NULL }, + { { N_("/File/Dialogs/Navigation..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_NAVIGATION }, + "gimp-navigation-view", + NULL, NULL }, + + SEPARATOR ("/File/Dialogs/---"), + + { { N_("/File/Dialogs/Colors..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-color-editor", + NULL, NULL }, { { N_("/File/Dialogs/Brushes..."), "B", dialogs_create_dockable_cmd_callback, 0, "", GIMP_STOCK_TOOL_PAINTBRUSH }, @@ -187,11 +222,6 @@ static GimpItemFactoryEntry toolbox_entries[] = "", GTK_STOCK_SELECT_COLOR }, "gimp-palette-list", "file/dialogs/palette_selection.html", NULL }, - { { N_("/File/Dialogs/Indexed Palette..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GTK_STOCK_SELECT_COLOR }, - "gimp-indexed-palette", - "file/dialogs/indexed_palette.html", NULL }, { { N_("/File/Dialogs/Buffers..."), "foo", dialogs_create_dockable_cmd_callback, 0, "", GTK_STOCK_PASTE }, @@ -200,16 +230,6 @@ static GimpItemFactoryEntry toolbox_entries[] = SEPARATOR ("/File/Dialogs/---"), - { { N_("/File/Dialogs/Selection Editor..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_TOOL_RECT_SELECT }, - "gimp-selection-editor", - NULL, NULL }, - { { N_("/File/Dialogs/Navigation..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_NAVIGATION }, - "gimp-navigation-view", - NULL, NULL }, { { N_("/File/Dialogs/Images..."), NULL, dialogs_create_dockable_cmd_callback, 0 }, "gimp-image-list", @@ -883,7 +903,7 @@ static GimpItemFactoryEntry image_entries[] = /* /Dialogs */ - { { N_("/Dialogs/Layers, Channels & Paths..."), "L", + { { N_("/Dialogs/Layers, Channels & Paths..."), NULL, dialogs_create_lc_cmd_callback, 0 }, NULL, "dialogs/layers_and_channels.html", NULL }, @@ -903,6 +923,41 @@ static GimpItemFactoryEntry image_entries[] = SEPARATOR ("/Dialogs/---"), + { { N_("/Dialogs/Layers..."), "L", + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-layer-list", + NULL, NULL }, + { { N_("/Dialogs/Channels..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-channel-list", + NULL, NULL }, + { { N_("/Dialogs/Paths..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-vectors-list", + NULL, NULL }, + { { N_("/Dialogs/Indexed Palette..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-indexed-palette", + "file/dialogs/indexed_palette.html", NULL }, + { { N_("/Dialogs/Selection Editor..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_TOOL_RECT_SELECT }, + "gimp-selection-editor", + NULL, NULL }, + { { N_("/Dialogs/Navigation..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_NAVIGATION }, + "gimp-navigation-view", + NULL, NULL }, + + SEPARATOR ("/Dialogs/---"), + + { { N_("/Dialogs/Colors..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-color-editor", + NULL, NULL }, { { N_("/Dialogs/Brushes..."), "B", dialogs_create_dockable_cmd_callback, 0, "", GIMP_STOCK_TOOL_PAINTBRUSH }, @@ -923,11 +978,6 @@ static GimpItemFactoryEntry image_entries[] = "", GTK_STOCK_SELECT_COLOR }, "gimp-palette-list", "dialogs/palette_selection.html", NULL }, - { { N_("/Dialogs/Indexed Palette..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GTK_STOCK_SELECT_COLOR }, - "gimp-indexed-palette", - "dialogs/indexed_palette.html", NULL }, { { N_("/Dialogs/Buffers..."), "foo", dialogs_create_dockable_cmd_callback, 0, "", GTK_STOCK_PASTE }, @@ -936,16 +986,6 @@ static GimpItemFactoryEntry image_entries[] = SEPARATOR ("/Dialogs/---"), - { { N_("/Dialogs/Selection Editor..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_TOOL_RECT_SELECT }, - "gimp-selection-editor", - NULL, NULL }, - { { N_("/Dialogs/Navigation..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_NAVIGATION }, - "gimp-navigation-view", - NULL, NULL }, { { N_("/Dialogs/Images..."), NULL, dialogs_create_dockable_cmd_callback, 0 }, "gimp-image-list", @@ -1399,14 +1439,25 @@ static GimpItemFactoryEntry dialogs_entries[] = { { N_("/Select Tab"), NULL, NULL, 0 }, NULL, NULL, NULL }, - ADD_TAB (N_("/Add Tab/Layers..."), "gimp-layer-list", NULL, NULL), - ADD_TAB (N_("/Add Tab/Channels..."), "gimp-channel-list", NULL, NULL), - ADD_TAB (N_("/Add Tab/Paths..."), "gimp-vectors-list", NULL, NULL), ADD_TAB (N_("/Add Tab/Tool Options..."), "gimp-tool-options", "", GIMP_STOCK_TOOL_OPTIONS), SEPARATOR ("/Add Tab/---"), + ADD_TAB (N_("/Add Tab/Layers..."), "gimp-layer-list", NULL, NULL), + ADD_TAB (N_("/Add Tab/Channels..."), "gimp-channel-list", NULL, NULL), + ADD_TAB (N_("/Add Tab/Paths..."), "gimp-vectors-list", NULL, NULL), + ADD_TAB (N_("/Add Tab/Indexed Palette..."), "gimp-indexed-palette", + "", GTK_STOCK_SELECT_COLOR), + ADD_TAB (N_("/Add Tab/Selection Editor..."), "gimp-selection-editor", + "", GIMP_STOCK_TOOL_RECT_SELECT), + ADD_TAB (N_("/Add Tab/Navigation..."), "gimp-navigation-view", + "", GIMP_STOCK_NAVIGATION), + + SEPARATOR ("/Add Tab/---"), + + ADD_TAB (N_("/Add Tab/Colors..."), "gimp-color-editor", + "", GTK_STOCK_SELECT_COLOR), ADD_TAB (N_("/Add Tab/Brushes..."), "gimp-brush-grid", "", GIMP_STOCK_TOOL_PAINTBRUSH), ADD_TAB (N_("/Add Tab/Patterns..."), "gimp-pattern-grid", @@ -1415,17 +1466,11 @@ static GimpItemFactoryEntry dialogs_entries[] = "", GIMP_STOCK_TOOL_BLEND), ADD_TAB (N_("/Add Tab/Palettes..."), "gimp-palette-list", "", GTK_STOCK_SELECT_COLOR), - ADD_TAB (N_("/Add Tab/Indexed Palette..."), "gimp-indexed-palette", - "", GTK_STOCK_SELECT_COLOR), ADD_TAB (N_("/Add Tab/Buffers..."), "gimp-buffer-list", "", GTK_STOCK_PASTE), SEPARATOR ("/Add Tab/---"), - ADD_TAB (N_("/Add Tab/Selection Editor..."), "gimp-selection-editor", - "", GIMP_STOCK_TOOL_RECT_SELECT), - ADD_TAB (N_("/Add Tab/Navigation..."), "gimp-navigation-view", - "", GIMP_STOCK_NAVIGATION), ADD_TAB (N_("/Add Tab/Images..."), "gimp-image-list", NULL, NULL), ADD_TAB (N_("/Add Tab/Document History..."), "gimp-document-history", "", GTK_STOCK_OPEN), diff --git a/app/menus/menus.c b/app/menus/menus.c index 417863e9f1..c4a22ba705 100644 --- a/app/menus/menus.c +++ b/app/menus/menus.c @@ -147,7 +147,7 @@ static GimpItemFactoryEntry toolbox_entries[] = /* /File/Dialogs */ - { { N_("/File/Dialogs/Layers, Channels & Paths..."), "L", + { { N_("/File/Dialogs/Layers, Channels & Paths..."), NULL, dialogs_create_lc_cmd_callback, 0 }, NULL, "file/dialogs/layers_and_channels.html", NULL }, @@ -167,6 +167,41 @@ static GimpItemFactoryEntry toolbox_entries[] = SEPARATOR ("/File/Dialogs/---"), + { { N_("/File/Dialogs/Layers..."), "L", + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-layer-list", + NULL, NULL }, + { { N_("/File/Dialogs/Channels..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-channel-list", + NULL, NULL }, + { { N_("/File/Dialogs/Paths..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-vectors-list", + NULL, NULL }, + { { N_("/File/Dialogs/Indexed Palette..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-indexed-palette", + "file/dialogs/indexed_palette.html", NULL }, + { { N_("/File/Dialogs/Selection Editor..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_TOOL_RECT_SELECT }, + "gimp-selection-editor", + NULL, NULL }, + { { N_("/File/Dialogs/Navigation..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_NAVIGATION }, + "gimp-navigation-view", + NULL, NULL }, + + SEPARATOR ("/File/Dialogs/---"), + + { { N_("/File/Dialogs/Colors..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-color-editor", + NULL, NULL }, { { N_("/File/Dialogs/Brushes..."), "B", dialogs_create_dockable_cmd_callback, 0, "", GIMP_STOCK_TOOL_PAINTBRUSH }, @@ -187,11 +222,6 @@ static GimpItemFactoryEntry toolbox_entries[] = "", GTK_STOCK_SELECT_COLOR }, "gimp-palette-list", "file/dialogs/palette_selection.html", NULL }, - { { N_("/File/Dialogs/Indexed Palette..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GTK_STOCK_SELECT_COLOR }, - "gimp-indexed-palette", - "file/dialogs/indexed_palette.html", NULL }, { { N_("/File/Dialogs/Buffers..."), "foo", dialogs_create_dockable_cmd_callback, 0, "", GTK_STOCK_PASTE }, @@ -200,16 +230,6 @@ static GimpItemFactoryEntry toolbox_entries[] = SEPARATOR ("/File/Dialogs/---"), - { { N_("/File/Dialogs/Selection Editor..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_TOOL_RECT_SELECT }, - "gimp-selection-editor", - NULL, NULL }, - { { N_("/File/Dialogs/Navigation..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_NAVIGATION }, - "gimp-navigation-view", - NULL, NULL }, { { N_("/File/Dialogs/Images..."), NULL, dialogs_create_dockable_cmd_callback, 0 }, "gimp-image-list", @@ -883,7 +903,7 @@ static GimpItemFactoryEntry image_entries[] = /* /Dialogs */ - { { N_("/Dialogs/Layers, Channels & Paths..."), "L", + { { N_("/Dialogs/Layers, Channels & Paths..."), NULL, dialogs_create_lc_cmd_callback, 0 }, NULL, "dialogs/layers_and_channels.html", NULL }, @@ -903,6 +923,41 @@ static GimpItemFactoryEntry image_entries[] = SEPARATOR ("/Dialogs/---"), + { { N_("/Dialogs/Layers..."), "L", + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-layer-list", + NULL, NULL }, + { { N_("/Dialogs/Channels..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-channel-list", + NULL, NULL }, + { { N_("/Dialogs/Paths..."), NULL, + dialogs_create_dockable_cmd_callback, 0 }, + "gimp-vectors-list", + NULL, NULL }, + { { N_("/Dialogs/Indexed Palette..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-indexed-palette", + "file/dialogs/indexed_palette.html", NULL }, + { { N_("/Dialogs/Selection Editor..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_TOOL_RECT_SELECT }, + "gimp-selection-editor", + NULL, NULL }, + { { N_("/Dialogs/Navigation..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GIMP_STOCK_NAVIGATION }, + "gimp-navigation-view", + NULL, NULL }, + + SEPARATOR ("/Dialogs/---"), + + { { N_("/Dialogs/Colors..."), NULL, + dialogs_create_dockable_cmd_callback, 0, + "", GTK_STOCK_SELECT_COLOR }, + "gimp-color-editor", + NULL, NULL }, { { N_("/Dialogs/Brushes..."), "B", dialogs_create_dockable_cmd_callback, 0, "", GIMP_STOCK_TOOL_PAINTBRUSH }, @@ -923,11 +978,6 @@ static GimpItemFactoryEntry image_entries[] = "", GTK_STOCK_SELECT_COLOR }, "gimp-palette-list", "dialogs/palette_selection.html", NULL }, - { { N_("/Dialogs/Indexed Palette..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GTK_STOCK_SELECT_COLOR }, - "gimp-indexed-palette", - "dialogs/indexed_palette.html", NULL }, { { N_("/Dialogs/Buffers..."), "foo", dialogs_create_dockable_cmd_callback, 0, "", GTK_STOCK_PASTE }, @@ -936,16 +986,6 @@ static GimpItemFactoryEntry image_entries[] = SEPARATOR ("/Dialogs/---"), - { { N_("/Dialogs/Selection Editor..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_TOOL_RECT_SELECT }, - "gimp-selection-editor", - NULL, NULL }, - { { N_("/Dialogs/Navigation..."), NULL, - dialogs_create_dockable_cmd_callback, 0, - "", GIMP_STOCK_NAVIGATION }, - "gimp-navigation-view", - NULL, NULL }, { { N_("/Dialogs/Images..."), NULL, dialogs_create_dockable_cmd_callback, 0 }, "gimp-image-list", @@ -1399,14 +1439,25 @@ static GimpItemFactoryEntry dialogs_entries[] = { { N_("/Select Tab"), NULL, NULL, 0 }, NULL, NULL, NULL }, - ADD_TAB (N_("/Add Tab/Layers..."), "gimp-layer-list", NULL, NULL), - ADD_TAB (N_("/Add Tab/Channels..."), "gimp-channel-list", NULL, NULL), - ADD_TAB (N_("/Add Tab/Paths..."), "gimp-vectors-list", NULL, NULL), ADD_TAB (N_("/Add Tab/Tool Options..."), "gimp-tool-options", "", GIMP_STOCK_TOOL_OPTIONS), SEPARATOR ("/Add Tab/---"), + ADD_TAB (N_("/Add Tab/Layers..."), "gimp-layer-list", NULL, NULL), + ADD_TAB (N_("/Add Tab/Channels..."), "gimp-channel-list", NULL, NULL), + ADD_TAB (N_("/Add Tab/Paths..."), "gimp-vectors-list", NULL, NULL), + ADD_TAB (N_("/Add Tab/Indexed Palette..."), "gimp-indexed-palette", + "", GTK_STOCK_SELECT_COLOR), + ADD_TAB (N_("/Add Tab/Selection Editor..."), "gimp-selection-editor", + "", GIMP_STOCK_TOOL_RECT_SELECT), + ADD_TAB (N_("/Add Tab/Navigation..."), "gimp-navigation-view", + "", GIMP_STOCK_NAVIGATION), + + SEPARATOR ("/Add Tab/---"), + + ADD_TAB (N_("/Add Tab/Colors..."), "gimp-color-editor", + "", GTK_STOCK_SELECT_COLOR), ADD_TAB (N_("/Add Tab/Brushes..."), "gimp-brush-grid", "", GIMP_STOCK_TOOL_PAINTBRUSH), ADD_TAB (N_("/Add Tab/Patterns..."), "gimp-pattern-grid", @@ -1415,17 +1466,11 @@ static GimpItemFactoryEntry dialogs_entries[] = "", GIMP_STOCK_TOOL_BLEND), ADD_TAB (N_("/Add Tab/Palettes..."), "gimp-palette-list", "", GTK_STOCK_SELECT_COLOR), - ADD_TAB (N_("/Add Tab/Indexed Palette..."), "gimp-indexed-palette", - "", GTK_STOCK_SELECT_COLOR), ADD_TAB (N_("/Add Tab/Buffers..."), "gimp-buffer-list", "", GTK_STOCK_PASTE), SEPARATOR ("/Add Tab/---"), - ADD_TAB (N_("/Add Tab/Selection Editor..."), "gimp-selection-editor", - "", GIMP_STOCK_TOOL_RECT_SELECT), - ADD_TAB (N_("/Add Tab/Navigation..."), "gimp-navigation-view", - "", GIMP_STOCK_NAVIGATION), ADD_TAB (N_("/Add Tab/Images..."), "gimp-image-list", NULL, NULL), ADD_TAB (N_("/Add Tab/Document History..."), "gimp-document-history", "", GTK_STOCK_OPEN), diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am index 5cd6216f59..2881746ab1 100644 --- a/app/widgets/Makefile.am +++ b/app/widgets/Makefile.am @@ -33,6 +33,8 @@ libappwidgets_a_sources = \ gimpchannellistitem.h \ gimpchannellistview.c \ gimpchannellistview.h \ + gimpcoloreditor.c \ + gimpcoloreditor.h \ gimpcolormapeditor.c \ gimpcolormapeditor.h \ gimpcolorpanel.c \ diff --git a/app/widgets/gimpcolordialog.c b/app/widgets/gimpcolordialog.c index cdb25fdf9a..79b9202011 100644 --- a/app/widgets/gimpcolordialog.c +++ b/app/widgets/gimpcolordialog.c @@ -369,6 +369,8 @@ color_notebook_new_internal (GimpViewable *viewable, &cnp->rgb, &cnp->hsv, cnp->active_channel); + gimp_color_selector_set_toggles_visible (GIMP_COLOR_SELECTOR (cnp->notebook), + FALSE); gtk_box_pack_start (GTK_BOX (left_vbox), cnp->notebook, TRUE, TRUE, 0); gtk_widget_show (cnp->notebook); @@ -447,6 +449,8 @@ color_notebook_new_internal (GimpViewable *viewable, &cnp->rgb, &cnp->hsv, cnp->active_channel); + gimp_color_selector_set_toggles_visible (GIMP_COLOR_SELECTOR (cnp->scales), + TRUE); gimp_color_selector_set_show_alpha (GIMP_COLOR_SELECTOR (cnp->scales), cnp->show_alpha); gtk_box_pack_start (GTK_BOX (right_vbox), cnp->scales, TRUE, TRUE, 0); @@ -570,18 +574,38 @@ color_notebook_update (ColorNotebook *cnp, return; if (update & UPDATE_NOTEBOOK) - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->notebook), - &cnp->rgb, - &cnp->hsv); + { + g_signal_handlers_block_by_func (G_OBJECT (cnp->notebook), + G_CALLBACK (color_notebook_notebook_changed), + cnp); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->notebook), + &cnp->rgb, + &cnp->hsv); + + g_signal_handlers_unblock_by_func (G_OBJECT (cnp->notebook), + G_CALLBACK (color_notebook_notebook_changed), + cnp); + } if (update & UPDATE_CHANNEL) gimp_color_selector_set_channel (GIMP_COLOR_SELECTOR (cnp->notebook), cnp->active_channel); if (update & UPDATE_SCALES) - gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->scales), - &cnp->rgb, - &cnp->hsv); + { + g_signal_handlers_block_by_func (G_OBJECT (cnp->scales), + G_CALLBACK (color_notebook_scales_changed), + cnp); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (cnp->scales), + &cnp->rgb, + &cnp->hsv); + + g_signal_handlers_unblock_by_func (G_OBJECT (cnp->scales), + G_CALLBACK (color_notebook_scales_changed), + cnp); + } if (update & UPDATE_ORIG_COLOR) gimp_color_area_set_color (GIMP_COLOR_AREA (cnp->orig_color), @@ -670,8 +694,8 @@ color_notebook_switch_page (GtkWidget *widget, set_channel = (GIMP_COLOR_SELECTOR_GET_CLASS (notebook->cur_page)->set_channel != NULL); - gimp_color_scales_set_toggles_sensitive (GIMP_COLOR_SCALES (cnp->scales), - set_channel); + gimp_color_selector_set_toggles_sensitive (GIMP_COLOR_SELECTOR (cnp->scales), + set_channel); } diff --git a/app/widgets/gimpcoloreditor.c b/app/widgets/gimpcoloreditor.c new file mode 100644 index 0000000000..26bfcf00f3 --- /dev/null +++ b/app/widgets/gimpcoloreditor.c @@ -0,0 +1,563 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimpcoloreditor.c + * Copyright (C) 2002 Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include "libgimpcolor/gimpcolor.h" +#include "libgimpwidgets/gimpwidgets.h" + +#include "widgets-types.h" + +#include "core/gimpcontext.h" + +#include "gimpcoloreditor.h" + +#include "libgimp/gimpintl.h" + + +static void gimp_color_editor_class_init (GimpColorEditorClass *klass); +static void gimp_color_editor_init (GimpColorEditor *editor); + +static void gimp_color_editor_destroy (GtkObject *object); + +static void gimp_color_editor_fg_changed (GimpContext *context, + const GimpRGB *rgb, + GimpColorEditor *editor); +static void gimp_color_editor_bg_changed (GimpContext *context, + const GimpRGB *rgb, + GimpColorEditor *editor); +static void gimp_color_editor_color_changed (GimpColorSelector *selector, + const GimpRGB *rgb, + const GimpHSV *hsv, + GimpColorEditor *editor); +static void gimp_color_editor_area_changed (GimpColorArea *color_area, + GimpColorEditor *editor); +static void gimp_color_editor_tab_toggled (GtkWidget *widget, + GimpColorEditor *editor); +static void gimp_color_editor_fg_bg_toggled (GtkWidget *widget, + GimpColorEditor *editor); +static void gimp_color_editor_color_picked (GtkWidget *widget, + const GimpRGB *rgb, + GimpColorEditor *editor); + + +static GimpEditorClass *parent_class = NULL; + + +GType +gimp_color_editor_get_type (void) +{ + static GType editor_type = 0; + + if (! editor_type) + { + static const GTypeInfo editor_info = + { + sizeof (GimpColorEditorClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_color_editor_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpColorEditor), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_color_editor_init, + }; + + editor_type = g_type_register_static (GIMP_TYPE_EDITOR, + "GimpColorEditor", + &editor_info, 0); + } + + return editor_type; +} + +static void +gimp_color_editor_class_init (GimpColorEditorClass* klass) +{ + GtkObjectClass *object_class; + + object_class = GTK_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->destroy = gimp_color_editor_destroy; +} + +static void +gimp_color_editor_init (GimpColorEditor *editor) +{ + GtkWidget *notebook; + gint content_spacing; + gint button_spacing; + GtkIconSize button_icon_size; + GimpRGB rgb; + GimpHSV hsv; + GList *list; + GSList *group; + + editor->context = NULL; + editor->edit_bg = FALSE; + + gimp_rgba_set (&rgb, 0.0, 0.0, 0.0, 1.0); + gimp_rgb_to_hsv (&rgb, &hsv); + + gtk_widget_style_get (GTK_WIDGET (editor), + "content_spacing", &content_spacing, + "button_spacing", &button_spacing, + "button_icon_size", &button_icon_size, + NULL); + + editor->hbox = gtk_hbox_new (TRUE, button_spacing); + gtk_box_pack_start (GTK_BOX (editor), editor->hbox, FALSE, FALSE, 0); + gtk_widget_show (editor->hbox); + + editor->notebook = gimp_color_selector_new (GIMP_TYPE_COLOR_NOTEBOOK, + &rgb, &hsv, + GIMP_COLOR_SELECTOR_HUE); + gimp_color_selector_set_show_alpha (GIMP_COLOR_SELECTOR (editor->notebook), + FALSE); + gtk_box_pack_start (GTK_BOX (editor), editor->notebook, + TRUE, TRUE, content_spacing); + gtk_widget_show (editor->notebook); + + g_signal_connect (G_OBJECT (editor->notebook), "color_changed", + G_CALLBACK (gimp_color_editor_color_changed), + editor); + + notebook = GIMP_COLOR_NOTEBOOK (editor->notebook)->notebook; + + gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE); + gtk_notebook_set_show_border (GTK_NOTEBOOK (notebook), FALSE); + + gimp_color_notebook_set_has_page (GIMP_COLOR_NOTEBOOK (editor->notebook), + GIMP_TYPE_COLOR_SCALES, TRUE); + + group = NULL; + + for (list = GIMP_COLOR_NOTEBOOK (editor->notebook)->selectors; + list; + list = g_list_next (list)) + { + GimpColorSelector *selector; + GimpColorSelectorClass *selector_class; + GtkWidget *button; + GtkWidget *image; + + selector = GIMP_COLOR_SELECTOR (list->data); + selector_class = GIMP_COLOR_SELECTOR_GET_CLASS (selector); + + button = gtk_radio_button_new (group); + group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE); + gtk_box_pack_start (GTK_BOX (editor->hbox), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + image = gtk_image_new_from_stock (selector_class->stock_id, + GTK_ICON_SIZE_BUTTON); + gtk_container_add (GTK_CONTAINER (button), image); + gtk_widget_show (image); + + if (selector_class->name) + { + gchar *stripped_name; + gchar *p, *q; + + stripped_name = g_strdup (selector_class->name); + + p = q = stripped_name; + + while (*q) + { + if (*q == '_') + q++; + else + *p++ = *q++; + } + + *p = '\0'; + + gimp_help_set_help_data (button, stripped_name, + selector_class->help_page); + + g_free (stripped_name); + } + + g_object_set_data (G_OBJECT (button), "selector", selector); + + g_signal_connect (G_OBJECT (button), "toggled", + G_CALLBACK (gimp_color_editor_tab_toggled), + editor); + } + + /* The color picker */ + { + GtkWidget *button; + + button = gimp_pick_button_new (); + gtk_box_pack_start (GTK_BOX (editor->hbox), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + g_signal_connect (G_OBJECT (button), "color_picked", + G_CALLBACK (gimp_color_editor_color_picked), + editor); + } + + /* FG/BG toggles */ + { + GtkWidget *hbox; + GtkWidget *vbox; + GtkWidget *frame; + gint i; + + static const gchar *labels[] = + { + N_("FG"), N_("BG") + }; + static const gchar *tips[] = + { + N_("Edit Foreground Color"), N_("Edit Background Color") + }; + + hbox = gtk_hbox_new (FALSE, button_spacing); + gtk_box_pack_start (GTK_BOX (editor), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); + + vbox = gtk_vbox_new (FALSE, button_spacing); + gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); + gtk_widget_show (vbox); + + group = NULL; + + for (i = 0; i < G_N_ELEMENTS (labels); i++) + { + GtkWidget *button; + + button = gtk_radio_button_new_with_mnemonic (group, + gettext (labels[i])); + group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + gimp_help_set_help_data (button, gettext (tips[i]), NULL); + + g_object_set_data (G_OBJECT (button), "edit_bg", + GINT_TO_POINTER (i == 1)); + + if ((i == 1) == editor->edit_bg) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); + + g_signal_connect (G_OBJECT (button), "toggled", + G_CALLBACK (gimp_color_editor_fg_bg_toggled), + editor); + } + + frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); + gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + + editor->color_area = gimp_color_area_new (&rgb, GIMP_COLOR_AREA_FLAT, + GDK_BUTTON1_MASK | + GDK_BUTTON2_MASK); + gtk_container_add (GTK_CONTAINER (frame), editor->color_area); + gtk_widget_show (editor->color_area); + + g_signal_connect (G_OBJECT (editor->color_area), "color_changed", + G_CALLBACK (gimp_color_editor_area_changed), + editor); + } +} + +static void +gimp_color_editor_destroy (GtkObject *object) +{ + GimpColorEditor *editor; + + editor = GIMP_COLOR_EDITOR (object); + + if (editor->context) + gimp_color_editor_set_context (editor, NULL); + + GTK_OBJECT_CLASS (parent_class)->destroy (object); +} + + +/* public functions */ + +GtkWidget * +gimp_color_editor_new (GimpContext *context) +{ + GimpColorEditor *editor; + + g_return_val_if_fail (context == NULL || GIMP_IS_CONTEXT (context), NULL); + + editor = g_object_new (GIMP_TYPE_COLOR_EDITOR, NULL); + + if (context) + gimp_color_editor_set_context (editor, context); + + return GTK_WIDGET (editor); +} + +void +gimp_color_editor_set_context (GimpColorEditor *editor, + GimpContext *context) +{ + g_return_if_fail (GIMP_IS_COLOR_EDITOR (editor)); + g_return_if_fail (context == NULL || GIMP_IS_CONTEXT (context)); + + if (context == editor->context) + return; + + if (editor->context) + { + g_signal_handlers_disconnect_by_func (G_OBJECT (editor->context), + gimp_color_editor_fg_changed, + editor); + g_signal_handlers_disconnect_by_func (G_OBJECT (editor->context), + gimp_color_editor_bg_changed, + editor); + + g_object_unref (editor->context); + editor->context = NULL; + } + + if (context) + { + GimpRGB rgb; + + editor->context = g_object_ref (context); + + g_signal_connect (G_OBJECT (editor->context), "foreground_changed", + G_CALLBACK (gimp_color_editor_fg_changed), + editor); + g_signal_connect (G_OBJECT (editor->context), "background_changed", + G_CALLBACK (gimp_color_editor_bg_changed), + editor); + + if (editor->edit_bg) + { + gimp_context_get_background (editor->context, &rgb); + gimp_color_editor_bg_changed (editor->context, &rgb, editor); + } + else + { + gimp_context_get_foreground (editor->context, &rgb); + gimp_color_editor_fg_changed (editor->context, &rgb, editor); + } + } +} + + +/* public functions */ + +static void +gimp_color_editor_fg_changed (GimpContext *context, + const GimpRGB *rgb, + GimpColorEditor *editor) +{ + if (! editor->edit_bg) + { + GimpHSV hsv; + + gimp_rgb_to_hsv (rgb, &hsv); + + g_signal_handlers_block_by_func (G_OBJECT (editor->notebook), + gimp_color_editor_color_changed, + editor); + g_signal_handlers_block_by_func (G_OBJECT (editor->color_area), + gimp_color_editor_area_changed, + editor); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (editor->notebook), + rgb, &hsv); + gimp_color_area_set_color (GIMP_COLOR_AREA (editor->color_area), rgb); + + g_signal_handlers_unblock_by_func (G_OBJECT (editor->notebook), + gimp_color_editor_color_changed, + editor); + g_signal_handlers_unblock_by_func (G_OBJECT (editor->color_area), + gimp_color_editor_area_changed, + editor); + } +} + +static void +gimp_color_editor_bg_changed (GimpContext *context, + const GimpRGB *rgb, + GimpColorEditor *editor) +{ + if (editor->edit_bg) + { + GimpHSV hsv; + + gimp_rgb_to_hsv (rgb, &hsv); + + g_signal_handlers_block_by_func (G_OBJECT (editor->notebook), + gimp_color_editor_color_changed, + editor); + g_signal_handlers_block_by_func (G_OBJECT (editor->color_area), + gimp_color_editor_area_changed, + editor); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (editor->notebook), + rgb, &hsv); + gimp_color_area_set_color (GIMP_COLOR_AREA (editor->color_area), rgb); + + g_signal_handlers_unblock_by_func (G_OBJECT (editor->notebook), + gimp_color_editor_color_changed, + editor); + g_signal_handlers_unblock_by_func (G_OBJECT (editor->color_area), + gimp_color_editor_area_changed, + editor); + } +} + +static void +gimp_color_editor_color_changed (GimpColorSelector *selector, + const GimpRGB *rgb, + const GimpHSV *hsv, + GimpColorEditor *editor) +{ + if (editor->context) + { + if (editor->edit_bg) + { + g_signal_handlers_block_by_func (G_OBJECT (editor->context), + gimp_color_editor_bg_changed, + editor); + + gimp_context_set_background (editor->context, rgb); + + g_signal_handlers_unblock_by_func (G_OBJECT (editor->context), + gimp_color_editor_bg_changed, + editor); + } + else + { + g_signal_handlers_block_by_func (G_OBJECT (editor->context), + gimp_color_editor_fg_changed, + editor); + + gimp_context_set_foreground (editor->context, rgb); + + g_signal_handlers_unblock_by_func (G_OBJECT (editor->context), + gimp_color_editor_fg_changed, + editor); + } + } + + g_signal_handlers_block_by_func (G_OBJECT (editor->color_area), + gimp_color_editor_area_changed, + editor); + + gimp_color_area_set_color (GIMP_COLOR_AREA (editor->color_area), rgb); + + g_signal_handlers_unblock_by_func (G_OBJECT (editor->color_area), + gimp_color_editor_area_changed, + editor); +} + +static void +gimp_color_editor_area_changed (GimpColorArea *color_area, + GimpColorEditor *editor) +{ + GimpRGB rgb; + GimpHSV hsv; + + gimp_color_area_get_color (color_area, &rgb); + gimp_rgb_to_hsv (&rgb, &hsv); + + gimp_color_selector_set_color (GIMP_COLOR_SELECTOR (editor->notebook), + &rgb, &hsv); +} + +static void +gimp_color_editor_tab_toggled (GtkWidget *widget, + GimpColorEditor *editor) +{ + if (GTK_TOGGLE_BUTTON (widget)->active) + { + GtkWidget *selector; + + selector = g_object_get_data (G_OBJECT (widget), "selector"); + + if (selector) + { + GtkWidget *notebook; + gint page_num; + + notebook = GIMP_COLOR_NOTEBOOK (editor->notebook)->notebook; + + page_num = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), selector); + + if (page_num >= 0) + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), page_num); + } + } +} + +static void +gimp_color_editor_fg_bg_toggled (GtkWidget *widget, + GimpColorEditor *editor) +{ + if (GTK_TOGGLE_BUTTON (widget)->active) + { + gboolean edit_bg; + + edit_bg = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), + "edit_bg")); + + if (edit_bg != editor->edit_bg) + { + editor->edit_bg = edit_bg; + + if (editor->context) + { + GimpRGB rgb; + + if (edit_bg) + { + gimp_context_get_background (editor->context, &rgb); + gimp_color_editor_bg_changed (editor->context, &rgb, editor); + } + else + { + gimp_context_get_foreground (editor->context, &rgb); + gimp_color_editor_fg_changed (editor->context, &rgb, editor); + } + } + } + } +} + +static void +gimp_color_editor_color_picked (GtkWidget *widget, + const GimpRGB *rgb, + GimpColorEditor *editor) +{ + gimp_color_area_set_color (GIMP_COLOR_AREA (editor->color_area), rgb); +} diff --git a/app/widgets/gimpcoloreditor.h b/app/widgets/gimpcoloreditor.h new file mode 100644 index 0000000000..60bf0e561e --- /dev/null +++ b/app/widgets/gimpcoloreditor.h @@ -0,0 +1,64 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimpcoloreditor.h + * Copyright (C) 2002 Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __GIMP_COLOR_EDITOR_H__ +#define __GIMP_COLOR_EDITOR_H__ + + +#include "gimpeditor.h" + + +#define GIMP_TYPE_COLOR_EDITOR (gimp_color_editor_get_type ()) +#define GIMP_COLOR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_COLOR_EDITOR, GimpColorEditor)) +#define GIMP_COLOR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_EDITOR, GimpColorEditorClass)) +#define GIMP_IS_COLOR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_EDITOR)) +#define GIMP_IS_COLOR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_COLOR_EDITOR)) +#define GIMP_COLOR_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_COLOR_EDITOR, GimpColorEditorClass)) + + +typedef struct _GimpColorEditorClass GimpColorEditorClass; + +struct _GimpColorEditor +{ + GimpEditor parent_instance; + + GimpContext *context; + gboolean edit_bg; + + GtkWidget *hbox; + GtkWidget *notebook; + GtkWidget *color_area; +}; + +struct _GimpColorEditorClass +{ + GimpEditorClass parent_class; +}; + + +GType gimp_color_editor_get_type (void) G_GNUC_CONST; + +GtkWidget * gimp_color_editor_new (GimpContext *context); +void gimp_color_editor_set_context (GimpColorEditor *editor, + GimpContext *context); + + +#endif /* __GIMP_COLOR_EDITOR_H__ */ diff --git a/app/widgets/widgets-types.h b/app/widgets/widgets-types.h index 2de5144ed3..e41c267452 100644 --- a/app/widgets/widgets-types.h +++ b/app/widgets/widgets-types.h @@ -55,6 +55,7 @@ typedef struct _GimpMenuItem GimpMenuItem; typedef struct _GimpEnumMenu GimpEnumMenu; typedef struct _GimpEditor GimpEditor; +typedef struct _GimpColorEditor GimpColorEditor; typedef struct _GimpColormapEditor GimpColormapEditor; typedef struct _GimpDataEditor GimpDataEditor; typedef struct _GimpBrushEditor GimpBrushEditor; diff --git a/libgimpwidgets/gimpcolornotebook.c b/libgimpwidgets/gimpcolornotebook.c index a135103766..79224ba383 100644 --- a/libgimpwidgets/gimpcolornotebook.c +++ b/libgimpwidgets/gimpcolornotebook.c @@ -41,6 +41,10 @@ static void gimp_color_notebook_init (GimpColorNotebook *notebook); static void gimp_color_notebook_finalize (GObject *object); +static void gimp_color_notebook_togg_visible (GimpColorSelector *selector, + gboolean visible); +static void gimp_color_notebook_togg_sensitive (GimpColorSelector *selector, + gboolean sensitive); static void gimp_color_notebook_set_show_alpha (GimpColorSelector *selector, gboolean show_alpha); static void gimp_color_notebook_set_color (GimpColorSelector *selector, @@ -105,13 +109,15 @@ gimp_color_notebook_class_init (GimpColorNotebookClass *klass) parent_class = g_type_class_peek_parent (klass); - object_class->finalize = gimp_color_notebook_finalize; + object_class->finalize = gimp_color_notebook_finalize; - selector_class->name = "Notebook"; - selector_class->help_page = "notebook.html"; - selector_class->set_show_alpha = gimp_color_notebook_set_show_alpha; - selector_class->set_color = gimp_color_notebook_set_color; - selector_class->set_channel = gimp_color_notebook_set_channel; + selector_class->name = "Notebook"; + selector_class->help_page = "notebook.html"; + selector_class->set_toggles_visible = gimp_color_notebook_togg_visible; + selector_class->set_toggles_sensitive = gimp_color_notebook_togg_sensitive; + selector_class->set_show_alpha = gimp_color_notebook_set_show_alpha; + selector_class->set_color = gimp_color_notebook_set_color; + selector_class->set_channel = gimp_color_notebook_set_channel; } static void @@ -200,6 +206,42 @@ gimp_color_notebook_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static void +gimp_color_notebook_togg_visible (GimpColorSelector *selector, + gboolean visible) +{ + GimpColorNotebook *notebook; + GimpColorSelector *child; + GList *list; + + notebook = GIMP_COLOR_NOTEBOOK (selector); + + for (list = notebook->selectors; list; list = g_list_next (list)) + { + child = (GimpColorSelector *) list->data; + + gimp_color_selector_set_toggles_visible (child, visible); + } +} + +static void +gimp_color_notebook_togg_sensitive (GimpColorSelector *selector, + gboolean sensitive) +{ + GimpColorNotebook *notebook; + GimpColorSelector *child; + GList *list; + + notebook = GIMP_COLOR_NOTEBOOK (selector); + + for (list = notebook->selectors; list; list = g_list_next (list)) + { + child = (GimpColorSelector *) list->data; + + gimp_color_selector_set_toggles_sensitive (child, sensitive); + } +} + static void gimp_color_notebook_set_show_alpha (GimpColorSelector *selector, gboolean show_alpha) @@ -322,3 +364,79 @@ gimp_color_notebook_channel_changed (GimpColorSelector *page, gimp_color_selector_channel_changed (selector); } + + +/* public function */ + +GtkWidget * +gimp_color_notebook_set_has_page (GimpColorNotebook *notebook, + GType page_type, + gboolean has_page) +{ + GimpColorSelector *selector; + GimpColorSelector *page; + GtkWidget *label; + GList *list; + + g_return_val_if_fail (GIMP_IS_COLOR_NOTEBOOK (notebook), NULL); + g_return_val_if_fail (g_type_is_a (page_type, GIMP_TYPE_COLOR_SELECTOR), + NULL); + g_return_val_if_fail (! g_type_is_a (page_type, GIMP_TYPE_COLOR_NOTEBOOK), + NULL); + + selector = GIMP_COLOR_SELECTOR (notebook); + + for (list = notebook->selectors; list; list = g_list_next (list)) + { + page = GIMP_COLOR_SELECTOR (list->data); + + if (G_TYPE_FROM_INSTANCE (page) == page_type) + { + if (has_page) + return GTK_WIDGET (page); + + gtk_container_remove (GTK_CONTAINER (notebook->notebook), + GTK_WIDGET (page)); + notebook->selectors = g_list_remove (notebook->selectors, page); + + if (! notebook->selectors) + notebook->cur_page = NULL; + + return NULL; + } + } + + if (! has_page) + return NULL; + + page = GIMP_COLOR_SELECTOR (gimp_color_selector_new (page_type, + &selector->rgb, + &selector->hsv, + selector->channel)); + + if (! page) + return NULL; + + gimp_color_selector_set_show_alpha (page, selector->show_alpha); + + label = gtk_label_new_with_mnemonic (GIMP_COLOR_SELECTOR_GET_CLASS (page)->name); + + gtk_notebook_append_page (GTK_NOTEBOOK (notebook->notebook), + GTK_WIDGET (page), label); + + if (! notebook->cur_page) + notebook->cur_page = page; + + notebook->selectors = g_list_append (notebook->selectors, page); + + gtk_widget_show (GTK_WIDGET (page)); + + g_signal_connect (G_OBJECT (page), "color_changed", + G_CALLBACK (gimp_color_notebook_color_changed), + notebook); + g_signal_connect (G_OBJECT (page), "channel_changed", + G_CALLBACK (gimp_color_notebook_channel_changed), + notebook); + + return GTK_WIDGET (page); +} diff --git a/libgimpwidgets/gimpcolornotebook.h b/libgimpwidgets/gimpcolornotebook.h index 7a3540b3e8..f7c4cd6ee5 100644 --- a/libgimpwidgets/gimpcolornotebook.h +++ b/libgimpwidgets/gimpcolornotebook.h @@ -57,7 +57,11 @@ struct _GimpColorNotebookClass }; -GType gimp_color_notebook_get_type (void) G_GNUC_CONST; +GType gimp_color_notebook_get_type (void) G_GNUC_CONST; + +GtkWidget * gimp_color_notebook_set_has_page (GimpColorNotebook *notebook, + GType page_type, + gboolean has_page); G_END_DECLS diff --git a/libgimpwidgets/gimpcolorscales.c b/libgimpwidgets/gimpcolorscales.c index 8a6a5dadd9..06ea90846a 100644 --- a/libgimpwidgets/gimpcolorscales.c +++ b/libgimpwidgets/gimpcolorscales.c @@ -69,6 +69,11 @@ static void gimp_color_scales_init (GimpColorScales *scales); static void gimp_color_scales_finalize (GObject *object); +static void gimp_color_scales_togg_sensitive (GimpColorSelector *selector, + gboolean sensitive); +static void gimp_color_scales_togg_visible (GimpColorSelector *selector, + gboolean visible); + static void gimp_color_scales_set_show_alpha (GimpColorSelector *selector, gboolean show_alpha); static void gimp_color_scales_set_color (GimpColorSelector *selector, @@ -132,40 +137,37 @@ gimp_color_scales_class_init (GimpColorScalesClass *klass) object_class->finalize = gimp_color_scales_finalize; - selector_class->name = "Scales"; - selector_class->help_page = "scales.html"; - selector_class->set_show_alpha = gimp_color_scales_set_show_alpha; - selector_class->set_color = gimp_color_scales_set_color; - selector_class->set_channel = gimp_color_scales_set_channel; + selector_class->name = "Scales"; + selector_class->help_page = "scales.html"; + selector_class->stock_id = GIMP_STOCK_TOOL_OPTIONS; + selector_class->set_toggles_visible = gimp_color_scales_togg_visible; + selector_class->set_toggles_sensitive = gimp_color_scales_togg_sensitive; + selector_class->set_show_alpha = gimp_color_scales_set_show_alpha; + selector_class->set_color = gimp_color_scales_set_color; + selector_class->set_channel = gimp_color_scales_set_channel; } static void gimp_color_scales_init (GimpColorScales *scales) { - GtkWidget *table; - GtkWidget *hbox; - GtkWidget *label; - GSList *group; - gint i; + GimpColorSelector *selector; + GtkWidget *table; + GtkWidget *hbox; + GtkWidget *label; + GSList *group; + gint i; - static gchar *toggle_titles[] = + static const gchar *toggle_titles[] = { - /* Hue */ N_("_H"), - /* Saturation */ N_("_S"), - /* Value */ N_("_V"), - /* Red */ N_("_R"), - /* Green */ N_("_G"), - /* Blue */ N_("_B"), - /* Alpha */ N_("_A") }; - static gchar *slider_tips[7] = + static const gchar *slider_tips[7] = { N_("Hue"), N_("Saturation"), @@ -179,14 +181,22 @@ gimp_color_scales_init (GimpColorScales *scales) static gdouble slider_max_vals[] = { 360, 100, 100, 255, 255, 255, 100 }; static gdouble slider_incs[] = { 30, 10, 10, 16, 16, 16, 10 }; + selector = GIMP_COLOR_SELECTOR (scales); + + /* don't needs the toggles for our own operation */ + selector->toggles_visible = FALSE; + table = gtk_table_new (7, 4, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 1); + gtk_table_set_row_spacing (GTK_TABLE (table), 2, 3); /* hsv <-> rgb */ + gtk_table_set_row_spacing (GTK_TABLE (table), 5, 3); /* rgb <-> alpha */ gtk_table_set_col_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); gtk_box_pack_start (GTK_BOX (scales), table, FALSE, FALSE, 0); gtk_widget_show (table); group = NULL; + for (i = 0; i < 7; i++) { if (i == 6) @@ -196,14 +206,16 @@ gimp_color_scales_init (GimpColorScales *scales) else { scales->toggles[i] = gtk_radio_button_new (group); - - gimp_help_set_help_data (scales->toggles[i], - gettext (slider_tips[i]), NULL); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (scales->toggles[i])); gtk_table_attach (GTK_TABLE (table), scales->toggles[i], 0, 1, i, i + 1, GTK_SHRINK, GTK_EXPAND, 0, 0); - gtk_widget_show (scales->toggles[i]); + + if (selector->toggles_visible) + gtk_widget_show (scales->toggles[i]); + + gimp_help_set_help_data (scales->toggles[i], + gettext (slider_tips[i]), NULL); g_signal_connect (G_OBJECT (scales->toggles[i]), "toggled", G_CALLBACK (gimp_color_scales_toggle_update), @@ -267,6 +279,37 @@ gimp_color_scales_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static void +gimp_color_scales_togg_sensitive (GimpColorSelector *selector, + gboolean sensitive) +{ + GimpColorScales *scales; + gint i; + + scales = GIMP_COLOR_SCALES (selector); + + for (i = 0; i < 6; i++) + gtk_widget_set_sensitive (scales->toggles[i], sensitive); +} + +static void +gimp_color_scales_togg_visible (GimpColorSelector *selector, + gboolean visible) +{ + GimpColorScales *scales; + gint i; + + scales = GIMP_COLOR_SCALES (selector); + + for (i = 0; i < 6; i++) + { + if (visible) + gtk_widget_show (scales->toggles[i]); + else + gtk_widget_hide (scales->toggles[i]); + } +} + static void gimp_color_scales_set_show_alpha (GimpColorSelector *selector, gboolean show_alpha) @@ -331,24 +374,6 @@ gimp_color_scales_set_channel (GimpColorSelector *selector, } } - -/* public functions */ - -void -gimp_color_scales_set_toggles_sensitive (GimpColorScales *scales, - gboolean sensitive) -{ - gint i; - - g_return_if_fail (GIMP_IS_COLOR_SCALES (scales)); - - for (i = 0; i < 6; i++) - gtk_widget_set_sensitive (scales->toggles[i], sensitive); -} - - -/* private functions */ - static void gimp_color_scales_update_scales (GimpColorScales *scales, gint skip) diff --git a/libgimpwidgets/gimpcolorscales.h b/libgimpwidgets/gimpcolorscales.h index 14eb5e0cbd..87c86a4b3c 100644 --- a/libgimpwidgets/gimpcolorscales.h +++ b/libgimpwidgets/gimpcolorscales.h @@ -34,10 +34,7 @@ G_BEGIN_DECLS #define GIMP_IS_COLOR_SCALES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_SCALES)) -GType gimp_color_scales_get_type (void) G_GNUC_CONST; - -void gimp_color_scales_set_toggles_sensitive (GimpColorScales *scales, - gboolean sensitive); +GType gimp_color_scales_get_type (void) G_GNUC_CONST; G_END_DECLS diff --git a/libgimpwidgets/gimpcolorselect.c b/libgimpwidgets/gimpcolorselect.c index defc2fcd6c..c4d3849a3b 100644 --- a/libgimpwidgets/gimpcolorselect.c +++ b/libgimpwidgets/gimpcolorselect.c @@ -39,6 +39,8 @@ #include "gimpcolorselector.h" #include "gimpcolorselect.h" +#include "gimphelpui.h" +#include "gimpstock.h" #include "libgimp/libgimp-intl.h" @@ -93,6 +95,8 @@ struct _GimpColorSelect { GimpColorSelector parent_instance; + GtkWidget *toggle_box; + GtkWidget *xy_color; GtkWidget *z_color; @@ -126,50 +130,57 @@ struct _ColorSelectFill }; -static void gimp_color_select_class_init (GimpColorSelectClass *klass); -static void gimp_color_select_init (GimpColorSelect *select); +static void gimp_color_select_class_init (GimpColorSelectClass *klass); +static void gimp_color_select_init (GimpColorSelect *select); -static void gimp_color_select_finalize (GObject *object); +static void gimp_color_select_finalize (GObject *object); -static void gimp_color_select_set_color (GimpColorSelector *selector, - const GimpRGB *rgb, - const GimpHSV *hsv); -static void gimp_color_select_set_channel (GimpColorSelector *selector, - GimpColorSelectorChannel channel); +static void gimp_color_select_togg_visible (GimpColorSelector *selector, + gboolean visible); +static void gimp_color_select_togg_sensitive (GimpColorSelector *selector, + gboolean sensitive); +static void gimp_color_select_set_color (GimpColorSelector *selector, + const GimpRGB *rgb, + const GimpHSV *hsv); +static void gimp_color_select_set_channel (GimpColorSelector *selector, + GimpColorSelectorChannel channel); -static void gimp_color_select_update (GimpColorSelect *select, - ColorSelectUpdateType type); -static void gimp_color_select_update_values (GimpColorSelect *select); -static void gimp_color_select_update_pos (GimpColorSelect *select); +static void gimp_color_select_channel_toggled (GtkWidget *widget, + GimpColorSelect *select); + +static void gimp_color_select_update (GimpColorSelect *select, + ColorSelectUpdateType type); +static void gimp_color_select_update_values (GimpColorSelect *select); +static void gimp_color_select_update_pos (GimpColorSelect *select); #if 0 -static void gimp_color_select_drop_color (GtkWidget *widget, - const GimpRGB *color, - gpointer data); +static void gimp_color_select_drop_color (GtkWidget *widget, + const GimpRGB *color, + gpointer data); #endif -static gboolean gimp_color_select_xy_expose (GtkWidget *widget, - GdkEventExpose *eevent, - GimpColorSelect *select); -static gboolean gimp_color_select_xy_events (GtkWidget *widget, - GdkEvent *event, - GimpColorSelect *select); -static gboolean gimp_color_select_z_expose (GtkWidget *widget, - GdkEventExpose *eevent, - GimpColorSelect *select); -static gboolean gimp_color_select_z_events (GtkWidget *widet, - GdkEvent *event, - GimpColorSelect *select); +static gboolean gimp_color_select_xy_expose (GtkWidget *widget, + GdkEventExpose *eevent, + GimpColorSelect *select); +static gboolean gimp_color_select_xy_events (GtkWidget *widget, + GdkEvent *event, + GimpColorSelect *select); +static gboolean gimp_color_select_z_expose (GtkWidget *widget, + GdkEventExpose *eevent, + GimpColorSelect *select); +static gboolean gimp_color_select_z_events (GtkWidget *widet, + GdkEvent *event, + GimpColorSelect *select); -static void gimp_color_select_image_fill (GtkWidget *widget, - ColorSelectFillType fill_type, - const GimpHSV *hsv, - const GimpRGB *rgb); +static void gimp_color_select_image_fill (GtkWidget *widget, + ColorSelectFillType fill_type, + const GimpHSV *hsv, + const GimpRGB *rgb); -static void gimp_color_select_draw_z_marker (GimpColorSelect *select, - GdkRectangle *clip); -static void gimp_color_select_draw_xy_marker (GimpColorSelect *select, - GdkRectangle *clip); +static void gimp_color_select_draw_z_marker (GimpColorSelect *select, + GdkRectangle *clip); +static void gimp_color_select_draw_xy_marker (GimpColorSelect *select, + GdkRectangle *clip); static void color_select_update_red (ColorSelectFill *csf); static void color_select_update_green (ColorSelectFill *csf); @@ -248,10 +259,13 @@ gimp_color_select_class_init (GimpColorSelectClass *klass) object_class->finalize = gimp_color_select_finalize; - selector_class->name = "GI_MP"; - selector_class->help_page = "built_in.html"; - selector_class->set_color = gimp_color_select_set_color; - selector_class->set_channel = gimp_color_select_set_channel; + selector_class->name = "GI_MP"; + selector_class->help_page = "built_in.html"; + selector_class->stock_id = GIMP_STOCK_WILBER; + selector_class->set_toggles_visible = gimp_color_select_togg_visible; + selector_class->set_toggles_sensitive = gimp_color_select_togg_sensitive; + selector_class->set_color = gimp_color_select_set_color; + selector_class->set_channel = gimp_color_select_set_channel; } static void @@ -259,6 +273,7 @@ gimp_color_select_init (GimpColorSelect *select) { GtkWidget *main_hbox; GtkWidget *hbox; + GtkWidget *hbox2; GtkWidget *xy_frame; GtkWidget *z_frame; @@ -300,10 +315,14 @@ gimp_color_select_init (GimpColorSelect *select) select); #endif + hbox2 = gtk_hbox_new (FALSE, 2); + gtk_box_pack_start (GTK_BOX (hbox), hbox2, TRUE, FALSE, 0); + gtk_widget_show (hbox2); + /* The z component preview */ z_frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (z_frame), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (hbox), z_frame, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox2), z_frame, FALSE, FALSE, 0); gtk_widget_show (z_frame); select->z_color = gtk_preview_new (GTK_PREVIEW_COLOR); @@ -319,6 +338,58 @@ gimp_color_select_init (GimpColorSelect *select) g_signal_connect (G_OBJECT (select->z_color), "event", G_CALLBACK (gimp_color_select_z_events), select); + + select->toggle_box = gtk_vbox_new (FALSE, 2); + gtk_box_pack_start (GTK_BOX (hbox2), select->toggle_box, FALSE, FALSE, 0); + gtk_widget_show (select->toggle_box); + + /* channel toggles */ + { + GimpColorSelectorChannel channel; + GSList *group = NULL; + + static const gchar *labels[] = + { + N_("_H"), N_("_S"), N_("_V"), N_("_R"), N_("_G"), N_("_B") + }; + static const gchar *tips[7] = + { + N_("Hue"), + N_("Saturation"), + N_("Value"), + N_("Red"), + N_("Green"), + N_("Blue"), + N_("Alpha") + }; + + for (channel = GIMP_COLOR_SELECTOR_HUE; + channel < GIMP_COLOR_SELECTOR_ALPHA; + channel++) + { + GtkWidget *button; + + button = gtk_radio_button_new_with_mnemonic (group, + gettext (labels[channel])); + group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE); + gtk_box_pack_start (GTK_BOX (select->toggle_box), button, + TRUE, TRUE, 0); + gtk_widget_show (button); + + g_object_set_data (G_OBJECT (button), "channel", + GINT_TO_POINTER (channel)); + + if (channel == GIMP_COLOR_SELECTOR_HUE) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); + + gimp_help_set_help_data (button, gettext (tips[channel]), NULL); + + g_signal_connect (G_OBJECT (button), "toggled", + G_CALLBACK (gimp_color_select_channel_toggled), + select); + } + } } static void @@ -337,6 +408,31 @@ gimp_color_select_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static void +gimp_color_select_togg_visible (GimpColorSelector *selector, + gboolean visible) +{ + GimpColorSelect *select; + + select = GIMP_COLOR_SELECT (selector); + + if (visible) + gtk_widget_show (select->toggle_box); + else + gtk_widget_hide (select->toggle_box); +} + +static void +gimp_color_select_togg_sensitive (GimpColorSelector *selector, + gboolean sensitive) +{ + GimpColorSelect *select; + + select = GIMP_COLOR_SELECT (selector); + + gtk_widget_set_sensitive (select->toggle_box, sensitive); +} + static void gimp_color_select_set_color (GimpColorSelector *selector, const GimpRGB *rgb, @@ -346,10 +442,8 @@ gimp_color_select_set_color (GimpColorSelector *selector, select = GIMP_COLOR_SELECT (selector); - gimp_color_select_update_pos (select); - - gimp_color_select_update (select, UPDATE_Z_COLOR); - gimp_color_select_update (select, UPDATE_XY_COLOR); + gimp_color_select_update (select, + UPDATE_POS | UPDATE_XY_COLOR | UPDATE_Z_COLOR); } static void @@ -396,8 +490,29 @@ gimp_color_select_set_channel (GimpColorSelector *selector, break; } - gimp_color_select_update (select, UPDATE_POS); - gimp_color_select_update (select, UPDATE_Z_COLOR | UPDATE_XY_COLOR); + gimp_color_select_update (select, + UPDATE_POS | UPDATE_Z_COLOR | UPDATE_XY_COLOR); +} + +static void +gimp_color_select_channel_toggled (GtkWidget *widget, + GimpColorSelect *select) +{ + if (GTK_TOGGLE_BUTTON (widget)->active) + { + GimpColorSelector *selector; + GimpColorSelectorChannel channel; + + selector = GIMP_COLOR_SELECTOR (select); + + channel = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), + "channel")); + + selector->channel = channel; + gimp_color_select_set_channel (selector, channel); + + gimp_color_selector_channel_changed (selector); + } } static void @@ -555,12 +670,10 @@ gimp_color_select_drop_color (GtkWidget *widget, select->rgb = *color; gimp_color_select_update_hsv_values (select); - gimp_color_select_update_pos (select); - gimp_color_select_update (select, UPDATE_Z_COLOR); - gimp_color_select_update (select, UPDATE_XY_COLOR); - - gimp_color_select_update (select, UPDATE_CALLER); + gimp_color_select_update (select, + UPDATE_POS | UPDATE_XY_COLOR | UPDATE_Z_COLOR | + UPDATE_CALLER); } #endif diff --git a/libgimpwidgets/gimpcolorselector.c b/libgimpwidgets/gimpcolorselector.c index 91d99c6abe..cf96f91bd0 100644 --- a/libgimpwidgets/gimpcolorselector.c +++ b/libgimpwidgets/gimpcolorselector.c @@ -106,17 +106,25 @@ gimp_color_selector_class_init (GimpColorSelectorClass *klass) G_TYPE_NONE, 1, G_TYPE_INT); - klass->set_show_alpha = NULL; - klass->set_color = NULL; - klass->set_channel = NULL; - klass->color_changed = NULL; - klass->channel_changed = NULL; + klass->name = "EEK"; + klass->help_page = "help_yourself.html"; + klass->stock_id = GTK_STOCK_SELECT_COLOR; + + klass->set_toggles_visible = NULL; + klass->set_toggles_sensitive = NULL; + klass->set_show_alpha = NULL; + klass->set_color = NULL; + klass->set_channel = NULL; + klass->color_changed = NULL; + klass->channel_changed = NULL; } static void gimp_color_selector_init (GimpColorSelector *selector) { - selector->show_alpha = TRUE; + selector->toggles_visible = TRUE; + selector->toggles_sensitive = TRUE; + selector->show_alpha = TRUE; gimp_rgba_set (&selector->rgb, 0.0, 0.0, 0.0, 1.0); gimp_rgb_to_hsv (&selector->rgb, &selector->hsv); @@ -145,6 +153,44 @@ gimp_color_selector_new (GType selector_type, return GTK_WIDGET (selector); } +void +gimp_color_selector_set_toggles_visible (GimpColorSelector *selector, + gboolean visible) +{ + g_return_if_fail (GIMP_IS_COLOR_SELECTOR (selector)); + + if (selector->toggles_visible != visible) + { + GimpColorSelectorClass *selector_class; + + selector->toggles_visible = visible ? TRUE : FALSE; + + selector_class = GIMP_COLOR_SELECTOR_GET_CLASS (selector); + + if (selector_class->set_toggles_visible) + selector_class->set_toggles_visible (selector, visible); + } +} + +void +gimp_color_selector_set_toggles_sensitive (GimpColorSelector *selector, + gboolean sensitive) +{ + g_return_if_fail (GIMP_IS_COLOR_SELECTOR (selector)); + + if (selector->toggles_sensitive != sensitive) + { + GimpColorSelectorClass *selector_class; + + selector->toggles_sensitive = sensitive ? TRUE : FALSE; + + selector_class = GIMP_COLOR_SELECTOR_GET_CLASS (selector); + + if (selector_class->set_toggles_sensitive) + selector_class->set_toggles_sensitive (selector, sensitive); + } +} + void gimp_color_selector_set_show_alpha (GimpColorSelector *selector, gboolean show_alpha) @@ -153,11 +199,14 @@ gimp_color_selector_set_show_alpha (GimpColorSelector *selector, if (show_alpha != selector->show_alpha) { + GimpColorSelectorClass *selector_class; + selector->show_alpha = show_alpha ? TRUE : FALSE; - if (GIMP_COLOR_SELECTOR_GET_CLASS (selector)->set_show_alpha) - GIMP_COLOR_SELECTOR_GET_CLASS (selector)->set_show_alpha (selector, - show_alpha); + selector_class = GIMP_COLOR_SELECTOR_GET_CLASS (selector); + + if (selector_class->set_show_alpha) + selector_class->set_show_alpha (selector, show_alpha); } } @@ -166,6 +215,8 @@ gimp_color_selector_set_color (GimpColorSelector *selector, const GimpRGB *rgb, const GimpHSV *hsv) { + GimpColorSelectorClass *selector_class; + g_return_if_fail (GIMP_IS_COLOR_SELECTOR (selector)); g_return_if_fail (rgb != NULL); g_return_if_fail (hsv != NULL); @@ -173,8 +224,12 @@ gimp_color_selector_set_color (GimpColorSelector *selector, selector->rgb = *rgb; selector->hsv = *hsv; - if (GIMP_COLOR_SELECTOR_GET_CLASS (selector)->set_color) - GIMP_COLOR_SELECTOR_GET_CLASS (selector)->set_color (selector, rgb, hsv); + selector_class = GIMP_COLOR_SELECTOR_GET_CLASS (selector); + + if (selector_class->set_color) + selector_class->set_color (selector, rgb, hsv); + + gimp_color_selector_color_changed (selector); } void @@ -185,11 +240,16 @@ gimp_color_selector_set_channel (GimpColorSelector *selector, if (channel != selector->channel) { + GimpColorSelectorClass *selector_class; + selector->channel = channel; - if (GIMP_COLOR_SELECTOR_GET_CLASS (selector)->set_channel) - GIMP_COLOR_SELECTOR_GET_CLASS (selector)->set_channel (selector, - channel); + selector_class = GIMP_COLOR_SELECTOR_GET_CLASS (selector); + + if (selector_class->set_channel) + selector_class->set_channel (selector, channel); + + gimp_color_selector_channel_changed (selector); } } diff --git a/libgimpwidgets/gimpcolorselector.h b/libgimpwidgets/gimpcolorselector.h index 672d03002c..0d75d32d62 100644 --- a/libgimpwidgets/gimpcolorselector.h +++ b/libgimpwidgets/gimpcolorselector.h @@ -49,6 +49,8 @@ struct _GimpColorSelector { GtkVBox parent_instance; + gboolean toggles_visible; + gboolean toggles_sensitive; gboolean show_alpha; GimpRGB rgb; @@ -63,41 +65,50 @@ struct _GimpColorSelectorClass const gchar *name; const gchar *help_page; + const gchar *stock_id; /* virtual functions */ - void (* set_show_alpha) (GimpColorSelector *selector, - gboolean show_alpha); - void (* set_color) (GimpColorSelector *selector, - const GimpRGB *rgb, - const GimpHSV *hsv); - void (* set_channel) (GimpColorSelector *selector, - GimpColorSelectorChannel channel); + void (* set_toggles_visible) (GimpColorSelector *selector, + gboolean visible); + void (* set_toggles_sensitive) (GimpColorSelector *selector, + gboolean sensitive); + void (* set_show_alpha) (GimpColorSelector *selector, + gboolean show_alpha); + void (* set_color) (GimpColorSelector *selector, + const GimpRGB *rgb, + const GimpHSV *hsv); + void (* set_channel) (GimpColorSelector *selector, + GimpColorSelectorChannel channel); /* signals */ - void (* color_changed) (GimpColorSelector *selector, - const GimpRGB *rgb, - const GimpHSV *hsv); - void (* channel_changed) (GimpColorSelector *selector, - GimpColorSelectorChannel channel); + void (* color_changed) (GimpColorSelector *selector, + const GimpRGB *rgb, + const GimpHSV *hsv); + void (* channel_changed) (GimpColorSelector *selector, + GimpColorSelectorChannel channel); }; -GType gimp_color_selector_get_type (void) G_GNUC_CONST; -GtkWidget * gimp_color_selector_new (GType selector_type, - const GimpRGB *rgb, - const GimpHSV *hsv, - GimpColorSelectorChannel channel); +GType gimp_color_selector_get_type (void) G_GNUC_CONST; +GtkWidget * gimp_color_selector_new (GType selector_type, + const GimpRGB *rgb, + const GimpHSV *hsv, + GimpColorSelectorChannel channel); -void gimp_color_selector_set_show_alpha (GimpColorSelector *selector, - gboolean show_alpha); -void gimp_color_selector_set_color (GimpColorSelector *selector, - const GimpRGB *rgb, - const GimpHSV *hsv); -void gimp_color_selector_set_channel (GimpColorSelector *selector, - GimpColorSelectorChannel channel); +void gimp_color_selector_set_toggles_visible (GimpColorSelector *selector, + gboolean visible); +void gimp_color_selector_set_toggles_sensitive (GimpColorSelector *selector, + gboolean sensitive); +void gimp_color_selector_set_show_alpha (GimpColorSelector *selector, + gboolean show_alpha); +void gimp_color_selector_set_color (GimpColorSelector *selector, + const GimpRGB *rgb, + const GimpHSV *hsv); +void gimp_color_selector_set_channel (GimpColorSelector *selector, + GimpColorSelectorChannel channel); -void gimp_color_selector_color_changed (GimpColorSelector *selector); -void gimp_color_selector_channel_changed (GimpColorSelector *selector); +void gimp_color_selector_color_changed (GimpColorSelector *selector); +void gimp_color_selector_channel_changed (GimpColorSelector *selector); G_END_DECLS diff --git a/libgimpwidgets/gimpstock.c b/libgimpwidgets/gimpstock.c index 0c68f84c02..350b074974 100644 --- a/libgimpwidgets/gimpstock.c +++ b/libgimpwidgets/gimpstock.c @@ -130,6 +130,7 @@ static GtkStockItem gimp_stock_items[] = { GIMP_STOCK_COLOR_PICKER_BLACK, NULL, 0, 0, "gimp14-libgimp" }, { GIMP_STOCK_COLOR_PICKER_GRAY, NULL, 0, 0, "gimp14-libgimp" }, { GIMP_STOCK_COLOR_PICKER_WHITE, NULL, 0, 0, "gimp14-libgimp" }, + { GIMP_STOCK_COLOR_TRIANGLE, NULL, 0, 0, "gimp14-libgimp" }, { GIMP_STOCK_CHAR_PICKER, NULL, 0, 0, "gimp14-libgimp" }, { GIMP_STOCK_LETTER_SPACING, N_("L_etter Spacing"), 0, 0, "gimp14-libgimp" }, @@ -208,6 +209,7 @@ gimp_stock_button_pixbufs[] = { GIMP_STOCK_COLOR_PICKER_BLACK, stock_color_picker_black_18 }, { GIMP_STOCK_COLOR_PICKER_GRAY, stock_color_picker_gray_18 }, { GIMP_STOCK_COLOR_PICKER_WHITE, stock_color_picker_white_18 }, + { GIMP_STOCK_COLOR_TRIANGLE, stock_color_triangle_16 }, { GIMP_STOCK_CHAR_PICKER, stock_char_picker_22 }, { GIMP_STOCK_LETTER_SPACING, stock_letter_spacing_22 }, diff --git a/libgimpwidgets/gimpstock.h b/libgimpwidgets/gimpstock.h index 454e066b99..17d482032b 100644 --- a/libgimpwidgets/gimpstock.h +++ b/libgimpwidgets/gimpstock.h @@ -56,6 +56,7 @@ G_BEGIN_DECLS #define GIMP_STOCK_COLOR_PICKER_BLACK "gimp-color-picker-black" #define GIMP_STOCK_COLOR_PICKER_GRAY "gimp-color-picker-gray" #define GIMP_STOCK_COLOR_PICKER_WHITE "gimp-color-picker-white" +#define GIMP_STOCK_COLOR_TRIANGLE "gimp-color-triangle" #define GIMP_STOCK_CHAR_PICKER "gimp-char-picker" #define GIMP_STOCK_LETTER_SPACING "gimp-letter-spacing" diff --git a/modules/colorsel_triangle.c b/modules/colorsel_triangle.c index bca5d537ae..f1e9fbe3d3 100644 --- a/modules/colorsel_triangle.c +++ b/modules/colorsel_triangle.c @@ -178,6 +178,7 @@ colorsel_triangle_class_init (ColorselTriangleClass *klass) selector_class->name = _("_Triangle"); selector_class->help_page = "triangle.html"; + selector_class->stock_id = GIMP_STOCK_COLOR_TRIANGLE; selector_class->set_color = colorsel_triangle_set_color; } diff --git a/modules/colorsel_water.c b/modules/colorsel_water.c index ab1726573b..858b44cc94 100644 --- a/modules/colorsel_water.c +++ b/modules/colorsel_water.c @@ -174,6 +174,7 @@ colorsel_water_class_init (ColorselWaterClass *klass) selector_class->name = _("_Watercolor"); selector_class->help_page = "watercolor.html"; + selector_class->stock_id = GIMP_STOCK_TOOL_PAINTBRUSH; selector_class->set_color = colorsel_water_set_color; } diff --git a/themes/Default/images/Makefile.am b/themes/Default/images/Makefile.am index 857f15b9ad..100c65b535 100644 --- a/themes/Default/images/Makefile.am +++ b/themes/Default/images/Makefile.am @@ -46,6 +46,7 @@ STOCK_BUTTON_IMAGES = \ stock-color-picker-black-18.png \ stock-color-picker-gray-18.png \ stock-color-picker-white-18.png \ + stock-color-triangle-16.png \ stock-duplicate-16.png \ stock-edit-16.png \ stock-eye-20.png \ diff --git a/themes/Default/images/stock-color-triangle-16.png b/themes/Default/images/stock-color-triangle-16.png new file mode 100644 index 0000000000000000000000000000000000000000..21791ed0b01fc7a669cadff27e22c2073747fd3e GIT binary patch literal 844 zcmV-S1GD^zP)1vj?ELJ^ z&Y4Y6(p0J?#Z8J7QVMIJO{Fasf)Rv*tHGF%6v3k2cx40irdJ|*(?Tw!LNV=KF9a!t zKvxFRmpJ~k`6)=tD(zkm?n_Nk@>S!Po}vK z9O*z^?Rxl2W-eXg*pLl>D*W@ALUX#L{ZWbO;&v<*jI)#9tk>Cpm?EezrVlGN~c`_c>_x>vJkEiO=egIK;TZT^03;X>`8J~ zC)!Vjapl*(KKb|1kgOd%c%{>qIjmM0Z*7x`<8n$JWn!jIpIt=EDx|gnzV7N8*fPyC zzT;34f}p$mO!M^V0RSb%c2O`Jyh37Zl5zDlM*1HR)i>Z~=a!PDUG*JD^M$|{f{GAY zGnu^FnQy?&2NCsM@3L2|(W`r~F^p0Jn2yB`l`Lzt(uRE@@EwQkWOB4|?b;!LVTGCp z8?|0^HUIQ0VMI~1$GU#m7lOyO&6Z{1JI+(1Mo-V>Fq_qAGkHK=r_k_VcN!TlYuY(K zkr?zHhmvjc$TTV0HkEdYst|)s*FBe(#68%(UZ4?MBfIW%^wko-d}(2e@mAeVeePQOKXi@F?Z7l?#N)JV zo4RQdv`^hM`Po^s?x>qTHVRbh*ZJY!#~YK&q{4^;a)EJa@qd!z7V^LXVJc$MSblzV zm^~MBWWtE^p~sxea7)IYfw$twxeVcXk1!K)aZe8T9`^s}#5$EiSZC17#!A>U=^DA%q(zy1Wi Wv@Llyd*O=!0000