[gimp/goat-invasion] app: move GimpLevelTool's color picking stuff into GimpImageMapTool



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]