[gimp] Bug 109161 - Improve Histogram with Luminance Channel



commit f4cb2dd881a107c0ac02493ef8baf1ff4a620e66
Author: Thomas Manni <thomas manni free fr>
Date:   Mon Nov 2 08:53:50 2015 +0100

    Bug 109161 - Improve Histogram with Luminance Channel
    
    Add a luminance channel to GimpHistogram

 app/core/core-enums.c               |    2 +
 app/core/core-enums.h               |   13 +++---
 app/core/gimphistogram.c            |   76 +++++++++++++++++++++++++----------
 app/operations/gimplevelsconfig.c   |    3 +
 app/pdb/color-cmds.c                |    7 ++-
 app/pdb/drawable-color-cmds.c       |    9 +++-
 app/tools/gimpcurvestool.c          |    4 ++
 app/tools/gimplevelstool.c          |    4 ++
 app/widgets/gimpcolorbar.c          |    1 +
 app/widgets/gimphistogrameditor.c   |    1 +
 libgimp/gimpenums.h                 |    3 +-
 tools/pdbgen/enums.pl               |    5 +-
 tools/pdbgen/pdb/color.pdb          |    7 ++-
 tools/pdbgen/pdb/drawable_color.pdb |    9 +++-
 14 files changed, 103 insertions(+), 41 deletions(-)
---
diff --git a/app/core/core-enums.c b/app/core/core-enums.c
index 82474eb..6d94570 100644
--- a/app/core/core-enums.c
+++ b/app/core/core-enums.c
@@ -255,6 +255,7 @@ gimp_histogram_channel_get_type (void)
     { GIMP_HISTOGRAM_GREEN, "GIMP_HISTOGRAM_GREEN", "green" },
     { GIMP_HISTOGRAM_BLUE, "GIMP_HISTOGRAM_BLUE", "blue" },
     { GIMP_HISTOGRAM_ALPHA, "GIMP_HISTOGRAM_ALPHA", "alpha" },
+    { GIMP_HISTOGRAM_LUMINANCE, "GIMP_HISTOGRAM_LUMINANCE", "luminance" },
     { GIMP_HISTOGRAM_RGB, "GIMP_HISTOGRAM_RGB", "rgb" },
     { 0, NULL, NULL }
   };
@@ -266,6 +267,7 @@ gimp_histogram_channel_get_type (void)
     { GIMP_HISTOGRAM_GREEN, NC_("histogram-channel", "Green"), NULL },
     { GIMP_HISTOGRAM_BLUE, NC_("histogram-channel", "Blue"), NULL },
     { GIMP_HISTOGRAM_ALPHA, NC_("histogram-channel", "Alpha"), NULL },
+    { GIMP_HISTOGRAM_LUMINANCE, NC_("histogram-channel", "Luminance"), NULL },
     { GIMP_HISTOGRAM_RGB, NC_("histogram-channel", "RGB"), NULL },
     { 0, NULL, NULL }
   };
diff --git a/app/core/core-enums.h b/app/core/core-enums.h
index dc4f073..a139eb1 100644
--- a/app/core/core-enums.h
+++ b/app/core/core-enums.h
@@ -138,12 +138,13 @@ GType gimp_histogram_channel_get_type (void) G_GNUC_CONST;
 
 typedef enum
 {
-  GIMP_HISTOGRAM_VALUE = 0,  /*< desc="Value" >*/
-  GIMP_HISTOGRAM_RED   = 1,  /*< desc="Red"   >*/
-  GIMP_HISTOGRAM_GREEN = 2,  /*< desc="Green" >*/
-  GIMP_HISTOGRAM_BLUE  = 3,  /*< desc="Blue"  >*/
-  GIMP_HISTOGRAM_ALPHA = 4,  /*< desc="Alpha" >*/
-  GIMP_HISTOGRAM_RGB   = 5   /*< desc="RGB", pdb-skip >*/
+  GIMP_HISTOGRAM_VALUE     = 0,  /*< desc="Value"         >*/
+  GIMP_HISTOGRAM_RED       = 1,  /*< desc="Red"           >*/
+  GIMP_HISTOGRAM_GREEN     = 2,  /*< desc="Green"         >*/
+  GIMP_HISTOGRAM_BLUE      = 3,  /*< desc="Blue"          >*/
+  GIMP_HISTOGRAM_ALPHA     = 4,  /*< desc="Alpha"         >*/
+  GIMP_HISTOGRAM_LUMINANCE = 5,  /*< desc="Luminance"     >*/
+  GIMP_HISTOGRAM_RGB       = 6   /*< desc="RGB", pdb-skip >*/
 } GimpHistogramChannel;
 
 
diff --git a/app/core/gimphistogram.c b/app/core/gimphistogram.c
index 3d9252c..3821893 100644
--- a/app/core/gimphistogram.c
+++ b/app/core/gimphistogram.c
@@ -20,10 +20,12 @@
 #include "config.h"
 
 #include <string.h>
-
+#include <cairo.h>
 #include <gegl.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
 
 #include "libgimpmath/gimpmath.h"
+#include "libgimpcolor/gimpcolor.h"
 
 #include "core-types.h"
 
@@ -88,7 +90,7 @@ gimp_histogram_class_init (GimpHistogramClass *klass)
 
   g_object_class_install_property (object_class, PROP_N_CHANNELS,
                                    g_param_spec_int ("n-channels", NULL, NULL,
-                                                     0, 5, 0,
+                                                     0, 6, 0,
                                                      GIMP_PARAM_READABLE));
 
   g_object_class_install_property (object_class, PROP_N_BINS,
@@ -333,6 +335,7 @@ gimp_histogram_calculate (GimpHistogram       *histogram,
       const gfloat *data   = iter->data[0];
       gint          length = iter->length;
       gfloat        max;
+      gfloat        luminance;
 
       if (mask)
         {
@@ -377,9 +380,11 @@ gimp_histogram_calculate (GimpHistogram       *histogram,
 
                   max = MAX (data[0], data[1]);
                   max = MAX (data[2], max);
-
                   VALUE (0, max) += masked;
 
+                  luminance = GIMP_RGB_LUMINANCE (data[0], data[1], data[2]);
+                  VALUE (4, luminance) += masked;
+
                   data += n_components;
                   mask_data += 1;
                 }
@@ -398,9 +403,11 @@ gimp_histogram_calculate (GimpHistogram       *histogram,
 
                   max = MAX (data[0], data[1]);
                   max = MAX (data[2], max);
-
                   VALUE (0, max) += weight * masked;
 
+                  luminance = GIMP_RGB_LUMINANCE (data[0], data[1], data[2]);
+                  VALUE (5, luminance) += weight * masked;
+
                   data += n_components;
                   mask_data += 1;
                 }
@@ -441,9 +448,11 @@ gimp_histogram_calculate (GimpHistogram       *histogram,
 
                   max = MAX (data[0], data[1]);
                   max = MAX (data[2], max);
-
                   VALUE (0, max) += 1.0;
 
+                  luminance = GIMP_RGB_LUMINANCE (data[0], data[1], data[2]);
+                  VALUE (4, luminance) += 1.0;
+
                   data += n_components;
                 }
               break;
@@ -460,9 +469,11 @@ gimp_histogram_calculate (GimpHistogram       *histogram,
 
                   max = MAX (data[0], data[1]);
                   max = MAX (data[2], max);
-
                   VALUE (0, max) += weight;
 
+                  luminance = GIMP_RGB_LUMINANCE (data[0], data[1], data[2]);
+                  VALUE (5, luminance) += weight;
+
                   data += n_components;
                 }
               break;
@@ -515,8 +526,11 @@ gimp_histogram_get_maximum (GimpHistogram        *histogram,
   priv = histogram->priv;
 
   /*  the gray alpha channel is in slot 1  */
-  if (priv->n_channels == 3 && channel == GIMP_HISTOGRAM_ALPHA)
+  if (priv->n_channels == 4 && channel == GIMP_HISTOGRAM_ALPHA)
     channel = 1;
+  /*  the luminance channel is in slot 4  */
+  else if (priv->n_channels == 5 && channel == GIMP_HISTOGRAM_LUMINANCE)
+    channel = 4;
 
   if (! priv->values ||
       (channel != GIMP_HISTOGRAM_RGB && channel >= priv->n_channels))
@@ -554,8 +568,11 @@ gimp_histogram_get_value (GimpHistogram        *histogram,
   priv = histogram->priv;
 
   /*  the gray alpha channel is in slot 1  */
-  if (priv->n_channels == 3 && channel == GIMP_HISTOGRAM_ALPHA)
+  if (priv->n_channels == 4 && channel == GIMP_HISTOGRAM_ALPHA)
     channel = 1;
+  /*  the luminance channel is in slot 4  */
+  else if (priv->n_channels == 5 && channel == GIMP_HISTOGRAM_LUMINANCE)
+    channel = 4;
 
   if (! priv->values ||
       bin < 0 || bin >= priv->n_bins ||
@@ -584,7 +601,7 @@ gimp_histogram_get_component (GimpHistogram *histogram,
 {
   g_return_val_if_fail (GIMP_IS_HISTOGRAM (histogram), 0.0);
 
-  if (histogram->priv->n_channels > 3)
+  if (histogram->priv->n_channels > 4)
     component++;
 
   return gimp_histogram_get_value (histogram, component, bin);
@@ -595,7 +612,7 @@ gimp_histogram_n_channels (GimpHistogram *histogram)
 {
   g_return_val_if_fail (GIMP_IS_HISTOGRAM (histogram), 0);
 
-  return histogram->priv->n_channels - 1;
+  return histogram->priv->n_channels - 2;
 }
 
 gint
@@ -621,8 +638,11 @@ gimp_histogram_get_count (GimpHistogram        *histogram,
   priv = histogram->priv;
 
   /*  the gray alpha channel is in slot 1  */
-  if (priv->n_channels == 3 && channel == GIMP_HISTOGRAM_ALPHA)
+  if (priv->n_channels == 4 && channel == GIMP_HISTOGRAM_ALPHA)
     channel = 1;
+  /*  the luminance channel is in slot 4  */
+  else if (priv->n_channels == 5 && channel == GIMP_HISTOGRAM_LUMINANCE)
+    channel = 4;
 
   if (channel == GIMP_HISTOGRAM_RGB)
     return (gimp_histogram_get_count (histogram,
@@ -662,12 +682,15 @@ gimp_histogram_get_mean (GimpHistogram        *histogram,
   priv = histogram->priv;
 
   /*  the gray alpha channel is in slot 1  */
-  if (priv->n_channels == 3 && channel == GIMP_HISTOGRAM_ALPHA)
+  if (priv->n_channels == 4 && channel == GIMP_HISTOGRAM_ALPHA)
     channel = 1;
+  /*  the luminance channel is in slot 4  */
+  else if (priv->n_channels == 5 && channel == GIMP_HISTOGRAM_LUMINANCE)
+    channel = 4;
 
   if (! priv->values ||
       start > end ||
-      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 4) ||
+      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 5) ||
       (channel != GIMP_HISTOGRAM_RGB && channel >= priv->n_channels))
     return 0.0;
 
@@ -719,12 +742,15 @@ gimp_histogram_get_median (GimpHistogram         *histogram,
   priv = histogram->priv;
 
   /*  the gray alpha channel is in slot 1  */
-  if (priv->n_channels == 3 && channel == GIMP_HISTOGRAM_ALPHA)
+  if (priv->n_channels == 4 && channel == GIMP_HISTOGRAM_ALPHA)
     channel = 1;
+  /*  the luminance channel is in slot 4  */
+  else if (priv->n_channels == 5 && channel == GIMP_HISTOGRAM_LUMINANCE)
+    channel = 4;
 
   if (! priv->values ||
       start > end ||
-      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 4) ||
+      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 5) ||
       (channel != GIMP_HISTOGRAM_RGB && channel >= priv->n_channels))
     return 0.0;
 
@@ -788,12 +814,15 @@ gimp_histogram_get_threshold (GimpHistogram        *histogram,
   priv = histogram->priv;
 
   /*  the gray alpha channel is in slot 1  */
-  if (priv->n_channels == 3 && channel == GIMP_HISTOGRAM_ALPHA)
+  if (priv->n_channels == 4 && channel == GIMP_HISTOGRAM_ALPHA)
     channel = 1;
+  /*  the luminance channel is in slot 4  */
+  else if (priv->n_channels == 5 && channel == GIMP_HISTOGRAM_LUMINANCE)
+    channel = 4;
 
   if (! priv->values ||
       start > end ||
-      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 4) ||
+      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 5) ||
       (channel != GIMP_HISTOGRAM_RGB && channel >= priv->n_channels))
     return 0;
 
@@ -876,12 +905,15 @@ gimp_histogram_get_std_dev (GimpHistogram        *histogram,
   priv = histogram->priv;
 
   /*  the gray alpha channel is in slot 1  */
-  if (priv->n_channels == 3 && channel == GIMP_HISTOGRAM_ALPHA)
+  if (priv->n_channels == 4 && channel == GIMP_HISTOGRAM_ALPHA)
     channel = 1;
+  /*  the luminance channel is in slot 4  */
+  else if (priv->n_channels == 5 && channel == GIMP_HISTOGRAM_LUMINANCE)
+    channel = 4;
 
   if (! priv->values ||
       start > end ||
-      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 4) ||
+      (channel == GIMP_HISTOGRAM_RGB && priv->n_channels < 5) ||
       (channel != GIMP_HISTOGRAM_RGB && channel >= priv->n_channels))
     return 0.0;
 
@@ -922,14 +954,14 @@ gimp_histogram_alloc_values (GimpHistogram *histogram,
 {
   GimpHistogramPrivate *priv = histogram->priv;
 
-  if (n_components + 1 != priv->n_channels ||
+  if (n_components + 2 != priv->n_channels ||
       n_bins           != priv->n_bins)
     {
       gimp_histogram_clear_values (histogram);
 
-      if (n_components + 1 != priv->n_channels)
+      if (n_components + 2 != priv->n_channels)
         {
-          priv->n_channels = n_components + 1;
+          priv->n_channels = n_components + 2;
 
           g_object_notify (G_OBJECT (histogram), "n-channels");
         }
diff --git a/app/operations/gimplevelsconfig.c b/app/operations/gimplevelsconfig.c
index 5261e10..aa2e59f 100644
--- a/app/operations/gimplevelsconfig.c
+++ b/app/operations/gimplevelsconfig.c
@@ -535,6 +535,9 @@ gimp_levels_config_input_from_color (GimpHistogramChannel  channel,
 
     case GIMP_HISTOGRAM_RGB:
       return MIN (MIN (color->r, color->g), color->b);
+
+    case GIMP_HISTOGRAM_LUMINANCE:
+      return GIMP_RGB_LUMINANCE (color->r, color->g, color->b);
     }
 
   return 0.0;
diff --git a/app/pdb/color-cmds.c b/app/pdb/color-cmds.c
index 67bcb98..368d3ca 100644
--- a/app/pdb/color-cmds.c
+++ b/app/pdb/color-cmds.c
@@ -126,6 +126,7 @@ levels_invoker (GimpProcedure         *procedure,
       if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL,
                                      GIMP_PDB_ITEM_CONTENT, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) &&
+          channel != GIMP_HISTOGRAM_LUMINANCE &&
           (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
           (! gimp_drawable_is_gray (drawable) ||
            channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
@@ -423,7 +424,8 @@ curves_spline_invoker (GimpProcedure         *procedure,
           ! (num_points & 1) &&
           (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
           (! gimp_drawable_is_gray (drawable) ||
-           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA)  &&
+           channel != GIMP_HISTOGRAM_LUMINANCE)
         {
           GObject *config = gimp_curves_config_new_spline_cruft (channel,
                                                                  control_pts,
@@ -470,7 +472,8 @@ curves_explicit_invoker (GimpProcedure         *procedure,
           (num_bytes == 256) &&
           (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
           (! gimp_drawable_is_gray (drawable) ||
-           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+           channel != GIMP_HISTOGRAM_LUMINANCE)
         {
           GObject *config = gimp_curves_config_new_explicit_cruft (channel,
                                                                    curve,
diff --git a/app/pdb/drawable-color-cmds.c b/app/pdb/drawable-color-cmds.c
index 39b7e36..404ab12 100644
--- a/app/pdb/drawable-color-cmds.c
+++ b/app/pdb/drawable-color-cmds.c
@@ -224,7 +224,8 @@ drawable_curves_explicit_invoker (GimpProcedure         *procedure,
           (num_values <= 4096) &&
           (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
           (! gimp_drawable_is_gray (drawable) ||
-           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+          channel != GIMP_HISTOGRAM_LUMINANCE)
         {
           GObject *config = gimp_curves_config_new_explicit (channel,
                                                              values,
@@ -271,7 +272,8 @@ drawable_curves_spline_invoker (GimpProcedure         *procedure,
           ! (num_points & 1) &&
           (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
           (! gimp_drawable_is_gray (drawable) ||
-           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+          channel != GIMP_HISTOGRAM_LUMINANCE)
         {
           GObject *config = gimp_curves_config_new_spline (channel,
                                                            points,
@@ -572,7 +574,8 @@ drawable_levels_invoker (GimpProcedure         *procedure,
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) &&
           (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
           (! gimp_drawable_is_gray (drawable) ||
-           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+           channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+          channel != GIMP_HISTOGRAM_LUMINANCE)
         {
           GObject *config = g_object_new (GIMP_TYPE_LEVELS_CONFIG,
                                           "channel", channel,
diff --git a/app/tools/gimpcurvestool.c b/app/tools/gimpcurvestool.c
index 9bb744e..8d90672 100644
--- a/app/tools/gimpcurvestool.c
+++ b/app/tools/gimpcurvestool.c
@@ -714,6 +714,7 @@ gimp_curves_tool_update_channel (GimpCurvesTool *tool)
     case GIMP_HISTOGRAM_VALUE:
     case GIMP_HISTOGRAM_ALPHA:
     case GIMP_HISTOGRAM_RGB:
+    case GIMP_HISTOGRAM_LUMINANCE:
       gimp_curve_get_uchar (curve, sizeof (r), r);
 
       gimp_color_bar_set_buffers (GIMP_COLOR_BAR (tool->xrange),
@@ -837,6 +838,9 @@ curves_menu_sensitivity (gint      value,
 
     case GIMP_HISTOGRAM_RGB:
       return FALSE;
+
+    case GIMP_HISTOGRAM_LUMINANCE:
+      return FALSE;
     }
 
   return FALSE;
diff --git a/app/tools/gimplevelstool.c b/app/tools/gimplevelstool.c
index 9d6d599..caab709 100644
--- a/app/tools/gimplevelstool.c
+++ b/app/tools/gimplevelstool.c
@@ -837,6 +837,7 @@ levels_update_input_bar (GimpLevelsTool *tool)
     case GIMP_HISTOGRAM_VALUE:
     case GIMP_HISTOGRAM_ALPHA:
     case GIMP_HISTOGRAM_RGB:
+    case GIMP_HISTOGRAM_LUMINANCE:
       {
         guchar v[256];
         gint   i;
@@ -933,6 +934,9 @@ levels_menu_sensitivity (gint      value,
 
     case GIMP_HISTOGRAM_RGB:
       return FALSE;
+
+    case GIMP_HISTOGRAM_LUMINANCE:
+      return FALSE;
     }
 
   return FALSE;
diff --git a/app/widgets/gimpcolorbar.c b/app/widgets/gimpcolorbar.c
index ccf5697..d1d2250 100644
--- a/app/widgets/gimpcolorbar.c
+++ b/app/widgets/gimpcolorbar.c
@@ -289,6 +289,7 @@ gimp_color_bar_set_channel (GimpColorBar         *bar,
   switch (channel)
     {
     case GIMP_HISTOGRAM_VALUE:
+    case GIMP_HISTOGRAM_LUMINANCE:
     case GIMP_HISTOGRAM_ALPHA:
     case GIMP_HISTOGRAM_RGB:
       gimp_rgb_set (&color, 1.0, 1.0, 1.0);
diff --git a/app/widgets/gimphistogrameditor.c b/app/widgets/gimphistogrameditor.c
index eca4837..061bbe6 100644
--- a/app/widgets/gimphistogrameditor.c
+++ b/app/widgets/gimphistogrameditor.c
@@ -460,6 +460,7 @@ gimp_histogram_editor_channel_valid (GimpHistogramEditor  *editor,
         case GIMP_HISTOGRAM_RED:
         case GIMP_HISTOGRAM_GREEN:
         case GIMP_HISTOGRAM_BLUE:
+        case GIMP_HISTOGRAM_LUMINANCE:
         case GIMP_HISTOGRAM_RGB:
           return gimp_drawable_is_rgb (editor->drawable);
 
diff --git a/libgimp/gimpenums.h b/libgimp/gimpenums.h
index 4734b3a..2f1165e 100644
--- a/libgimp/gimpenums.h
+++ b/libgimp/gimpenums.h
@@ -58,7 +58,8 @@ typedef enum
   GIMP_HISTOGRAM_RED,
   GIMP_HISTOGRAM_GREEN,
   GIMP_HISTOGRAM_BLUE,
-  GIMP_HISTOGRAM_ALPHA
+  GIMP_HISTOGRAM_ALPHA,
+  GIMP_HISTOGRAM_LUMINANCE
 } GimpHistogramChannel;
 
 
diff --git a/tools/pdbgen/enums.pl b/tools/pdbgen/enums.pl
index 35c29bd..905725c 100644
--- a/tools/pdbgen/enums.pl
+++ b/tools/pdbgen/enums.pl
@@ -665,12 +665,13 @@ package Gimp::CodeGen::enums;
          header => 'core/core-enums.h',
          symbols => [ qw(GIMP_HISTOGRAM_VALUE GIMP_HISTOGRAM_RED
                          GIMP_HISTOGRAM_GREEN GIMP_HISTOGRAM_BLUE
-                         GIMP_HISTOGRAM_ALPHA) ],
+                         GIMP_HISTOGRAM_ALPHA GIMP_HISTOGRAM_LUMINANCE) ],
          mapping => { GIMP_HISTOGRAM_VALUE => '0',
                       GIMP_HISTOGRAM_RED => '1',
                       GIMP_HISTOGRAM_GREEN => '2',
                       GIMP_HISTOGRAM_BLUE => '3',
-                      GIMP_HISTOGRAM_ALPHA => '4' }
+                      GIMP_HISTOGRAM_ALPHA => '4',
+                      GIMP_HISTOGRAM_LUMINANCE => '5' }
        },
     GimpLayerModeEffects =>
        { contig => 1,
diff --git a/tools/pdbgen/pdb/color.pdb b/tools/pdbgen/pdb/color.pdb
index d05d486..a57b26b 100644
--- a/tools/pdbgen/pdb/color.pdb
+++ b/tools/pdbgen/pdb/color.pdb
@@ -81,6 +81,7 @@ sub levels {
   if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL,
                                  GIMP_PDB_ITEM_CONTENT, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) &&
+      channel != GIMP_HISTOGRAM_LUMINANCE &&
       (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
       (! gimp_drawable_is_gray (drawable) ||
        channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
@@ -353,7 +354,8 @@ sub curves_spline {
       ! (num_points & 1) &&
       (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
       (! gimp_drawable_is_gray (drawable) ||
-       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA)  &&
+       channel != GIMP_HISTOGRAM_LUMINANCE)
     {
       GObject *config = gimp_curves_config_new_spline_cruft (channel,
                                                              control_pts,
@@ -397,7 +399,8 @@ sub curves_explicit {
       (num_bytes == 256) &&
       (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
       (! gimp_drawable_is_gray (drawable) ||
-       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+       channel != GIMP_HISTOGRAM_LUMINANCE)
     {
       GObject *config = gimp_curves_config_new_explicit_cruft (channel,
                                                                curve,
diff --git a/tools/pdbgen/pdb/drawable_color.pdb b/tools/pdbgen/pdb/drawable_color.pdb
index 10c15c4..5119a41 100644
--- a/tools/pdbgen/pdb/drawable_color.pdb
+++ b/tools/pdbgen/pdb/drawable_color.pdb
@@ -214,7 +214,8 @@ HELP
       (num_values <= 4096) &&
       (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
       (! gimp_drawable_is_gray (drawable) ||
-       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+      channel != GIMP_HISTOGRAM_LUMINANCE)
     {
       GObject *config = gimp_curves_config_new_explicit (channel,
                                                          values,
@@ -271,7 +272,8 @@ HELP
       ! (num_points & 1) &&
       (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
       (! gimp_drawable_is_gray (drawable) ||
-       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+      channel != GIMP_HISTOGRAM_LUMINANCE)
     {
       GObject *config = gimp_curves_config_new_spline (channel,
                                                        points,
@@ -628,7 +630,8 @@ HELP
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) &&
       (gimp_drawable_has_alpha (drawable) || channel != GIMP_HISTOGRAM_ALPHA) &&
       (! gimp_drawable_is_gray (drawable) ||
-       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA))
+       channel == GIMP_HISTOGRAM_VALUE || channel == GIMP_HISTOGRAM_ALPHA) &&
+      channel != GIMP_HISTOGRAM_LUMINANCE)
     {
       GObject *config = g_object_new (GIMP_TYPE_LEVELS_CONFIG,
                                       "channel", channel,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]