[gimp] app: add gimp_layer_mode_is_trivial()



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]