added enum values GIMP_ADD_ALPHA_MASK_TRANSFER and

2003-11-26  Michael Natterer  <mitch@gimp.org>

	* app/core/core-enums.[ch]: added enum values
	GIMP_ADD_ALPHA_MASK_TRANSFER and GIMP_UNDO_GROUP_LAYER_ADD_MASK.

	* app/core/gimplayer.c (gimp_layer_create_mask): applied patch
	from Pedro Gimeno which implements the new ADD_MASK type and
	added undo. Fixes bug #127930.

	* app/gui/layers-commands.c: push an undo group around layer mask
	creation & adding since the creation may change the layer now.

	* app/pdb/layer_cmds.c
	* libgimp/gimpenums.h
	* plug-ins/pygimp/gimpenums.py
	* plug-ins/script-fu/script-fu-constants.c
	* tools/pdbgen/enums.pl: regenerated.
This commit is contained in:
Michael Natterer 2003-11-26 15:48:50 +00:00 committed by Michael Natterer
parent b2098d1e8e
commit e0e8a34f31
11 changed files with 90 additions and 14 deletions

View File

@ -1,3 +1,21 @@
2003-11-26 Michael Natterer <mitch@gimp.org>
* app/core/core-enums.[ch]: added enum values
GIMP_ADD_ALPHA_MASK_TRANSFER and GIMP_UNDO_GROUP_LAYER_ADD_MASK.
* app/core/gimplayer.c (gimp_layer_create_mask): applied patch
from Pedro Gimeno which implements the new ADD_MASK type and
added undo. Fixes bug #127930.
* app/gui/layers-commands.c: push an undo group around layer mask
creation & adding since the creation may change the layer now.
* app/pdb/layer_cmds.c
* libgimp/gimpenums.h
* plug-ins/pygimp/gimpenums.py
* plug-ins/script-fu/script-fu-constants.c
* tools/pdbgen/enums.pl: regenerated.
2003-11-26 Sven Neumann <sven@gimp.org>
* libgimpthumb/gimpthumb-utils.[ch]

View File

@ -927,6 +927,9 @@ add_mask_query_response (GtkWidget *widget,
if ((layer = (options->layer)) && (gimage = GIMP_ITEM (layer)->gimage))
{
gimp_image_undo_group_start (gimage, GIMP_UNDO_GROUP_LAYER_ADD_MASK,
_("Add Layer Mask"));
mask = gimp_layer_create_mask (layer, options->add_mask_type);
if (options->invert)
@ -935,6 +938,8 @@ add_mask_query_response (GtkWidget *widget,
gimp_layer_add_mask (layer, mask, TRUE);
g_object_unref (mask);
gimp_image_undo_group_end (gimage);
gimp_image_flush (gimage);
}
}

View File

@ -13,6 +13,7 @@ static const GEnumValue gimp_add_mask_type_enum_values[] =
{ GIMP_ADD_WHITE_MASK, N_("_White (Full Opacity)"), "white-mask" },
{ GIMP_ADD_BLACK_MASK, N_("_Black (Full Transparency)"), "black-mask" },
{ GIMP_ADD_ALPHA_MASK, N_("Layer's _Alpha Channel"), "alpha-mask" },
{ GIMP_ADD_ALPHA_MASK_TRANSFER, N_("_Transfer Layer's Alpha Channel"), "alpha-mask-transfer" },
{ GIMP_ADD_SELECTION_MASK, N_("_Selection"), "selection-mask" },
{ GIMP_ADD_COPY_MASK, N_("_Grayscale Copy of Layer"), "copy-mask" },
{ 0, NULL, NULL }
@ -568,6 +569,7 @@ static const GEnumValue gimp_undo_type_enum_values[] =
{ GIMP_UNDO_GROUP_ITEM_LINKED, N_("Linked Item"), "group-item-linked" },
{ GIMP_UNDO_GROUP_LAYER_SCALE, N_("Scale Layer"), "group-layer-scale" },
{ GIMP_UNDO_GROUP_LAYER_RESIZE, N_("Resize Layer"), "group-layer-resize" },
{ GIMP_UNDO_GROUP_LAYER_ADD_MASK, N_("Add Layer Mask"), "group-layer-add-mask" },
{ GIMP_UNDO_GROUP_LAYER_APPLY_MASK, N_("Apply Layer Mask"), "group-layer-apply-mask" },
{ GIMP_UNDO_GROUP_FS_TO_LAYER, N_("Floating Selection to Layer"), "group-fs-to-layer" },
{ GIMP_UNDO_GROUP_FS_FLOAT, N_("Float Selection"), "group-fs-float" },

View File

@ -42,11 +42,12 @@ GType gimp_add_mask_type_get_type (void) G_GNUC_CONST;
typedef enum
{
GIMP_ADD_WHITE_MASK, /*< desc="_White (Full Opacity)" >*/
GIMP_ADD_BLACK_MASK, /*< desc="_Black (Full Transparency)" >*/
GIMP_ADD_ALPHA_MASK, /*< desc="Layer's _Alpha Channel" >*/
GIMP_ADD_SELECTION_MASK, /*< desc="_Selection" >*/
GIMP_ADD_COPY_MASK /*< desc="_Grayscale Copy of Layer" >*/
GIMP_ADD_WHITE_MASK, /*< desc="_White (Full Opacity)" >*/
GIMP_ADD_BLACK_MASK, /*< desc="_Black (Full Transparency)" >*/
GIMP_ADD_ALPHA_MASK, /*< desc="Layer's _Alpha Channel" >*/
GIMP_ADD_ALPHA_MASK_TRANSFER, /*< desc="_Transfer Layer's Alpha Channel" >*/
GIMP_ADD_SELECTION_MASK, /*< desc="_Selection" >*/
GIMP_ADD_COPY_MASK /*< desc="_Grayscale Copy of Layer" >*/
} GimpAddMaskType;
@ -407,6 +408,7 @@ typedef enum /*< pdb-skip >*/
GIMP_UNDO_GROUP_ITEM_LINKED, /*< desc="Linked Item" >*/
GIMP_UNDO_GROUP_LAYER_SCALE, /*< desc="Scale Layer" >*/
GIMP_UNDO_GROUP_LAYER_RESIZE, /*< desc="Resize Layer" >*/
GIMP_UNDO_GROUP_LAYER_ADD_MASK, /*< desc="Add Layer Mask" >*/
GIMP_UNDO_GROUP_LAYER_APPLY_MASK, /*< desc="Apply Layer Mask" >*/
GIMP_UNDO_GROUP_FS_TO_LAYER, /*< desc="Floating Selection to Layer" >*/
GIMP_UNDO_GROUP_FS_FLOAT, /*< desc="Float Selection" >*/

View File

@ -1041,6 +1041,7 @@ gimp_layer_create_mask (const GimpLayer *layer,
break;
case GIMP_ADD_ALPHA_MASK:
case GIMP_ADD_ALPHA_MASK_TRANSFER:
if (gimp_drawable_has_alpha (drawable))
{
pixel_region_init (&srcPR, drawable->tiles,
@ -1049,6 +1050,45 @@ gimp_layer_create_mask (const GimpLayer *layer,
FALSE);
extract_alpha_region (&srcPR, NULL, &destPR);
if (add_mask_type == GIMP_ADD_ALPHA_MASK_TRANSFER)
{
void *pr;
gint w, h;
guchar *alpha_ptr;
gimp_drawable_push_undo (GIMP_DRAWABLE (layer),
_("Transfer Alpha to Mask"),
0, 0,
item->width,
item->height,
NULL, FALSE);
pixel_region_init (&srcPR, drawable->tiles,
0, 0,
item->width, item->height,
TRUE);
for (pr = pixel_regions_register (1, &srcPR);
pr != NULL;
pr = pixel_regions_process (pr))
{
h = srcPR.h;
while (h--)
{
w = srcPR.w;
alpha_ptr = (srcPR.data + h * srcPR.rowstride +
srcPR.bytes - 1);
while (w--)
{
*alpha_ptr = OPAQUE_OPACITY;
alpha_ptr += srcPR.bytes;
}
}
}
}
}
break;

View File

@ -927,6 +927,9 @@ add_mask_query_response (GtkWidget *widget,
if ((layer = (options->layer)) && (gimage = GIMP_ITEM (layer)->gimage))
{
gimp_image_undo_group_start (gimage, GIMP_UNDO_GROUP_LAYER_ADD_MASK,
_("Add Layer Mask"));
mask = gimp_layer_create_mask (layer, options->add_mask_type);
if (options->invert)
@ -935,6 +938,8 @@ add_mask_query_response (GtkWidget *widget,
gimp_layer_add_mask (layer, mask, TRUE);
g_object_unref (mask);
gimp_image_undo_group_end (gimage);
gimp_image_flush (gimage);
}
}

View File

@ -342,7 +342,7 @@ static ProcArg layer_create_mask_inargs[] =
{
GIMP_PDB_INT32,
"mask_type",
"The type of mask: { GIMP_ADD_WHITE_MASK (0), GIMP_ADD_BLACK_MASK (1), GIMP_ADD_ALPHA_MASK (2), GIMP_ADD_SELECTION_MASK (3), GIMP_ADD_COPY_MASK (4) }"
"The type of mask: { GIMP_ADD_WHITE_MASK (0), GIMP_ADD_BLACK_MASK (1), GIMP_ADD_ALPHA_MASK (2), GIMP_ADD_ALPHA_MASK_TRANSFER (3), GIMP_ADD_SELECTION_MASK (4), GIMP_ADD_COPY_MASK (5) }"
}
};

View File

@ -29,6 +29,7 @@ typedef enum
GIMP_ADD_WHITE_MASK,
GIMP_ADD_BLACK_MASK,
GIMP_ADD_ALPHA_MASK,
GIMP_ADD_ALPHA_MASK_TRANSFER,
GIMP_ADD_SELECTION_MASK,
GIMP_ADD_COPY_MASK
} GimpAddMaskType;

View File

@ -37,8 +37,9 @@ TRUE = True
ADD_WHITE_MASK = 0
ADD_BLACK_MASK = 1
ADD_ALPHA_MASK = 2
ADD_SELECTION_MASK = 3
ADD_COPY_MASK = 4
ADD_ALPHA_MASK_TRANSFER = 3
ADD_SELECTION_MASK = 4
ADD_COPY_MASK = 5
# GimpBlendMode
FG_BG_RGB_MODE = 0

View File

@ -26,8 +26,9 @@ init_generated_constants (void)
setvar (cintern ("ADD-WHITE-MASK"), flocons (0), NIL);
setvar (cintern ("ADD-BLACK-MASK"), flocons (1), NIL);
setvar (cintern ("ADD-ALPHA-MASK"), flocons (2), NIL);
setvar (cintern ("ADD-SELECTION-MASK"), flocons (3), NIL);
setvar (cintern ("ADD-COPY-MASK"), flocons (4), NIL);
setvar (cintern ("ADD-ALPHA-MASK-TRANSFER"), flocons (3), NIL);
setvar (cintern ("ADD-SELECTION-MASK"), flocons (4), NIL);
setvar (cintern ("ADD-COPY-MASK"), flocons (5), NIL);
setvar (cintern ("FG-BG-RGB-MODE"), flocons (0), NIL);
setvar (cintern ("FG-BG-HSV-MODE"), flocons (1), NIL);

View File

@ -191,13 +191,14 @@ package Gimp::CodeGen::enums;
{ contig => 1,
header => 'core/core-enums.h',
symbols => [ qw(GIMP_ADD_WHITE_MASK GIMP_ADD_BLACK_MASK
GIMP_ADD_ALPHA_MASK GIMP_ADD_SELECTION_MASK
GIMP_ADD_COPY_MASK) ],
GIMP_ADD_ALPHA_MASK GIMP_ADD_ALPHA_MASK_TRANSFER
GIMP_ADD_SELECTION_MASK GIMP_ADD_COPY_MASK) ],
mapping => { GIMP_ADD_WHITE_MASK => '0',
GIMP_ADD_BLACK_MASK => '1',
GIMP_ADD_ALPHA_MASK => '2',
GIMP_ADD_SELECTION_MASK => '3',
GIMP_ADD_COPY_MASK => '4' }
GIMP_ADD_ALPHA_MASK_TRANSFER => '3',
GIMP_ADD_SELECTION_MASK => '4',
GIMP_ADD_COPY_MASK => '5' }
},
GimpBlendMode =>
{ contig => 1,