mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00
allow to discard invisible layers as suggested in bug #337557.
2006-04-07 Sven Neumann <sven@gimp.org> * app/core/gimpimage-merge.[ch] (gimp_image_merge_visible_layers): allow to discard invisible layers as suggested in bug #337557. * app/actions/image-commands.c * app/dialogs/image-merge-layers-dialog.[ch]: added a check button to the Merge Visible Layers dialog to control the new feature. * app/file/file-open.c * tools/pdbgen/pdb/image.pdb: pass FALSE for the new parameter. * app/pdb/image_cmds.c: regenerated.
This commit is contained in:
parent
3e3ff52aa1
commit
e43b8ea082
9 changed files with 87 additions and 17 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
|||
2006-04-07 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/core/gimpimage-merge.[ch] (gimp_image_merge_visible_layers):
|
||||
allow to discard invisible layers as suggested in bug #337557.
|
||||
|
||||
* app/actions/image-commands.c
|
||||
* app/dialogs/image-merge-layers-dialog.[ch]: added a check button
|
||||
to the Merge Visible Layers dialog to control the new feature.
|
||||
|
||||
* app/file/file-open.c
|
||||
* tools/pdbgen/pdb/image.pdb: pass FALSE for the new parameter.
|
||||
|
||||
* app/pdb/image_cmds.c: regenerated.
|
||||
|
||||
2006-04-06 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/composite/gimp-composite.c: removed unused global arrays.
|
||||
|
|
|
@ -99,6 +99,7 @@ static void image_merge_layers_response (GtkWidget *widget,
|
|||
/* private variables */
|
||||
|
||||
static GimpMergeType image_merge_layers_type = GIMP_EXPAND_AS_NECESSARY;
|
||||
static gboolean image_merge_layers_discard_invisible = FALSE;
|
||||
|
||||
|
||||
/* public functions */
|
||||
|
@ -380,7 +381,8 @@ image_merge_layers_cmd_callback (GtkAction *action,
|
|||
dialog = image_merge_layers_dialog_new (image,
|
||||
action_data_get_context (data),
|
||||
widget,
|
||||
image_merge_layers_type);
|
||||
image_merge_layers_type,
|
||||
image_merge_layers_discard_invisible);
|
||||
|
||||
g_signal_connect (dialog->dialog, "response",
|
||||
G_CALLBACK (image_merge_layers_response),
|
||||
|
@ -587,11 +589,14 @@ image_merge_layers_response (GtkWidget *widget,
|
|||
{
|
||||
if (response_id == GTK_RESPONSE_OK)
|
||||
{
|
||||
image_merge_layers_type = dialog->merge_type;
|
||||
image_merge_layers_type = dialog->merge_type;
|
||||
image_merge_layers_discard_invisible = dialog->discard_invisible;
|
||||
|
||||
gimp_image_merge_visible_layers (dialog->image,
|
||||
dialog->context,
|
||||
image_merge_layers_type);
|
||||
image_merge_layers_type,
|
||||
image_merge_layers_discard_invisible);
|
||||
|
||||
gimp_image_flush (dialog->image);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,10 +56,12 @@
|
|||
GimpLayer *
|
||||
gimp_image_merge_visible_layers (GimpImage *image,
|
||||
GimpContext *context,
|
||||
GimpMergeType merge_type)
|
||||
GimpMergeType merge_type,
|
||||
gboolean discard_invisible)
|
||||
{
|
||||
GList *list;
|
||||
GSList *merge_list = NULL;
|
||||
GSList *invisible_list = NULL;
|
||||
gboolean had_floating_sel = FALSE;
|
||||
GimpLayer *layer = NULL;
|
||||
|
||||
|
@ -77,20 +79,47 @@ gimp_image_merge_visible_layers (GimpImage *image,
|
|||
list;
|
||||
list = g_list_next (list))
|
||||
{
|
||||
layer = (GimpLayer *) list->data;
|
||||
layer = list->data;
|
||||
|
||||
if (gimp_item_get_visible (GIMP_ITEM (layer)))
|
||||
merge_list = g_slist_append (merge_list, layer);
|
||||
{
|
||||
merge_list = g_slist_append (merge_list, layer);
|
||||
}
|
||||
else if (discard_invisible)
|
||||
{
|
||||
invisible_list = g_slist_append (invisible_list, layer);
|
||||
}
|
||||
}
|
||||
|
||||
if (merge_list && merge_list->next)
|
||||
{
|
||||
const gchar *undo_desc = _("Merge Visible Layers");
|
||||
|
||||
gimp_set_busy (image->gimp);
|
||||
|
||||
if (invisible_list)
|
||||
{
|
||||
gimp_image_undo_group_start (image,
|
||||
GIMP_UNDO_GROUP_IMAGE_LAYERS_MERGE,
|
||||
undo_desc);
|
||||
}
|
||||
|
||||
layer = gimp_image_merge_layers (image, merge_list, context, merge_type,
|
||||
_("Merge Visible Layers"));
|
||||
g_slist_free (merge_list);
|
||||
|
||||
if (invisible_list)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
for (list = invisible_list; list; list = g_slist_next (list))
|
||||
gimp_image_remove_layer (image, list->data);
|
||||
|
||||
gimp_image_undo_group_end (image);
|
||||
g_slist_free (invisible_list);
|
||||
}
|
||||
|
||||
|
||||
gimp_unset_busy (image->gimp);
|
||||
|
||||
return layer;
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
|
||||
GimpLayer * gimp_image_merge_visible_layers (GimpImage *image,
|
||||
GimpContext *context,
|
||||
GimpMergeType merge_type);
|
||||
GimpMergeType merge_type,
|
||||
gboolean discard_invisible);
|
||||
GimpLayer * gimp_image_merge_down (GimpImage *image,
|
||||
GimpLayer *current_layer,
|
||||
GimpContext *context,
|
||||
|
|
|
@ -41,10 +41,13 @@ ImageMergeLayersDialog *
|
|||
image_merge_layers_dialog_new (GimpImage *image,
|
||||
GimpContext *context,
|
||||
GtkWidget *parent,
|
||||
GimpMergeType merge_type)
|
||||
GimpMergeType merge_type,
|
||||
gboolean discard_invisible)
|
||||
{
|
||||
ImageMergeLayersDialog *dialog;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *button;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
|
||||
|
@ -79,6 +82,11 @@ image_merge_layers_dialog_new (GimpImage *image,
|
|||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 12);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
|
||||
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog->dialog)->vbox), vbox);
|
||||
gtk_widget_show (vbox);
|
||||
|
||||
frame = gimp_int_radio_group_new (TRUE, _("Final, Merged Layer should be:"),
|
||||
G_CALLBACK (gimp_radio_button_update),
|
||||
&dialog->merge_type, dialog->merge_type,
|
||||
|
@ -94,9 +102,19 @@ image_merge_layers_dialog_new (GimpImage *image,
|
|||
|
||||
NULL);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (frame), 12);
|
||||
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog->dialog)->vbox), frame);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
||||
button = gtk_check_button_new_with_mnemonic (_("_Discard invisible layers"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
|
||||
dialog->discard_invisible);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
g_signal_connect (button, "toggled",
|
||||
G_CALLBACK (gimp_toggle_button_update),
|
||||
&dialog->discard_invisible);
|
||||
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
|
|
@ -29,13 +29,16 @@ struct _ImageMergeLayersDialog
|
|||
GimpImage *image;
|
||||
GimpContext *context;
|
||||
GimpMergeType merge_type;
|
||||
gboolean discard_invisible;
|
||||
};
|
||||
|
||||
|
||||
ImageMergeLayersDialog * image_merge_layers_dialog_new (GimpImage *image,
|
||||
GimpContext *context,
|
||||
GtkWidget *parent,
|
||||
GimpMergeType merge_type);
|
||||
ImageMergeLayersDialog *
|
||||
image_merge_layers_dialog_new (GimpImage *image,
|
||||
GimpContext *context,
|
||||
GtkWidget *parent,
|
||||
GimpMergeType merge_type,
|
||||
gboolean discard_invisible);
|
||||
|
||||
|
||||
#endif /* __IMAGE_MERGE_LAYERS_DIALOG_H__ */
|
||||
|
|
|
@ -379,7 +379,7 @@ file_open_layer (Gimp *gimp,
|
|||
|
||||
if (n_visible > 1)
|
||||
layer = gimp_image_merge_visible_layers (new_image, context,
|
||||
GIMP_CLIP_TO_IMAGE);
|
||||
GIMP_CLIP_TO_IMAGE, FALSE);
|
||||
|
||||
if (layer)
|
||||
{
|
||||
|
|
|
@ -1195,7 +1195,7 @@ image_merge_visible_layers_invoker (GimpProcedure *procedure,
|
|||
|
||||
if (success)
|
||||
{
|
||||
layer = gimp_image_merge_visible_layers (image, context, merge_type);
|
||||
layer = gimp_image_merge_visible_layers (image, context, merge_type, FALSE);
|
||||
|
||||
if (! layer)
|
||||
success = FALSE;
|
||||
|
|
|
@ -790,7 +790,7 @@ HELP
|
|||
headers => [ qw("core/gimpimage-merge.h") ],
|
||||
code => <<'CODE'
|
||||
{
|
||||
layer = gimp_image_merge_visible_layers (image, context, merge_type);
|
||||
layer = gimp_image_merge_visible_layers (image, context, merge_type, FALSE);
|
||||
|
||||
if (! layer)
|
||||
success = FALSE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue