[gimp] app: add gimp_layer_mode_is_trivial()
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add gimp_layer_mode_is_trivial()
- Date: Sun, 2 Dec 2018 08:13:00 +0000 (UTC)
commit 8adec5fb3a36e4212d2556046be50ef1d3219a56
Author: Ell <ell_se yahoo com>
Date: Sun Dec 2 02:55:05 2018 -0500
app: add gimp_layer_mode_is_trivial()
Add a TRIVIAL layer-mode flag, and corresponding
gimp_layer_mode_is_trivial() function, which indicates if the blend
function of a given layer mode is trivial, i.e., either never
modifies the source pixels (for non-subtractive modes), or always
clears the destination pixels (for subtractive modes).
app/operations/layer-modes/gimp-layer-modes.c | 31 +++++++++++++++++++++------
app/operations/layer-modes/gimp-layer-modes.h | 1 +
app/operations/operations-enums.h | 3 ++-
3 files changed, 27 insertions(+), 8 deletions(-)
---
diff --git a/app/operations/layer-modes/gimp-layer-modes.c b/app/operations/layer-modes/gimp-layer-modes.c
index 784fe71187..4c01575869 100644
--- a/app/operations/layer-modes/gimp-layer-modes.c
+++ b/app/operations/layer-modes/gimp-layer-modes.c
@@ -60,7 +60,8 @@ static const GimpLayerModeInfo layer_mode_infos[] =
.flags = GIMP_LAYER_MODE_FLAG_LEGACY |
GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE |
- GIMP_LAYER_MODE_FLAG_COMPOSITE_MODE_IMMUTABLE,
+ GIMP_LAYER_MODE_FLAG_COMPOSITE_MODE_IMMUTABLE |
+ GIMP_LAYER_MODE_FLAG_TRIVIAL,
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
.paint_composite_mode = GIMP_LAYER_COMPOSITE_UNION,
.composite_mode = GIMP_LAYER_COMPOSITE_UNION,
@@ -70,8 +71,9 @@ static const GimpLayerModeInfo layer_mode_infos[] =
{ GIMP_LAYER_MODE_DISSOLVE,
.op_name = "gimp:dissolve",
- .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_TRIVIAL,
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
.paint_composite_mode = GIMP_LAYER_COMPOSITE_UNION,
.composite_mode = GIMP_LAYER_COMPOSITE_UNION
@@ -436,7 +438,8 @@ static const GimpLayerModeInfo layer_mode_infos[] =
{ GIMP_LAYER_MODE_NORMAL,
.op_name = "gimp:normal",
- .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
+ .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
+ GIMP_LAYER_MODE_FLAG_TRIVIAL,
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
.paint_composite_mode = GIMP_LAYER_COMPOSITE_UNION,
.composite_mode = GIMP_LAYER_COMPOSITE_UNION,
@@ -775,7 +778,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_ALPHA_ONLY,
+ GIMP_LAYER_MODE_FLAG_ALPHA_ONLY |
+ GIMP_LAYER_MODE_FLAG_TRIVIAL,
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
.paint_composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP,
.composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP,
@@ -785,7 +789,8 @@ static const GimpLayerModeInfo layer_mode_infos[] =
{ GIMP_LAYER_MODE_MERGE,
.op_name = "gimp:merge",
- .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE,
+ .flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
+ GIMP_LAYER_MODE_FLAG_TRIVIAL,
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
.paint_composite_mode = GIMP_LAYER_COMPOSITE_UNION,
.composite_mode = GIMP_LAYER_COMPOSITE_UNION,
@@ -798,7 +803,8 @@ static const GimpLayerModeInfo layer_mode_infos[] =
.flags = GIMP_LAYER_MODE_FLAG_BLEND_SPACE_IMMUTABLE |
GIMP_LAYER_MODE_FLAG_COMPOSITE_SPACE_IMMUTABLE |
GIMP_LAYER_MODE_FLAG_SUBTRACTIVE |
- GIMP_LAYER_MODE_FLAG_ALPHA_ONLY,
+ GIMP_LAYER_MODE_FLAG_ALPHA_ONLY |
+ GIMP_LAYER_MODE_FLAG_TRIVIAL,
.context = GIMP_LAYER_MODE_CONTEXT_ALL,
.paint_composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP,
.composite_mode = GIMP_LAYER_COMPOSITE_CLIP_TO_BACKDROP
@@ -1189,6 +1195,17 @@ gimp_layer_mode_is_alpha_only (GimpLayerMode mode)
return (info->flags & GIMP_LAYER_MODE_FLAG_ALPHA_ONLY) != 0;
}
+gboolean
+gimp_layer_mode_is_trivial (GimpLayerMode mode)
+{
+ const GimpLayerModeInfo *info = gimp_layer_mode_info (mode);
+
+ if (! info)
+ return FALSE;
+
+ return (info->flags & GIMP_LAYER_MODE_FLAG_TRIVIAL) != 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 8005fd1ab4..fa340c1d8f 100644
--- a/app/operations/layer-modes/gimp-layer-modes.h
+++ b/app/operations/layer-modes/gimp-layer-modes.h
@@ -33,6 +33,7 @@ gboolean gimp_layer_mode_is_composite_mode_mutable (GimpLayer
gboolean gimp_layer_mode_is_subtractive (GimpLayerMode mode);
gboolean gimp_layer_mode_is_alpha_only (GimpLayerMode mode);
+gboolean gimp_layer_mode_is_trivial (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 ad81bc170d..e9cb41b3b3 100644
--- a/app/operations/operations-enums.h
+++ b/app/operations/operations-enums.h
@@ -182,7 +182,8 @@ typedef enum /*< pdb-skip, skip >*/
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_ALPHA_ONLY = 1 << 5
+ GIMP_LAYER_MODE_FLAG_ALPHA_ONLY = 1 << 5,
+ GIMP_LAYER_MODE_FLAG_TRIVIAL = 1 << 6
} GimpLayerModeFlags;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]