From e3b2a54da76bbf85f7ba82219ab2aadc49c51766 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Tue, 16 Apr 2013 20:32:58 +0200 Subject: [PATCH] app: add a stock_id to GimpImageMap and use it for its filter Refactor GimpImageMapTool and GimpOperationTool to set the stock_id, and to be a bit smarter with the image map's undo string. --- app/core/gimpimagemap.c | 18 +++++++++++--- app/core/gimpimagemap.h | 3 ++- app/tools/gimpcagetool.c | 3 ++- app/tools/gimpimagemaptool.c | 19 +++++++++++---- app/tools/gimpimagemaptool.h | 3 ++- app/tools/gimpoperationtool.c | 46 ++++++++++++++++------------------- app/tools/gimpoperationtool.h | 4 +-- 7 files changed, 57 insertions(+), 39 deletions(-) diff --git a/app/core/gimpimagemap.c b/app/core/gimpimagemap.c index 5eb1c40c3e..dae6c154b7 100644 --- a/app/core/gimpimagemap.c +++ b/app/core/gimpimagemap.c @@ -65,10 +65,10 @@ struct _GimpImageMap GimpDrawable *drawable; gchar *undo_desc; + GeglNode *operation; + gchar *stock_id; GimpFilter *filter; - - GeglNode *operation; GeglNode *translate; GimpApplicator *applicator; }; @@ -161,6 +161,12 @@ gimp_image_map_finalize (GObject *object) image_map->operation = NULL; } + if (image_map->stock_id) + { + g_free (image_map->stock_id); + image_map->stock_id = NULL; + } + if (image_map->filter) { g_object_unref (image_map->filter); @@ -230,7 +236,8 @@ gimp_image_map_get_pixel_at (GimpPickable *pickable, GimpImageMap * gimp_image_map_new (GimpDrawable *drawable, const gchar *undo_desc, - GeglNode *operation) + GeglNode *operation, + const gchar *stock_id) { GimpImageMap *image_map; @@ -244,6 +251,7 @@ gimp_image_map_new (GimpDrawable *drawable, image_map->undo_desc = g_strdup (undo_desc); image_map->operation = g_object_ref (operation); + image_map->stock_id = g_strdup (stock_id); gimp_viewable_preview_freeze (GIMP_VIEWABLE (drawable)); @@ -276,7 +284,9 @@ gimp_image_map_apply (GimpImageMap *image_map, GeglNode *filter_output; GeglNode *input; - image_map->filter = gimp_filter_new ("Image Map"); + image_map->filter = gimp_filter_new (image_map->undo_desc); + gimp_viewable_set_stock_id (GIMP_VIEWABLE (image_map->filter), + image_map->stock_id); filter_node = gimp_filter_get_node (image_map->filter); diff --git a/app/core/gimpimagemap.h b/app/core/gimpimagemap.h index fbf0f99a7e..c4a1545d14 100644 --- a/app/core/gimpimagemap.h +++ b/app/core/gimpimagemap.h @@ -51,7 +51,8 @@ GType gimp_image_map_get_type (void) G_GNUC_CONST; GimpImageMap * gimp_image_map_new (GimpDrawable *drawable, const gchar *undo_desc, - GeglNode *operation); + GeglNode *operation, + const gchar *stock_id); void gimp_image_map_apply (GimpImageMap *image_map, const GeglRectangle *visible); diff --git a/app/tools/gimpcagetool.c b/app/tools/gimpcagetool.c index 4e6562cf00..1c1e8e341d 100644 --- a/app/tools/gimpcagetool.c +++ b/app/tools/gimpcagetool.c @@ -1242,7 +1242,8 @@ gimp_cage_tool_create_image_map (GimpCageTool *ct, ct->image_map = gimp_image_map_new (drawable, _("Cage transform"), - ct->render_node); + ct->render_node, + GIMP_STOCK_TOOL_CAGE); g_signal_connect (ct->image_map, "flush", G_CALLBACK (gimp_cage_tool_image_map_flush), diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c index cf687ec8c6..64333c6667 100644 --- a/app/tools/gimpimagemaptool.c +++ b/app/tools/gimpimagemaptool.c @@ -438,7 +438,7 @@ gimp_image_map_tool_initialize (GimpTool *tool, image_map_tool->drawable = drawable; - gimp_image_map_tool_create_map (image_map_tool); + gimp_image_map_tool_create_map (image_map_tool, NULL); return TRUE; } @@ -661,8 +661,11 @@ gimp_image_map_tool_reset (GimpImageMapTool *tool) } void -gimp_image_map_tool_create_map (GimpImageMapTool *tool) +gimp_image_map_tool_create_map (GimpImageMapTool *tool, + const gchar *undo_desc) { + GimpToolInfo *tool_info; + g_return_if_fail (GIMP_IS_IMAGE_MAP_TOOL (tool)); if (tool->image_map) @@ -673,9 +676,15 @@ gimp_image_map_tool_create_map (GimpImageMapTool *tool) g_assert (tool->operation); + tool_info = GIMP_TOOL (tool)->tool_info; + + if (! undo_desc) + undo_desc = tool_info->blurb; + tool->image_map = gimp_image_map_new (tool->drawable, - GIMP_TOOL (tool)->tool_info->blurb, - tool->operation); + undo_desc, + tool->operation, + gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool_info))); g_signal_connect (tool->image_map, "flush", G_CALLBACK (gimp_image_map_tool_flush), @@ -809,7 +818,7 @@ gimp_image_map_tool_gegl_notify (GObject *config, { gimp_tool_control_push_preserve (GIMP_TOOL (im_tool)->control, TRUE); - gimp_image_map_tool_create_map (im_tool); + gimp_image_map_tool_create_map (im_tool, NULL); gimp_tool_control_pop_preserve (GIMP_TOOL (im_tool)->control); diff --git a/app/tools/gimpimagemaptool.h b/app/tools/gimpimagemaptool.h index bd7713beda..35efe7b204 100644 --- a/app/tools/gimpimagemaptool.h +++ b/app/tools/gimpimagemaptool.h @@ -101,7 +101,8 @@ GType gimp_image_map_tool_get_type (void) G_GNUC_CONST; void gimp_image_map_tool_preview (GimpImageMapTool *image_map_tool); /* temp hack for the gegl tool */ -void gimp_image_map_tool_create_map (GimpImageMapTool *image_map_tool); +void gimp_image_map_tool_create_map (GimpImageMapTool *image_map_tool, + const gchar *undo_desc); void gimp_image_map_tool_edit_as (GimpImageMapTool *image_map_tool, const gchar *new_tool_id, diff --git a/app/tools/gimpoperationtool.c b/app/tools/gimpoperationtool.c index bf9bacc8d4..d22bde6a3e 100644 --- a/app/tools/gimpoperationtool.c +++ b/app/tools/gimpoperationtool.c @@ -149,10 +149,10 @@ gimp_operation_tool_finalize (GObject *object) tool->config = NULL; } - if (tool->dialog_desc) + if (tool->undo_desc) { - g_free (tool->dialog_desc); - tool->dialog_desc = NULL; + g_free (tool->undo_desc); + tool->undo_desc = NULL; } G_OBJECT_CLASS (parent_class)->finalize (object); @@ -220,9 +220,9 @@ gimp_operation_tool_dialog (GimpImageMapTool *image_map_tool) gtk_widget_show (tool->options_table); } - if (tool->dialog_desc) + if (tool->undo_desc) g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->dialog, - "description", tool->dialog_desc, + "description", tool->undo_desc, NULL); } @@ -262,8 +262,8 @@ gimp_operation_tool_get_settings_ui (GimpImageMapTool *image_map_tool, filename = g_build_filename (gimp_directory (), "filters", basename, NULL); g_free (basename); - import_title = g_strdup_printf (_("Import '%s' Settings"), tool->dialog_desc); - export_title = g_strdup_printf (_("Export '%s' Settings"), tool->dialog_desc); + import_title = g_strdup_printf (_("Import '%s' Settings"), tool->undo_desc); + export_title = g_strdup_printf (_("Export '%s' Settings"), tool->undo_desc); widget = GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->get_settings_ui (image_map_tool, @@ -306,7 +306,7 @@ gimp_operation_tool_config_notify (GObject *object, void gimp_operation_tool_set_operation (GimpOperationTool *tool, const gchar *operation, - const gchar *dialog_desc) + const gchar *undo_desc) { g_return_if_fail (GIMP_IS_OPERATION_TOOL (tool)); g_return_if_fail (operation != NULL); @@ -317,6 +317,12 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool, tool->operation = NULL; } + if (tool->undo_desc) + { + g_free (tool->undo_desc); + tool->undo_desc = NULL; + } + if (tool->config) { g_object_unref (tool->config); @@ -330,6 +336,7 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool, } tool->operation = g_strdup (operation); + tool->undo_desc = g_strdup (undo_desc); if (GIMP_IMAGE_MAP_TOOL (tool)->image_map) { @@ -343,7 +350,7 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool, NULL); if (GIMP_TOOL (tool)->drawable) - gimp_image_map_tool_create_map (GIMP_IMAGE_MAP_TOOL (tool)); + gimp_image_map_tool_create_map (GIMP_IMAGE_MAP_TOOL (tool), undo_desc); tool->config = gimp_gegl_get_config_proxy (tool->operation, GIMP_TYPE_IMAGE_MAP_CONFIG); @@ -351,7 +358,7 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool, GIMP_VIEWABLE_GET_CLASS (tool->config)->default_stock_id = GIMP_STOCK_GEGL; - if (dialog_desc) + if (undo_desc) GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->settings_name = "yes"; /* XXX hack */ else GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->settings_name = NULL; /* XXX hack */ @@ -383,21 +390,10 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool, } } - if (tool->dialog_desc) - { - g_free (tool->dialog_desc); - tool->dialog_desc = NULL; - } - - if (dialog_desc) - { - tool->dialog_desc = g_strdup (dialog_desc); - - if (GIMP_IMAGE_MAP_TOOL (tool)->dialog) - g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->dialog, - "description", dialog_desc, - NULL); - } + if (undo_desc && GIMP_IMAGE_MAP_TOOL (tool)->dialog) + g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->dialog, + "description", undo_desc, + NULL); if (GIMP_TOOL (tool)->drawable) gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (tool)); diff --git a/app/tools/gimpoperationtool.h b/app/tools/gimpoperationtool.h index 0abfe73aef..ddca8bae80 100644 --- a/app/tools/gimpoperationtool.h +++ b/app/tools/gimpoperationtool.h @@ -38,10 +38,10 @@ struct _GimpOperationTool GimpImageMapTool parent_instance; gchar *operation; + gchar *undo_desc; GimpObject *config; /* dialog */ - gchar *dialog_desc; GtkWidget *options_box; GtkWidget *options_table; }; @@ -59,7 +59,7 @@ GType gimp_operation_tool_get_type (void) G_GNUC_CONST; void gimp_operation_tool_set_operation (GimpOperationTool *tool, const gchar *operation, - const gchar *dialog_desc); + const gchar *undo_desc); #endif /* __GIMP_OPERATION_TOOL_H__ */