[gimp] app: allow to specify the workarea of GEGL ops in the GEGL tool GUI



commit 6c5515c676d8d28622d2f34b55104f9e92848512
Author: Michael Natterer <mitch gimp org>
Date:   Sat May 24 01:07:28 2014 +0200

    app: allow to specify the workarea of GEGL ops in the GEGL tool GUI
    
    Add a combo that switches between "selection" and "entire layer".
    Need to find a way to hide that thing when the setting makes no
    difference. Also the combo is generally pretty much experimantal.

 app/core/core-enums.c           |   29 +++++++++++++++++++++++++++++
 app/core/core-enums.h           |   11 +++++++++++
 app/core/gimpimagemap.h         |    7 -------
 app/tools/gimpimagemapoptions.c |   22 ++++++++++++++++++++++
 app/tools/gimpimagemapoptions.h |    7 ++++---
 app/tools/gimpimagemaptool.c    |   30 +++++++++++++++++++++++-------
 6 files changed, 89 insertions(+), 17 deletions(-)
---
diff --git a/app/core/core-enums.c b/app/core/core-enums.c
index 65c8ff2..709aec9 100644
--- a/app/core/core-enums.c
+++ b/app/core/core-enums.c
@@ -1179,6 +1179,35 @@ gimp_dynamics_output_type_get_type (void)
   return type;
 }
 
+GType
+gimp_image_map_region_get_type (void)
+{
+  static const GEnumValue values[] =
+  {
+    { GIMP_IMAGE_MAP_REGION_SELECTION, "GIMP_IMAGE_MAP_REGION_SELECTION", "selection" },
+    { GIMP_IMAGE_MAP_REGION_DRAWABLE, "GIMP_IMAGE_MAP_REGION_DRAWABLE", "drawable" },
+    { 0, NULL, NULL }
+  };
+
+  static const GimpEnumDesc descs[] =
+  {
+    { GIMP_IMAGE_MAP_REGION_SELECTION, NC_("image-map-region", "Use the selection as input"), NULL },
+    { GIMP_IMAGE_MAP_REGION_DRAWABLE, NC_("image-map-region", "Use the entire layer as input"), NULL },
+    { 0, NULL, NULL }
+  };
+
+  static GType type = 0;
+
+  if (G_UNLIKELY (! type))
+    {
+      type = g_enum_register_static ("GimpImageMapRegion", values);
+      gimp_type_set_translation_context (type, "image-map-region");
+      gimp_enum_set_value_descriptions (type, descs);
+    }
+
+  return type;
+}
+
 
 /* Generated data ends here */
 
diff --git a/app/core/core-enums.h b/app/core/core-enums.h
index a6cbc3b..db5bfe5 100644
--- a/app/core/core-enums.h
+++ b/app/core/core-enums.h
@@ -543,6 +543,17 @@ typedef enum  /*< pdb-skip >*/
 } GimpDynamicsOutputType;
 
 
+#define GIMP_TYPE_IMAGE_MAP_REGION (gimp_image_map_region_get_type ())
+
+GType gimp_image_map_region_get_type (void) G_GNUC_CONST;
+
+typedef enum  /*< pdb-skip >*/
+{
+  GIMP_IMAGE_MAP_REGION_SELECTION, /*< desc="Use the selection as input"    >*/
+  GIMP_IMAGE_MAP_REGION_DRAWABLE   /*< desc="Use the entire layer as input" >*/
+} GimpImageMapRegion;
+
+
 /*
  * non-registered enums; register them if needed
  */
diff --git a/app/core/gimpimagemap.h b/app/core/gimpimagemap.h
index b57f84f..c41eb6e 100644
--- a/app/core/gimpimagemap.h
+++ b/app/core/gimpimagemap.h
@@ -22,13 +22,6 @@
 #include "gimpobject.h"
 
 
-typedef enum
-{
-  GIMP_IMAGE_MAP_REGION_SELECTION,
-  GIMP_IMAGE_MAP_REGION_DRAWABLE
-} GimpImageMapRegion;
-
-
 #define GIMP_TYPE_IMAGE_MAP            (gimp_image_map_get_type ())
 #define GIMP_IMAGE_MAP(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_IMAGE_MAP, 
GimpImageMap))
 #define GIMP_IMAGE_MAP_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_IMAGE_MAP, 
GimpImageMapClass))
diff --git a/app/tools/gimpimagemapoptions.c b/app/tools/gimpimagemapoptions.c
index f85659c..8186f8d 100644
--- a/app/tools/gimpimagemapoptions.c
+++ b/app/tools/gimpimagemapoptions.c
@@ -31,6 +31,7 @@ enum
 {
   PROP_0,
   PROP_PREVIEW,
+  PROP_REGION,
   PROP_SETTINGS
 };
 
@@ -65,6 +66,15 @@ gimp_image_map_options_class_init (GimpImageMapOptionsClass *klass)
                                     "preview", NULL,
                                     TRUE,
                                     GIMP_PARAM_STATIC_STRINGS);
+
+  g_object_class_install_property (object_class, PROP_REGION,
+                                   g_param_spec_enum ("region",
+                                                      NULL, NULL,
+                                                      GIMP_TYPE_IMAGE_MAP_REGION,
+                                                      GIMP_IMAGE_MAP_REGION_SELECTION,
+                                                      GIMP_PARAM_READWRITE |
+                                                      G_PARAM_CONSTRUCT));
+
   g_object_class_install_property (object_class, PROP_SETTINGS,
                                    g_param_spec_string ("settings",
                                                         NULL, NULL,
@@ -105,10 +115,16 @@ gimp_image_map_options_set_property (GObject      *object,
     case PROP_PREVIEW:
       options->preview = g_value_get_boolean (value);
       break;
+
+    case PROP_REGION:
+      options->region = g_value_get_enum (value);
+      break;
+
     case PROP_SETTINGS:
       g_free (options->settings);
       options->settings = g_value_dup_string (value);
       break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -128,9 +144,15 @@ gimp_image_map_options_get_property (GObject    *object,
     case PROP_PREVIEW:
       g_value_set_boolean (value, options->preview);
       break;
+
+    case PROP_REGION:
+      g_value_set_enum (value, options->region);
+      break;
+
     case PROP_SETTINGS:
       g_value_set_string (value, options->settings);
       break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
diff --git a/app/tools/gimpimagemapoptions.h b/app/tools/gimpimagemapoptions.h
index d11e99d..55425a3 100644
--- a/app/tools/gimpimagemapoptions.h
+++ b/app/tools/gimpimagemapoptions.h
@@ -34,10 +34,11 @@ typedef struct _GimpToolOptionsClass  GimpImageMapOptionsClass;
 
 struct _GimpImageMapOptions
 {
-  GimpToolOptions  parent_instance;
+  GimpToolOptions     parent_instance;
 
-  gboolean         preview;
-  gchar           *settings;
+  gboolean            preview;
+  GimpImageMapRegion  region;
+  gchar              *settings;
 };
 
 
diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c
index b16e448..8af496a 100644
--- a/app/tools/gimpimagemaptool.c
+++ b/app/tools/gimpimagemaptool.c
@@ -341,6 +341,7 @@ gimp_image_map_tool_initialize (GimpTool     *tool,
     {
       GimpImageMapToolClass *klass;
       GtkWidget             *vbox;
+      GtkWidget             *combo;
       GtkWidget             *toggle;
 
       klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (image_map_tool);
@@ -403,7 +404,7 @@ gimp_image_map_tool_initialize (GimpTool     *tool,
           gtk_widget_show (settings_ui);
         }
 
-      /*  The hack toggle  */
+      /*  The gamma hack toggle  */
       toggle = gtk_check_button_new_with_label ("Gamma hack (temp hack, please ignore)");
       gtk_box_pack_end (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
       gtk_widget_show (toggle);
@@ -416,10 +417,16 @@ gimp_image_map_tool_initialize (GimpTool     *tool,
       toggle = gimp_prop_check_button_new (G_OBJECT (tool_info->tool_options),
                                            "preview",
                                            _("_Preview"));
-
       gtk_box_pack_end (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
       gtk_widget_show (toggle);
 
+      /*  The area combo  */
+      combo = gimp_prop_enum_combo_box_new (G_OBJECT (tool_info->tool_options),
+                                            "region",
+                                            0, 0);
+      gtk_box_pack_end (GTK_BOX (vbox), combo, FALSE, FALSE, 0);
+      gtk_widget_show (combo);
+
       /*  Fill in subclass widgets  */
       gimp_image_map_tool_dialog (image_map_tool);
     }
@@ -527,6 +534,16 @@ gimp_image_map_tool_options_notify (GimpTool         *tool,
           gimp_tool_control_pop_preserve (tool->control);
         }
     }
+  else if (! strcmp (pspec->name, "region") &&
+           image_map_tool->image_map)
+    {
+      gimp_tool_control_push_preserve (tool->control, TRUE);
+
+      gimp_image_map_tool_create_map (image_map_tool);
+      gimp_image_map_tool_preview (image_map_tool);
+
+      gimp_tool_control_pop_preserve (tool->control);
+    }
 }
 
 static gboolean
@@ -698,9 +715,8 @@ gimp_image_map_tool_reset (GimpImageMapTool *tool)
 static void
 gimp_image_map_tool_create_map (GimpImageMapTool *tool)
 {
-  GimpToolInfo *tool_info;
-
-  g_return_if_fail (GIMP_IS_IMAGE_MAP_TOOL (tool));
+  GimpImageMapOptions *options   = GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (tool);
+  GimpToolInfo        *tool_info = GIMP_TOOL (tool)->tool_info;
 
   if (tool->image_map)
     {
@@ -710,13 +726,13 @@ gimp_image_map_tool_create_map (GimpImageMapTool *tool)
 
   g_assert (tool->operation);
 
-  tool_info = GIMP_TOOL (tool)->tool_info;
-
   tool->image_map = gimp_image_map_new (tool->drawable,
                                         tool->undo_desc,
                                         tool->operation,
                                         gimp_viewable_get_icon_name (GIMP_VIEWABLE (tool_info)));
 
+  gimp_image_map_set_region (tool->image_map, options->region);
+
   g_signal_connect (tool->image_map, "flush",
                     G_CALLBACK (gimp_image_map_tool_flush),
                     tool);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]