Bill Skaggs <weskaggs@primate.ucdavis.edu>

* app/core/core-enums.[ch]
	* app/core/gimpimage-undo-push.[ch]
	* app/core/gimplayermask.[ch]:
	* app/pdb/pdb_glue.h
	* app/actions/layers-commands.c: try again from clean tree;
	hopefully will work this time.  (bug #148852)
This commit is contained in:
William Skaggs 2005-03-24 17:10:03 +00:00
parent afb6274e51
commit b5f1ae88e2
9 changed files with 166 additions and 13 deletions

View File

@ -1,3 +1,12 @@
2005-03-24 Bill Skaggs <weskaggs@primate.ucdavis.edu>
* app/core/core-enums.[ch]
* app/core/gimpimage-undo-push.[ch]
* app/core/gimplayermask.[ch]:
* app/pdb/pdb_glue.h
* app/actions/layers-commands.c: try again from clean tree;
hopefully will work this time. (bug #148852)
2005-03-24 Sven Neumann <sven@gimp.org>
* plug-ins/script-fu/scripts/*.scm: don't mark menu branches for

View File

@ -36,6 +36,7 @@
#include "core/gimpimage.h"
#include "core/gimpimage-merge.h"
#include "core/gimpimage-undo.h"
#include "core/gimpimage-undo-push.h"
#include "core/gimpitemundo.h"
#include "core/gimplayer.h"
#include "core/gimplayer-floating-sel.h"
@ -610,7 +611,7 @@ layers_mask_edit_cmd_callback (GtkAction *action,
active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
gimp_layer_mask_set_edit (mask, active);
gimp_layer_mask_set_edit (mask, active, TRUE);
gimp_image_flush (gimage);
}
}
@ -632,7 +633,7 @@ layers_mask_show_cmd_callback (GtkAction *action,
active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
gimp_layer_mask_set_show (mask, active);
gimp_layer_mask_set_show (mask, active, TRUE);
gimp_image_flush (gimage);
}
}
@ -654,8 +655,12 @@ layers_mask_disable_cmd_callback (GtkAction *action,
active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
gimp_layer_mask_set_apply (mask, ! active);
gimp_image_flush (gimage);
if (active == gimp_layer_mask_get_apply (mask))
{
gimp_layer_mask_set_apply (mask, ! active, TRUE);
gimp_image_flush (gimage);
}
}
}

View File

@ -734,6 +734,9 @@ gimp_undo_type_get_type (void)
{ GIMP_UNDO_LAYER_REMOVE, "GIMP_UNDO_LAYER_REMOVE", "layer-remove" },
{ GIMP_UNDO_LAYER_MASK_ADD, "GIMP_UNDO_LAYER_MASK_ADD", "layer-mask-add" },
{ GIMP_UNDO_LAYER_MASK_REMOVE, "GIMP_UNDO_LAYER_MASK_REMOVE", "layer-mask-remove" },
{ GIMP_UNDO_LAYER_MASK_APPLY, "GIMP_UNDO_LAYER_MASK_APPLY", "layer-mask-apply" },
{ GIMP_UNDO_LAYER_MASK_EDIT, "GIMP_UNDO_LAYER_MASK_EDIT", "layer-mask-edit" },
{ GIMP_UNDO_LAYER_MASK_SHOW, "GIMP_UNDO_LAYER_MASK_SHOW", "layer-mask-show" },
{ GIMP_UNDO_LAYER_REPOSITION, "GIMP_UNDO_LAYER_REPOSITION", "layer-reposition" },
{ GIMP_UNDO_LAYER_MODE, "GIMP_UNDO_LAYER_MODE", "layer-mode" },
{ GIMP_UNDO_LAYER_OPACITY, "GIMP_UNDO_LAYER_OPACITY", "layer-opacity" },
@ -817,6 +820,9 @@ gimp_undo_type_get_type (void)
{ GIMP_UNDO_LAYER_REMOVE, N_("Delete layer"), NULL },
{ GIMP_UNDO_LAYER_MASK_ADD, N_("Add layer mask"), NULL },
{ GIMP_UNDO_LAYER_MASK_REMOVE, N_("Delete layer mask"), NULL },
{ GIMP_UNDO_LAYER_MASK_APPLY, N_("Apply layer mask"), NULL },
{ GIMP_UNDO_LAYER_MASK_EDIT, N_("Edit layer mask"), NULL },
{ GIMP_UNDO_LAYER_MASK_SHOW, N_("Show layer mask"), NULL },
{ GIMP_UNDO_LAYER_REPOSITION, N_("Reposition layer"), NULL },
{ GIMP_UNDO_LAYER_MODE, N_("Set layer mode"), NULL },
{ GIMP_UNDO_LAYER_OPACITY, N_("Set layer opacity"), NULL },

View File

@ -384,6 +384,9 @@ typedef enum /*< pdb-skip >*/
GIMP_UNDO_LAYER_REMOVE, /*< desc="Delete layer" >*/
GIMP_UNDO_LAYER_MASK_ADD, /*< desc="Add layer mask" >*/
GIMP_UNDO_LAYER_MASK_REMOVE, /*< desc="Delete layer mask" >*/
GIMP_UNDO_LAYER_MASK_APPLY, /*< desc="Apply layer mask" >*/
GIMP_UNDO_LAYER_MASK_EDIT, /*< desc="Edit layer mask" >*/
GIMP_UNDO_LAYER_MASK_SHOW, /*< desc="Show layer mask" >*/
GIMP_UNDO_LAYER_REPOSITION, /*< desc="Reposition layer" >*/
GIMP_UNDO_LAYER_MODE, /*< desc="Set layer mode" >*/
GIMP_UNDO_LAYER_OPACITY, /*< desc="Set layer opacity" >*/

View File

@ -1626,6 +1626,7 @@ gimp_image_undo_push_layer_mask_remove (GimpImage *gimage,
layer, mask);
}
static gboolean
undo_push_layer_mask (GimpImage *gimage,
const gchar *undo_desc,
@ -1703,6 +1704,98 @@ undo_free_layer_mask (GimpUndo *undo,
g_free (lmu);
}
/********************************/
/* Layer Mask Property Undo */
/********************************/
typedef struct _LayerMaskPropertyUndo LayerMaskPropertyUndo;
struct _LayerMaskPropertyUndo
{
GimpLayerMask *mask;
gboolean apply;
gboolean edit;
gboolean show;
};
static gboolean undo_pop_layer_mask_properties (GimpUndo *undo,
GimpUndoMode undo_mode,
GimpUndoAccumulator *accum);
gboolean
gimp_image_undo_push_layer_mask_properties (GimpImage *gimage,
const gchar *undo_desc,
GimpUndoType type,
GimpLayer *layer,
GimpLayerMask *mask)
{
GimpUndo *new;
gint64 size;
size = sizeof (LayerMaskPropertyUndo);
if ((new = gimp_image_undo_push (gimage, GIMP_TYPE_ITEM_UNDO,
size, sizeof (LayerMaskPropertyUndo),
type, undo_desc,
GIMP_DIRTY_ITEM_META,
undo_pop_layer_mask_properties,
undo_free_layer_mask,
"item", layer,
NULL)))
{
LayerMaskPropertyUndo *lmp_undo = new->data;
lmp_undo->mask = g_object_ref (mask);
lmp_undo->apply = mask->apply_mask;
lmp_undo->edit = mask->edit_mask;
lmp_undo->show = mask->show_mask;
return TRUE;
}
return FALSE;
}
static gboolean
undo_pop_layer_mask_properties (GimpUndo *undo,
GimpUndoMode undo_mode,
GimpUndoAccumulator *accum)
{
LayerMaskPropertyUndo *lmp_undo = undo->data;
GimpLayer *layer = GIMP_LAYER (GIMP_ITEM_UNDO (undo)->item);
GimpLayerMask *mask;
gboolean val;
mask = lmp_undo->mask;
switch (undo->undo_type)
{
case GIMP_UNDO_LAYER_MASK_APPLY:
val = (undo_mode == GIMP_UNDO_MODE_UNDO) ?
lmp_undo->apply : ! lmp_undo->apply;
gimp_layer_mask_set_apply (mask, val, FALSE);
break;
case GIMP_UNDO_LAYER_MASK_EDIT:
val = (undo_mode == GIMP_UNDO_MODE_UNDO) ?
lmp_undo->edit : ! lmp_undo->edit;
gimp_layer_mask_set_edit (mask, val, FALSE);
break;
case GIMP_UNDO_LAYER_MASK_SHOW:
val = (undo_mode == GIMP_UNDO_MODE_UNDO) ?
lmp_undo->show : ! lmp_undo->show;
gimp_layer_mask_set_show (mask, val, FALSE);
break;
default:
return FALSE;
break;
}
return TRUE;
}
/***************************/
/* Layer re-position Undo */

View File

@ -100,6 +100,10 @@ gboolean gimp_image_undo_push_layer_mask_remove (GimpImage *gimage,
const gchar *undo_desc,
GimpLayer *layer,
GimpLayerMask *mask);
gboolean gimp_image_undo_push_layer_mask_properties (GimpImage *gimage,
const gchar *undo_desc,
GimpLayer *layer,
GimpLayerMask *mask);
gboolean gimp_image_undo_push_layer_reposition (GimpImage *gimage,
const gchar *undo_desc,
GimpLayer *layer);

View File

@ -250,12 +250,22 @@ gimp_layer_mask_get_layer (const GimpLayerMask *layer_mask)
void
gimp_layer_mask_set_apply (GimpLayerMask *layer_mask,
gboolean apply)
gboolean apply,
gboolean push_undo)
{
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
if (layer_mask->apply_mask != apply)
{
GimpImage *gimage = GIMP_ITEM (layer_mask)->gimage;
if (push_undo)
gimp_image_undo_push_layer_mask_properties (gimage,
_("Apply Layer Mask"),
GIMP_UNDO_LAYER_MASK_APPLY,
layer_mask->layer,
layer_mask);
layer_mask->apply_mask = apply ? TRUE : FALSE;
if (layer_mask->layer)
@ -282,12 +292,22 @@ gimp_layer_mask_get_apply (const GimpLayerMask *layer_mask)
void
gimp_layer_mask_set_edit (GimpLayerMask *layer_mask,
gboolean edit)
gboolean edit,
gboolean push_undo)
{
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
if (layer_mask->edit_mask != edit)
{
GimpImage *gimage = GIMP_ITEM (layer_mask)->gimage;
if (push_undo)
gimp_image_undo_push_layer_mask_properties (gimage,
_("Edit Layer Mask"),
GIMP_UNDO_LAYER_MASK_EDIT,
layer_mask->layer,
layer_mask);
layer_mask->edit_mask = edit ? TRUE : FALSE;
g_signal_emit (layer_mask, layer_mask_signals[EDIT_CHANGED], 0);
@ -304,12 +324,22 @@ gimp_layer_mask_get_edit (const GimpLayerMask *layer_mask)
void
gimp_layer_mask_set_show (GimpLayerMask *layer_mask,
gboolean show)
gboolean show,
gboolean push_undo)
{
g_return_if_fail (GIMP_IS_LAYER_MASK (layer_mask));
if (layer_mask->show_mask != show)
{
GimpImage *gimage = GIMP_ITEM (layer_mask)->gimage;
if (push_undo)
gimp_image_undo_push_layer_mask_properties (gimage,
_("Show Layer Mask"),
GIMP_UNDO_LAYER_MASK_SHOW,
layer_mask->layer,
layer_mask);
layer_mask->show_mask = show ? TRUE : FALSE;
if (layer_mask->layer)

View File

@ -69,15 +69,18 @@ void gimp_layer_mask_set_layer (GimpLayerMask *layer_mask,
GimpLayer * gimp_layer_mask_get_layer (const GimpLayerMask *layer_mask);
void gimp_layer_mask_set_apply (GimpLayerMask *layer_mask,
gboolean apply);
gboolean apply,
gboolean push_undo);
gboolean gimp_layer_mask_get_apply (const GimpLayerMask *layer_mask);
void gimp_layer_mask_set_edit (GimpLayerMask *layer_mask,
gboolean apply);
gboolean apply,
gboolean push_undo);
gboolean gimp_layer_mask_get_edit (const GimpLayerMask *layer_mask);
void gimp_layer_mask_set_show (GimpLayerMask *layer_mask,
gboolean show);
gboolean show,
gboolean push_undo);
gboolean gimp_layer_mask_get_show (const GimpLayerMask *layer_mask);

View File

@ -24,9 +24,9 @@
#define gimp_layer_get_show_mask(l) (l)->mask ? gimp_layer_mask_get_show((l)->mask) : FALSE;
#define gimp_layer_get_edit_mask(l) (l)->mask ? gimp_layer_mask_get_edit((l)->mask) : FALSE;
#define gimp_layer_set_apply_mask(l,a) { if((l)->mask) gimp_layer_mask_set_apply((l)->mask,(a)); else success = FALSE; }
#define gimp_layer_set_show_mask(l,s) { if((l)->mask) gimp_layer_mask_set_show((l)->mask,(s)); else success = FALSE; }
#define gimp_layer_set_edit_mask(l,e) { if((l)->mask) gimp_layer_mask_set_edit((l)->mask,(e)); else success = FALSE; }
#define gimp_layer_set_apply_mask(l,a) { if((l)->mask) gimp_layer_mask_set_apply((l)->mask,(a), TRUE); else success = FALSE; }
#define gimp_layer_set_show_mask(l,s) { if((l)->mask) gimp_layer_mask_set_show((l)->mask,(s), TRUE); else success = FALSE; }
#define gimp_layer_set_edit_mask(l,e) { if((l)->mask) gimp_layer_mask_set_edit((l)->mask,(e), TRUE); else success = FALSE; }
#endif /* __PDB_GLUE_H__ */