[gimp] Bug 783680 - Allow to hide color models in GimpColorScales.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 783680 - Allow to hide color models in GimpColorScales.
- Date: Sun, 21 Jan 2018 18:03:13 +0000 (UTC)
commit 4d84925db09aff638980c093d47cec2deeae33fa
Author: Jehan <jehan girinstud io>
Date: Sun Jan 21 01:51:18 2018 +0100
Bug 783680 - Allow to hide color models in GimpColorScales.
GimpColorSelect now using color models tabs too.
libgimpwidgets/gimpcolorselect.c | 184 ++++++++++++++++++++++++++++---------
1 files changed, 139 insertions(+), 45 deletions(-)
---
diff --git a/libgimpwidgets/gimpcolorselect.c b/libgimpwidgets/gimpcolorselect.c
index ba8fb15..b99ae47 100644
--- a/libgimpwidgets/gimpcolorselect.c
+++ b/libgimpwidgets/gimpcolorselect.c
@@ -129,7 +129,7 @@ struct _GimpColorSelect
{
GimpColorSelector parent_instance;
- GtkWidget *toggle_box;
+ GtkWidget *toggle_box[3];
GtkWidget *xy_color;
ColorSelectFillType xy_color_fill;
@@ -270,6 +270,13 @@ static void gimp_color_select_notify_config (GimpColorConfig *config,
const GParamSpec *pspec,
GimpColorSelect *select);
+static void gimp_color_select_switch_page (GtkNotebook *notebook,
+ GtkWidget *page,
+ gint num,
+ GimpColorSelect *select);
+static void gimp_color_select_model_changed (GimpColorSelector *selector,
+ GimpColorSelectorModel model,
+ GtkNotebook *color_model_notebook);
G_DEFINE_TYPE (GimpColorSelect, gimp_color_select, GIMP_TYPE_COLOR_SELECTOR)
@@ -336,10 +343,16 @@ gimp_color_select_class_init (GimpColorSelectClass *klass)
static void
gimp_color_select_init (GimpColorSelect *select)
{
- GimpColorSelector *selector = GIMP_COLOR_SELECTOR (select);
- GtkWidget *hbox;
- GtkWidget *frame;
-
+ GimpColorSelector *selector = GIMP_COLOR_SELECTOR (select);
+ GtkWidget *hbox;
+ GtkWidget *frame;
+ GtkWidget *notebook;
+ GEnumClass *model_class;
+ GEnumClass *channel_class;
+ GimpEnumDesc *enum_desc;
+ GimpColorSelectorModel model;
+
+ /* Default values. */
select->z_color_fill = COLOR_SELECT_HUE;
select->xy_color_fill = COLOR_SELECT_SATURATION_VALUE;
select->drag_mode = DRAG_NONE;
@@ -406,53 +419,98 @@ gimp_color_select_init (GimpColorSelect *select)
G_CALLBACK (gimp_color_select_z_events),
select);
- select->toggle_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
- gtk_box_pack_start (GTK_BOX (hbox), select->toggle_box, FALSE, FALSE, 0);
- gtk_widget_show (select->toggle_box);
+ notebook = gtk_notebook_new ();
+ gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_RIGHT);
+ gtk_widget_show (notebook);
+ gtk_box_pack_start (GTK_BOX (hbox), notebook, FALSE, FALSE, 0);
- /* channel toggles */
- {
- GimpColorSelectorChannel channel;
- GEnumClass *enum_class;
- GSList *group = NULL;
+ model_class = g_type_class_ref (GIMP_TYPE_COLOR_SELECTOR_MODEL);
+ channel_class = g_type_class_ref (GIMP_TYPE_COLOR_SELECTOR_CHANNEL);
- enum_class = g_type_class_ref (GIMP_TYPE_COLOR_SELECTOR_CHANNEL);
-
- for (channel = GIMP_COLOR_SELECTOR_HUE;
- channel <= GIMP_COLOR_SELECTOR_LCH_HUE;
- channel++)
- {
- GimpEnumDesc *enum_desc;
- GtkWidget *button;
-
- if (channel == GIMP_COLOR_SELECTOR_ALPHA)
- continue;
+ for (model = GIMP_COLOR_SELECTOR_RGB;
+ model <= GIMP_COLOR_SELECTOR_HSV;
+ model++)
+ {
+ GtkWidget *label;
- enum_desc = gimp_enum_get_desc (enum_class, channel);
+ enum_desc = gimp_enum_get_desc (model_class, model);
- button = gtk_radio_button_new_with_mnemonic (group,
- gettext (enum_desc->value_desc));
- 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);
+ select->toggle_box[model] = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
+ gtk_widget_show (select->toggle_box[model]);
- g_object_set_data (G_OBJECT (button), "channel",
- GINT_TO_POINTER (channel));
+ label = gtk_label_new (gettext (enum_desc->value_desc));
+ gtk_label_set_angle (GTK_LABEL (label), 270.0);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
+ select->toggle_box[model],
+ label);
+ gimp_help_set_help_data (gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook),
+ select->toggle_box[model]),
+ gettext (enum_desc->value_help), NULL);
- if (channel == gimp_color_selector_get_channel (selector))
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+ /* channel toggles */
+ {
+ GimpColorSelectorChannel channel = GIMP_COLOR_SELECTOR_RED;
+ GimpColorSelectorChannel end_channel;
+ GSList *group = NULL;
+
+ switch (model)
+ {
+ case GIMP_COLOR_SELECTOR_RGB:
+ channel = GIMP_COLOR_SELECTOR_RED;
+ break;
+ case GIMP_COLOR_SELECTOR_LCH:
+ channel = GIMP_COLOR_SELECTOR_LCH_LIGHTNESS;
+ break;
+ case GIMP_COLOR_SELECTOR_HSV:
+ channel = GIMP_COLOR_SELECTOR_HUE;
+ break;
+ default:
+ /* Should not happen. */
+ break;
+ }
+ end_channel = channel + 3;
+
+ for (; channel < end_channel; channel++)
+ {
+ GtkWidget *button;
+
+ enum_desc = gimp_enum_get_desc (channel_class, channel);
+
+ button = gtk_radio_button_new_with_mnemonic (group,
+ gettext (enum_desc->value_desc));
+ 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[model]), 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_get_channel (selector))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+
+ gimp_help_set_help_data (button, gettext (enum_desc->value_help), NULL);
+
+ g_signal_connect (button, "toggled",
+ G_CALLBACK (gimp_color_select_channel_toggled),
+ select);
+ }
- gimp_help_set_help_data (button, gettext (enum_desc->value_help), NULL);
+ }
+ }
- g_signal_connect (button, "toggled",
- G_CALLBACK (gimp_color_select_channel_toggled),
- select);
- }
+ g_type_class_unref (model_class);
+ g_type_class_unref (channel_class);
- g_type_class_unref (enum_class);
- }
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook),
+ (gint) gimp_color_selector_get_model (selector));
+ g_signal_connect (notebook, "switch-page",
+ G_CALLBACK (gimp_color_select_switch_page),
+ select);
+ g_signal_connect (select, "model-changed",
+ G_CALLBACK (gimp_color_select_model_changed),
+ notebook);
}
static void
@@ -478,8 +536,12 @@ gimp_color_select_togg_visible (GimpColorSelector *selector,
gboolean visible)
{
GimpColorSelect *select = GIMP_COLOR_SELECT (selector);
+ gint i;
- gtk_widget_set_visible (select->toggle_box, visible);
+ for (i = 0; i < 3; i++)
+ {
+ gtk_widget_set_visible (select->toggle_box[i], visible);
+ }
}
static void
@@ -487,8 +549,12 @@ gimp_color_select_togg_sensitive (GimpColorSelector *selector,
gboolean sensitive)
{
GimpColorSelect *select = GIMP_COLOR_SELECT (selector);
+ gint i;
- gtk_widget_set_sensitive (select->toggle_box, sensitive);
+ for (i = 0; i < 3; i++)
+ {
+ gtk_widget_set_sensitive (select->toggle_box[i], sensitive);
+ }
}
static void
@@ -1948,3 +2014,31 @@ gimp_color_select_notify_config (GimpColorConfig *config,
select->xy_needs_render = TRUE;
select->z_needs_render = TRUE;
}
+
+static void
+gimp_color_select_switch_page (GtkNotebook *notebook,
+ GtkWidget *page,
+ gint num,
+ GimpColorSelect *select)
+{
+ gimp_color_selector_set_model (GIMP_COLOR_SELECTOR (select),
+ (GimpColorSelectorModel) num);
+}
+
+static void
+gimp_color_select_model_changed (GimpColorSelector *selector,
+ GimpColorSelectorModel model,
+ GtkNotebook *color_model_notebook)
+{
+ GimpColorSelect *select = GIMP_COLOR_SELECT (selector);
+ GList *children;
+ GtkButton *button;
+
+ /* Select the first channel. */
+ children = gtk_container_get_children (GTK_CONTAINER (select->toggle_box[model]));
+ button = children->data;
+ g_list_free (children);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+ gtk_notebook_set_current_page (color_model_notebook, (gint) model);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]