[gimp/goat-invasion] app: move GimpLevelTool's color picking stuff into GimpImageMapTool
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/goat-invasion] app: move GimpLevelTool's color picking stuff into GimpImageMapTool
- Date: Mon, 30 Apr 2012 20:14:27 +0000 (UTC)
commit cfa754c730437a479d8a9371cc0aef3e575daaca
Author: Michael Natterer <mitch gimp org>
Date: Mon Apr 30 22:13:50 2012 +0200
app: move GimpLevelTool's color picking stuff into GimpImageMapTool
so all subclasses can use it.
app/tools/gimpimagemaptool.c | 105 +++++++++++++++++++++++++++++++++++++++-
app/tools/gimpimagemaptool.h | 11 ++++
app/tools/gimplevelstool.c | 112 ++++++++----------------------------------
app/tools/gimplevelstool.h | 2 -
4 files changed, 136 insertions(+), 94 deletions(-)
---
diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c
index 8c38124..17ed719 100644
--- a/app/tools/gimpimagemaptool.c
+++ b/app/tools/gimpimagemaptool.c
@@ -99,8 +99,16 @@ static gboolean gimp_image_map_tool_pick_color (GimpColorTool *color_too
const Babl **sample_format,
GimpRGB *color,
gint *color_index);
+static void gimp_image_map_tool_color_picked (GimpColorTool *color_tool,
+ GimpColorPickState pick_state,
+ const Babl *sample_format,
+ const GimpRGB *color,
+ gint color_index);
+
static void gimp_image_map_tool_map (GimpImageMapTool *im_tool);
static void gimp_image_map_tool_dialog (GimpImageMapTool *im_tool);
+static void gimp_image_map_tool_dialog_unmap (GtkWidget *dialog,
+ GimpImageMapTool *im_tool);
static void gimp_image_map_tool_reset (GimpImageMapTool *im_tool);
static void gimp_image_map_tool_flush (GimpImageMap *image_map,
@@ -168,6 +176,7 @@ gimp_image_map_tool_class_init (GimpImageMapToolClass *klass)
tool_class->options_notify = gimp_image_map_tool_options_notify;
color_tool_class->pick = gimp_image_map_tool_pick_color;
+ color_tool_class->picked = gimp_image_map_tool_color_picked;
klass->dialog_desc = NULL;
klass->settings_name = NULL;
@@ -288,6 +297,11 @@ gimp_image_map_tool_initialize (GimpTool *tool,
return FALSE;
}
+ if (image_map_tool->active_picker)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (image_map_tool->active_picker),
+ FALSE);
+
+
/* set display so the dialog can be hidden on display destruction */
tool->display = display;
@@ -558,6 +572,25 @@ gimp_image_map_tool_pick_color (GimpColorTool *color_tool,
}
static void
+gimp_image_map_tool_color_picked (GimpColorTool *color_tool,
+ GimpColorPickState pick_state,
+ const Babl *sample_format,
+ const GimpRGB *color,
+ gint color_index)
+{
+ GimpImageMapTool *tool = GIMP_IMAGE_MAP_TOOL (color_tool);
+ gpointer identifier;
+
+ identifier = g_object_get_data (G_OBJECT (tool->active_picker),
+ "picker-identifier");
+
+ GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->color_picked (tool,
+ identifier,
+ sample_format,
+ color);
+}
+
+static void
gimp_image_map_tool_map (GimpImageMapTool *tool)
{
GimpDisplayShell *shell = gimp_display_get_shell (GIMP_TOOL (tool)->display);
@@ -594,6 +627,19 @@ static void
gimp_image_map_tool_dialog (GimpImageMapTool *tool)
{
GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->dialog (tool);
+
+ g_signal_connect (tool->dialog, "unmap",
+ G_CALLBACK (gimp_image_map_tool_dialog_unmap),
+ tool);
+}
+
+static void
+gimp_image_map_tool_dialog_unmap (GtkWidget *dialog,
+ GimpImageMapTool *tool)
+{
+ if (tool->active_picker)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tool->active_picker),
+ FALSE);
}
static void
@@ -815,7 +861,6 @@ gimp_image_map_tool_dialog_get_vbox (GimpImageMapTool *tool)
return tool->main_vbox;
}
-
GtkSizeGroup *
gimp_image_map_tool_dialog_get_label_group (GimpImageMapTool *tool)
{
@@ -826,3 +871,61 @@ gimp_image_map_tool_dialog_get_label_group (GimpImageMapTool *tool)
return tool->label_group;
}
+
+static void
+gimp_image_map_tool_color_picker_toggled (GtkWidget *widget,
+ GimpImageMapTool *tool)
+{
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+ {
+ if (tool->active_picker == widget)
+ return;
+
+ if (tool->active_picker)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tool->active_picker),
+ FALSE);
+
+ tool->active_picker = widget;
+
+ gimp_color_tool_enable (GIMP_COLOR_TOOL (tool),
+ GIMP_COLOR_TOOL_GET_OPTIONS (tool));
+ }
+ else if (tool->active_picker == widget)
+ {
+ tool->active_picker = NULL;
+ gimp_color_tool_disable (GIMP_COLOR_TOOL (tool));
+ }
+}
+
+GtkWidget *
+gimp_image_map_tool_add_color_picker (GimpImageMapTool *tool,
+ gpointer identifier,
+ const gchar *stock_id,
+ const gchar *help_id)
+{
+ GtkWidget *button;
+ GtkWidget *image;
+
+ g_return_val_if_fail (GIMP_IS_IMAGE_MAP_TOOL (tool), NULL);
+ g_return_val_if_fail (stock_id != NULL, NULL);
+
+ button = g_object_new (GTK_TYPE_TOGGLE_BUTTON,
+ "draw-indicator", FALSE,
+ NULL);
+
+ image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON);
+ gtk_misc_set_padding (GTK_MISC (image), 2, 2);
+ gtk_container_add (GTK_CONTAINER (button), image);
+ gtk_widget_show (image);
+
+ if (help_id)
+ gimp_help_set_help_data (button, help_id, NULL);
+
+ g_object_set_data (G_OBJECT (button), "picker-identifier", identifier);
+
+ g_signal_connect (button, "toggled",
+ G_CALLBACK (gimp_image_map_tool_color_picker_toggled),
+ tool);
+
+ return button;
+}
diff --git a/app/tools/gimpimagemaptool.h b/app/tools/gimpimagemaptool.h
index 6b9d540..bd7713b 100644
--- a/app/tools/gimpimagemaptool.h
+++ b/app/tools/gimpimagemaptool.h
@@ -52,6 +52,7 @@ struct _GimpImageMapTool
GtkWidget *main_vbox;
GtkWidget *settings_box;
GtkSizeGroup *label_group;
+ GtkWidget *active_picker;
};
struct _GimpImageMapToolClass
@@ -87,6 +88,11 @@ struct _GimpImageMapToolClass
gboolean (* settings_export) (GimpImageMapTool *image_map_tool,
const gchar *filename,
GError **error);
+
+ void (* color_picked) (GimpImageMapTool *image_map_tool,
+ gpointer identifier,
+ const Babl *sample_format,
+ const GimpRGB *color);
};
@@ -105,5 +111,10 @@ void gimp_image_map_tool_edit_as (GimpImageMapTool *image_map_tool,
GtkWidget * gimp_image_map_tool_dialog_get_vbox (GimpImageMapTool *tool);
GtkSizeGroup * gimp_image_map_tool_dialog_get_label_group (GimpImageMapTool *tool);
+GtkWidget * gimp_image_map_tool_add_color_picker (GimpImageMapTool *tool,
+ gpointer identifier,
+ const gchar *stock_id,
+ const gchar *help_id);
+
#endif /* __GIMP_IMAGE_MAP_TOOL_H__ */
diff --git a/app/tools/gimplevelstool.c b/app/tools/gimplevelstool.c
index c5c940d..7c3d9b9 100644
--- a/app/tools/gimplevelstool.c
+++ b/app/tools/gimplevelstool.c
@@ -72,17 +72,9 @@ static gboolean gimp_levels_tool_initialize (GimpTool *tool,
GimpDisplay *display,
GError **error);
-static void gimp_levels_tool_color_picked (GimpColorTool *color_tool,
- GimpColorPickState pick_state,
- const Babl *sample_format,
- const GimpRGB *color,
- gint color_index);
-
static GeglNode * gimp_levels_tool_get_operation (GimpImageMapTool *im_tool,
GObject **config);
static void gimp_levels_tool_dialog (GimpImageMapTool *im_tool);
-static void gimp_levels_tool_dialog_unmap (GtkWidget *dialog,
- GimpLevelsTool *tool);
static void gimp_levels_tool_reset (GimpImageMapTool *im_tool);
static gboolean gimp_levels_tool_settings_import(GimpImageMapTool *im_tool,
const gchar *filename,
@@ -90,11 +82,15 @@ static gboolean gimp_levels_tool_settings_import(GimpImageMapTool *im_tool,
static gboolean gimp_levels_tool_settings_export(GimpImageMapTool *im_tool,
const gchar *filename,
GError **error);
+static void gimp_levels_tool_color_picked (GimpImageMapTool *im_tool,
+ gpointer identifier,
+ const Babl *sample_format,
+ const GimpRGB *color);
-static void gimp_levels_tool_export_setup (GimpSettingsBox *settings_box,
+static void gimp_levels_tool_export_setup (GimpSettingsBox *settings_box,
GtkFileChooserDialog *dialog,
- gboolean export,
- GimpLevelsTool *tool);
+ gboolean export,
+ GimpLevelsTool *tool);
static void gimp_levels_tool_config_notify (GObject *object,
GParamSpec *pspec,
GimpLevelsTool *tool);
@@ -123,8 +119,6 @@ static void levels_low_output_changed (GtkAdjustment *adjustment
GimpLevelsTool *tool);
static void levels_high_output_changed (GtkAdjustment *adjustment,
GimpLevelsTool *tool);
-static void levels_input_picker_toggled (GtkWidget *widget,
- GimpLevelsTool *tool);
static void levels_to_curves_callback (GtkWidget *widget,
GimpLevelsTool *tool);
@@ -155,17 +149,14 @@ gimp_levels_tool_register (GimpToolRegisterCallback callback,
static void
gimp_levels_tool_class_init (GimpLevelsToolClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
- GimpColorToolClass *color_tool_class = GIMP_COLOR_TOOL_CLASS (klass);
- GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
+ GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass);
object_class->finalize = gimp_levels_tool_finalize;
tool_class->initialize = gimp_levels_tool_initialize;
- color_tool_class->picked = gimp_levels_tool_color_picked;
-
im_tool_class->dialog_desc = _("Adjust Color Levels");
im_tool_class->settings_name = "levels";
im_tool_class->import_dialog_title = _("Import Levels");
@@ -176,6 +167,7 @@ gimp_levels_tool_class_init (GimpLevelsToolClass *klass)
im_tool_class->reset = gimp_levels_tool_reset;
im_tool_class->settings_import = gimp_levels_tool_settings_import;
im_tool_class->settings_export = gimp_levels_tool_settings_export;
+ im_tool_class->color_picked = gimp_levels_tool_color_picked;
}
static void
@@ -212,10 +204,6 @@ gimp_levels_tool_initialize (GimpTool *tool,
gimp_config_reset (GIMP_CONFIG (l_tool->config));
- if (l_tool->active_picker)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l_tool->active_picker),
- FALSE);
-
if (! GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error))
{
return FALSE;
@@ -266,8 +254,6 @@ static GtkWidget *
gimp_levels_tool_color_picker_new (GimpLevelsTool *tool,
guint value)
{
- GtkWidget *button;
- GtkWidget *image;
const gchar *stock_id;
const gchar *help;
@@ -289,24 +275,10 @@ gimp_levels_tool_color_picker_new (GimpLevelsTool *tool,
return NULL;
}
- button = g_object_new (GTK_TYPE_TOGGLE_BUTTON,
- "draw-indicator", FALSE,
- NULL);
-
- image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON);
- gtk_misc_set_padding (GTK_MISC (image), 2, 2);
- gtk_container_add (GTK_CONTAINER (button), image);
- gtk_widget_show (image);
-
- gimp_help_set_help_data (button, help, NULL);
-
- g_object_set_data (G_OBJECT (button),
- "pick-value", GUINT_TO_POINTER (value));
- g_signal_connect (button, "toggled",
- G_CALLBACK (levels_input_picker_toggled),
- tool);
-
- return button;
+ return gimp_image_map_tool_add_color_picker (GIMP_IMAGE_MAP_TOOL (tool),
+ GUINT_TO_POINTER (value),
+ stock_id,
+ help);
}
static void
@@ -642,10 +614,6 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- g_signal_connect (image_map_tool->dialog, "unmap",
- G_CALLBACK (gimp_levels_tool_dialog_unmap),
- tool);
-
button = gimp_stock_button_new (GIMP_STOCK_TOOL_CURVES,
_("Edit these Settings as Curves"));
gtk_box_pack_start (GTK_BOX (main_vbox), button, FALSE, FALSE, 0);
@@ -660,15 +628,6 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
}
static void
-gimp_levels_tool_dialog_unmap (GtkWidget *dialog,
- GimpLevelsTool *tool)
-{
- if (tool->active_picker)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tool->active_picker),
- FALSE);
-}
-
-static void
gimp_levels_tool_reset (GimpImageMapTool *image_map_tool)
{
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (image_map_tool);
@@ -1111,31 +1070,6 @@ levels_high_output_changed (GtkAdjustment *adjustment,
}
static void
-levels_input_picker_toggled (GtkWidget *widget,
- GimpLevelsTool *tool)
-{
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
- {
- if (tool->active_picker == widget)
- return;
-
- if (tool->active_picker)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tool->active_picker),
- FALSE);
-
- tool->active_picker = widget;
-
- gimp_color_tool_enable (GIMP_COLOR_TOOL (tool),
- GIMP_COLOR_TOOL_GET_OPTIONS (tool));
- }
- else if (tool->active_picker == widget)
- {
- tool->active_picker = NULL;
- gimp_color_tool_disable (GIMP_COLOR_TOOL (tool));
- }
-}
-
-static void
levels_input_adjust_by_color (GimpLevelsConfig *config,
guint value,
GimpHistogramChannel channel,
@@ -1158,17 +1092,13 @@ levels_input_adjust_by_color (GimpLevelsConfig *config,
}
static void
-gimp_levels_tool_color_picked (GimpColorTool *color_tool,
- GimpColorPickState pick_state,
- const Babl *sample_format,
- const GimpRGB *color,
- gint color_index)
+gimp_levels_tool_color_picked (GimpImageMapTool *color_tool,
+ gpointer identifier,
+ const Babl *sample_format,
+ const GimpRGB *color)
{
- GimpLevelsTool *tool = GIMP_LEVELS_TOOL (color_tool);
- guint value;
-
- value = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (tool->active_picker),
- "pick-value"));
+ GimpLevelsTool *tool = GIMP_LEVELS_TOOL (color_tool);
+ guint value = GPOINTER_TO_UINT (identifier);
if (value & PICK_ALL_CHANNELS &&
gimp_babl_format_get_base_type (sample_format) == GIMP_RGB)
diff --git a/app/tools/gimplevelstool.h b/app/tools/gimplevelstool.h
index a436718..99edac5 100644
--- a/app/tools/gimplevelstool.h
+++ b/app/tools/gimplevelstool.h
@@ -58,8 +58,6 @@ struct _GimpLevelsTool
GtkAdjustment *low_output;
GtkAdjustment *high_output;
- GtkWidget *active_picker;
-
/* export dialog */
gboolean export_old_format;
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]