[gimp] app: allow to specify the workarea of GEGL ops in the GEGL tool GUI
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: allow to specify the workarea of GEGL ops in the GEGL tool GUI
- Date: Fri, 23 May 2014 23:11:18 +0000 (UTC)
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]