diff --git a/app/operations/layer-modes/gimp-layer-modes.c b/app/operations/layer-modes/gimp-layer-modes.c index f53da44b2a..f4d55ea54b 100644 --- a/app/operations/layer-modes/gimp-layer-modes.c +++ b/app/operations/layer-modes/gimp-layer-modes.c @@ -774,7 +774,8 @@ static const GimpLayerModeInfo layer_mode_infos[] = .op_name = "gimp:erase", .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE | - GIMP_LAYER_MODE_FLAG_SUBTRACTIVE, + GIMP_LAYER_MODE_FLAG_SUBTRACTIVE | + GIMP_LAYER_MODE_FLAG_ALPHA_ONLY, .context = GIMP_LAYER_MODE_CONTEXT_ALL, .paint_composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP, .composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP, @@ -796,7 +797,8 @@ static const GimpLayerModeInfo layer_mode_infos[] = .op_name = "gimp:split", .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE | GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE | - GIMP_LAYER_MODE_FLAG_SUBTRACTIVE, + GIMP_LAYER_MODE_FLAG_SUBTRACTIVE | + GIMP_LAYER_MODE_FLAG_ALPHA_ONLY, .context = GIMP_LAYER_MODE_CONTEXT_ALL, .paint_composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP, .composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP @@ -825,8 +827,9 @@ static const GimpLayerModeInfo layer_mode_infos[] = { GIMP_LAYER_MODE_ANTI_ERASE, .op_name = "gimp:anti-erase", - .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE | - GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE, + .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE | + GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE | + GIMP_LAYER_MODE_FLAG_ALPHA_ONLY, .context = GIMP_LAYER_MODE_CONTEXT_FADE, .paint_composite_mode = GIMP_LAYER_COMPOSITE_UNION, .composite_mode = GIMP_LAYER_COMPOSITE_UNION @@ -1175,6 +1178,17 @@ gimp_layer_mode_is_subtractive (GimpLayerMode mode) return (info->flags & GIMP_LAYER_MODE_FLAG_SUBTRACTIVE) != 0; } +gboolean +gimp_layer_mode_is_alpha_only (GimpLayerMode mode) +{ + const GimpLayerModeInfo *info = gimp_layer_mode_info (mode); + + if (! info) + return FALSE; + + return (info->flags & GIMP_LAYER_MODE_FLAG_ALPHA_ONLY) != 0; +} + GimpLayerColorSpace gimp_layer_mode_get_blend_space (GimpLayerMode mode) { diff --git a/app/operations/layer-modes/gimp-layer-modes.h b/app/operations/layer-modes/gimp-layer-modes.h index ef8060570a..b9a67f767d 100644 --- a/app/operations/layer-modes/gimp-layer-modes.h +++ b/app/operations/layer-modes/gimp-layer-modes.h @@ -32,6 +32,7 @@ gboolean gimp_layer_mode_is_composite_space_mutable (GimpLayer gboolean gimp_layer_mode_is_composite_mode_mutable (GimpLayerMode mode); gboolean gimp_layer_mode_is_subtractive (GimpLayerMode mode); +gboolean gimp_layer_mode_is_alpha_only (GimpLayerMode mode); GimpLayerColorSpace gimp_layer_mode_get_blend_space (GimpLayerMode mode); GimpLayerColorSpace gimp_layer_mode_get_composite_space (GimpLayerMode mode); diff --git a/app/operations/operations-enums.h b/app/operations/operations-enums.h index 2b13702de4..1b44f8af0c 100644 --- a/app/operations/operations-enums.h +++ b/app/operations/operations-enums.h @@ -181,7 +181,8 @@ typedef enum /*< pdb-skip, skip >*/ GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE = 1 << 1, GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE = 1 << 2, GIMP_LAYER_MODE_FLAG_COMPOSITE_MODE_IMMUTABLE = 1 << 3, - GIMP_LAYER_MODE_FLAG_SUBTRACTIVE = 1 << 4 + GIMP_LAYER_MODE_FLAG_SUBTRACTIVE = 1 << 4, + GIMP_LAYER_MODE_FLAG_ALPHA_ONLY = 1 << 5 } GimpLayerModeFlags;