gimp r24701 - in trunk: . app/base app/gegl app/tools



Author: mitch
Date: Thu Jan 24 10:37:21 2008
New Revision: 24701
URL: http://svn.gnome.org/viewvc/gimp?rev=24701&view=rev

Log:
2008-01-24  Michael Natterer  <mitch gimp org>

	* app/gegl/Makefile.am
	* app/gegl/gegl-types.h
	* app/gegl/gimpcolorbalanceconfig.[ch]: new config object.

	* app/gegl/gimpoperationcolorbalance.[ch]: use it.

	* app/tools/gimpcolorbalancetool.[ch]: port to
	GimpColorBalanceConfig and use the old ColorBalance cruft only in
	map(). The effect of the GEGL operator is now even more different
	from the cruft code because I removed a hack that was applying an
	additional factor when mapping between the ColorBalance values and
	the new properties, but that was only a workaround to make it look
	more similar anyway. Will have to fix this properly.

	* app/base/color-balance.[ch]: remove API that is now obsolete.



Added:
   trunk/app/gegl/gimpcolorbalanceconfig.c
   trunk/app/gegl/gimpcolorbalanceconfig.h
Modified:
   trunk/ChangeLog
   trunk/app/base/color-balance.c
   trunk/app/base/color-balance.h
   trunk/app/gegl/Makefile.am
   trunk/app/gegl/gegl-types.h
   trunk/app/gegl/gimpoperationcolorbalance.c
   trunk/app/gegl/gimpoperationcolorbalance.h
   trunk/app/tools/gimpcolorbalancetool.c
   trunk/app/tools/gimpcolorbalancetool.h

Modified: trunk/app/base/color-balance.c
==============================================================================
--- trunk/app/base/color-balance.c	(original)
+++ trunk/app/base/color-balance.c	Thu Jan 24 10:37:21 2008
@@ -59,23 +59,16 @@
   g_return_if_fail (cb != NULL);
 
   for (range = GIMP_SHADOWS; range <= GIMP_HIGHLIGHTS; range++)
-    color_balance_range_reset (cb, range);
+    {
+      cb->cyan_red[range]      = 0.0;
+      cb->magenta_green[range] = 0.0;
+      cb->yellow_blue[range]   = 0.0;
+    }
 
   cb->preserve_luminosity = TRUE;
 }
 
 void
-color_balance_range_reset (ColorBalance     *cb,
-                           GimpTransferMode  range)
-{
-  g_return_if_fail (cb != NULL);
-
-  cb->cyan_red[range]      = 0.0;
-  cb->magenta_green[range] = 0.0;
-  cb->yellow_blue[range]   = 0.0;
-}
-
-void
 color_balance_create_lookup_tables (ColorBalance *cb)
 {
   gdouble *cyan_red_transfer[3];

Modified: trunk/app/base/color-balance.h
==============================================================================
--- trunk/app/base/color-balance.h	(original)
+++ trunk/app/base/color-balance.h	Thu Jan 24 10:37:21 2008
@@ -35,8 +35,6 @@
 
 
 void   color_balance_init                 (ColorBalance     *cb);
-void   color_balance_range_reset          (ColorBalance     *cb,
-                                           GimpTransferMode  range);
 void   color_balance_create_lookup_tables (ColorBalance     *cb);
 void   color_balance                      (ColorBalance     *cb,
                                            PixelRegion      *srcPR,

Modified: trunk/app/gegl/Makefile.am
==============================================================================
--- trunk/app/gegl/Makefile.am	(original)
+++ trunk/app/gegl/Makefile.am	Thu Jan 24 10:37:21 2008
@@ -8,6 +8,8 @@
 	gimp-gegl-utils.c		\
 	gimp-gegl-utils.h		\
 	\
+	gimpcolorbalanceconfig.c	\
+	gimpcolorbalanceconfig.h	\
 	gimpcolorizeconfig.c		\
 	gimpcolorizeconfig.h		\
 	gimpcurvesconfig.c		\

Modified: trunk/app/gegl/gegl-types.h
==============================================================================
--- trunk/app/gegl/gegl-types.h	(original)
+++ trunk/app/gegl/gegl-types.h	Thu Jan 24 10:37:21 2008
@@ -42,6 +42,7 @@
 
 /*  operation config objects  */
 
+typedef struct _GimpColorBalanceConfig     GimpColorBalanceConfig;
 typedef struct _GimpColorizeConfig         GimpColorizeConfig;
 typedef struct _GimpCurvesConfig           GimpCurvesConfig;
 typedef struct _GimpHueSaturationConfig    GimpHueSaturationConfig;

Added: trunk/app/gegl/gimpcolorbalanceconfig.c
==============================================================================
--- (empty file)
+++ trunk/app/gegl/gimpcolorbalanceconfig.c	Thu Jan 24 10:37:21 2008
@@ -0,0 +1,245 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpcolorbalanceconfig.c
+ * Copyright (C) 2007 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl.h>
+
+#include "libgimpcolor/gimpcolor.h"
+#include "libgimpmath/gimpmath.h"
+
+#include "gegl-types.h"
+
+/*  temp cruft  */
+#include "base/color-balance.h"
+
+#include "gimpcolorbalanceconfig.h"
+
+
+enum
+{
+  PROP_0,
+  PROP_RANGE,
+  PROP_CYAN_RED,
+  PROP_MAGENTA_GREEN,
+  PROP_YELLOW_BLUE,
+  PROP_PRESERVE_LUMINOSITY
+};
+
+
+static void   gimp_color_balance_config_get_property (GObject      *object,
+                                                      guint         property_id,
+                                                      GValue       *value,
+                                                      GParamSpec   *pspec);
+static void   gimp_color_balance_config_set_property (GObject      *object,
+                                                      guint         property_id,
+                                                      const GValue *value,
+                                                      GParamSpec   *pspec);
+
+
+G_DEFINE_TYPE (GimpColorBalanceConfig, gimp_color_balance_config,
+               G_TYPE_OBJECT)
+
+#define parent_class gimp_color_balance_config_parent_class
+
+
+static void
+gimp_color_balance_config_class_init (GimpColorBalanceConfigClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->set_property = gimp_color_balance_config_set_property;
+  object_class->get_property = gimp_color_balance_config_get_property;
+
+  g_object_class_install_property (object_class, PROP_RANGE,
+                                   g_param_spec_enum ("range",
+                                                      "range",
+                                                      "The affected range",
+                                                      GIMP_TYPE_TRANSFER_MODE,
+                                                      GIMP_MIDTONES,
+                                                      G_PARAM_READWRITE |
+                                                      G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_CYAN_RED,
+                                   g_param_spec_double ("cyan-red",
+                                                        "Cyan-Red",
+                                                        "Cyan-Red",
+                                                        -1.0, 1.0, 0.0,
+                                                        G_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_MAGENTA_GREEN,
+                                   g_param_spec_double ("magenta-green",
+                                                        "Magenta-Green",
+                                                        "Magenta-Green",
+                                                        -1.0, 1.0, 0.0,
+                                                        G_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_YELLOW_BLUE,
+                                   g_param_spec_double ("yellow-blue",
+                                                        "Yellow-Blue",
+                                                        "Yellow-Blue",
+                                                        -1.0, 1.0, 1.0,
+                                                        G_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_PRESERVE_LUMINOSITY,
+                                   g_param_spec_boolean ("preserve-luminosity",
+                                                         "Preserve Luminosity",
+                                                         "Preserve Luminosity",
+                                                         TRUE,
+                                                         G_PARAM_READWRITE |
+                                                         G_PARAM_CONSTRUCT));
+}
+
+static void
+gimp_color_balance_config_init (GimpColorBalanceConfig *self)
+{
+  gimp_color_balance_config_reset (self);
+}
+
+static void
+gimp_color_balance_config_get_property (GObject    *object,
+                                        guint       property_id,
+                                        GValue     *value,
+                                        GParamSpec *pspec)
+{
+  GimpColorBalanceConfig *self = GIMP_COLOR_BALANCE_CONFIG (object);
+
+  switch (property_id)
+    {
+    case PROP_RANGE:
+      g_value_set_enum (value, self->range);
+      break;
+
+    case PROP_CYAN_RED:
+      g_value_set_double (value, self->cyan_red[self->range]);
+      break;
+
+    case PROP_MAGENTA_GREEN:
+      g_value_set_double (value, self->magenta_green[self->range]);
+      break;
+
+    case PROP_YELLOW_BLUE:
+      g_value_set_double (value, self->yellow_blue[self->range]);
+      break;
+
+    case PROP_PRESERVE_LUMINOSITY:
+      g_value_set_boolean (value, self->preserve_luminosity);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+gimp_color_balance_config_set_property (GObject      *object,
+                                        guint         property_id,
+                                        const GValue *value,
+                                        GParamSpec   *pspec)
+{
+  GimpColorBalanceConfig *self = GIMP_COLOR_BALANCE_CONFIG (object);
+
+  switch (property_id)
+    {
+    case PROP_RANGE:
+      self->range = g_value_get_enum (value);
+      break;
+
+    case PROP_CYAN_RED:
+      self->cyan_red[self->range] = g_value_get_double (value);
+      break;
+
+    case PROP_MAGENTA_GREEN:
+      self->magenta_green[self->range] = g_value_get_double (value);
+      break;
+
+    case PROP_YELLOW_BLUE:
+      self->yellow_blue[self->range] = g_value_get_double (value);
+      break;
+
+    case PROP_PRESERVE_LUMINOSITY:
+      self->preserve_luminosity = g_value_get_boolean (value);
+      break;
+
+   default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+
+/*  public functions  */
+
+void
+gimp_color_balance_config_reset (GimpColorBalanceConfig *config)
+{
+  GimpTransferMode range;
+
+  g_return_if_fail (GIMP_IS_COLOR_BALANCE_CONFIG (config));
+
+  config->range = GIMP_MIDTONES;
+
+  for (range = GIMP_SHADOWS; range <= GIMP_HIGHLIGHTS; range++)
+    {
+      gimp_color_balance_config_reset_range (config, range);
+    }
+
+  config->preserve_luminosity = TRUE;
+}
+
+void
+gimp_color_balance_config_reset_range (GimpColorBalanceConfig *config,
+                                       GimpTransferMode        range)
+{
+  g_return_if_fail (GIMP_IS_COLOR_BALANCE_CONFIG (config));
+
+  config->cyan_red[range]      = 0.0;
+  config->magenta_green[range] = 0.0;
+  config->yellow_blue[range]   = 0.0;
+}
+
+
+/*  temp cruft  */
+
+void
+gimp_color_balance_config_to_cruft (GimpColorBalanceConfig *config,
+                                    ColorBalance           *cruft)
+{
+  GimpTransferMode range;
+
+  g_return_if_fail (GIMP_IS_COLOR_BALANCE_CONFIG (config));
+  g_return_if_fail (cruft != NULL);
+
+  for (range = GIMP_SHADOWS; range <= GIMP_HIGHLIGHTS; range++)
+    {
+      cruft->cyan_red[range]      = config->cyan_red[range]      * 100.0;
+      cruft->magenta_green[range] = config->magenta_green[range] * 100.0;
+      cruft->yellow_blue[range]   = config->yellow_blue[range]   * 100.0;
+    }
+
+  cruft->preserve_luminosity = config->preserve_luminosity;
+
+  color_balance_create_lookup_tables (cruft);
+}

Added: trunk/app/gegl/gimpcolorbalanceconfig.h
==============================================================================
--- (empty file)
+++ trunk/app/gegl/gimpcolorbalanceconfig.h	Thu Jan 24 10:37:21 2008
@@ -0,0 +1,66 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpcolorbalanceconfig.h
+ * Copyright (C) 2007 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_COLOR_BALANCE_CONFIG_H__
+#define __GIMP_COLOR_BALANCE_CONFIG_H__
+
+
+#define GIMP_TYPE_COLOR_BALANCE_CONFIG            (gimp_color_balance_config_get_type ())
+#define GIMP_COLOR_BALANCE_CONFIG(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_COLOR_BALANCE_CONFIG, GimpColorBalanceConfig))
+#define GIMP_COLOR_BALANCE_CONFIG_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GIMP_TYPE_COLOR_BALANCE_CONFIG, GimpColorBalanceConfigClass))
+#define GIMP_IS_COLOR_BALANCE_CONFIG(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_BALANCE_CONFIG))
+#define GIMP_IS_COLOR_BALANCE_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GIMP_TYPE_COLOR_BALANCE_CONFIG))
+#define GIMP_COLOR_BALANCE_CONFIG_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GIMP_TYPE_COLOR_BALANCE_CONFIG, GimpColorBalanceConfigClass))
+
+
+typedef struct _GimpColorBalanceConfigClass GimpColorBalanceConfigClass;
+
+struct _GimpColorBalanceConfig
+{
+  GObject           parent_instance;
+
+  GimpTransferMode  range;
+
+  gdouble           cyan_red[3];
+  gdouble           magenta_green[3];
+  gdouble           yellow_blue[3];
+
+  gboolean          preserve_luminosity;
+};
+
+struct _GimpColorBalanceConfigClass
+{
+  GObjectClass  parent_class;
+};
+
+
+GType   gimp_color_balance_config_get_type    (void) G_GNUC_CONST;
+
+void    gimp_color_balance_config_reset       (GimpColorBalanceConfig *config);
+void    gimp_color_balance_config_reset_range (GimpColorBalanceConfig *config,
+                                               GimpTransferMode        range);
+
+/*  temp cruft  */
+void    gimp_color_balance_config_to_cruft    (GimpColorBalanceConfig *config,
+                                               ColorBalance           *cruft);
+
+
+#endif /* __GIMP_COLOR_BALANCE_CONFIG_H__ */

Modified: trunk/app/gegl/gimpoperationcolorbalance.c
==============================================================================
--- trunk/app/gegl/gimpoperationcolorbalance.c	(original)
+++ trunk/app/gegl/gimpoperationcolorbalance.c	Thu Jan 24 10:37:21 2008
@@ -28,20 +28,18 @@
 
 #include "gegl-types.h"
 
+#include "gimpcolorbalanceconfig.h"
 #include "gimpoperationcolorbalance.h"
 
 
 enum
 {
   PROP_0,
-  PROP_RANGE,
-  PROP_CYAN_RED,
-  PROP_MAGENTA_GREEN,
-  PROP_YELLOW_BLUE,
-  PROP_PRESERVE_LUMINOSITY
+  PROP_CONFIG
 };
 
 
+static void     gimp_operation_color_balance_finalize     (GObject       *object);
 static void     gimp_operation_color_balance_get_property (GObject       *object,
                                                            guint          property_id,
                                                            GValue        *value,
@@ -70,6 +68,7 @@
   GeglOperationClass            *operation_class = GEGL_OPERATION_CLASS (klass);
   GeglOperationPointFilterClass *point_class     = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
 
+  object_class->finalize     = gimp_operation_color_balance_finalize;
   object_class->set_property = gimp_operation_color_balance_set_property;
   object_class->get_property = gimp_operation_color_balance_get_property;
 
@@ -77,63 +76,32 @@
 
   gegl_operation_class_set_name (operation_class, "gimp-color-balance");
 
-  g_object_class_install_property (object_class, PROP_RANGE,
-                                   g_param_spec_enum ("range",
-                                                      "range",
-                                                      "The affected range",
-                                                      GIMP_TYPE_TRANSFER_MODE,
-                                                      GIMP_MIDTONES,
-                                                      G_PARAM_READWRITE |
-                                                      G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (object_class, PROP_CYAN_RED,
-                                   g_param_spec_double ("cyan-red",
-                                                        "Cyan-Red",
-                                                        "Cyan-Red",
-                                                        -1.0, 1.0, 0.0,
+  g_object_class_install_property (object_class, PROP_CONFIG,
+                                   g_param_spec_object ("config",
+                                                        "Config",
+                                                        "The config object",
+                                                        GIMP_TYPE_COLOR_BALANCE_CONFIG,
                                                         G_PARAM_READWRITE |
                                                         G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (object_class, PROP_MAGENTA_GREEN,
-                                   g_param_spec_double ("magenta-green",
-                                                        "Magenta-Green",
-                                                        "Magenta-Green",
-                                                        -1.0, 1.0, 0.0,
-                                                        G_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (object_class, PROP_YELLOW_BLUE,
-                                   g_param_spec_double ("yellow-blue",
-                                                        "Yellow-Blue",
-                                                        "Yellow-Blue",
-                                                        -1.0, 1.0, 1.0,
-                                                        G_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT));
-
-  g_object_class_install_property (object_class, PROP_PRESERVE_LUMINOSITY,
-                                   g_param_spec_boolean ("preserve-luminosity",
-                                                         "Preserve Luminosity",
-                                                         "Preserve Luminosity",
-                                                         TRUE,
-                                                         G_PARAM_READWRITE |
-                                                         G_PARAM_CONSTRUCT));
 }
 
 static void
 gimp_operation_color_balance_init (GimpOperationColorBalance *self)
 {
-  GimpTransferMode range;
+}
 
-  self->range = GIMP_MIDTONES;
+static void
+gimp_operation_color_balance_finalize (GObject *object)
+{
+  GimpOperationColorBalance *self = GIMP_OPERATION_COLOR_BALANCE (object);
 
-  for (range = GIMP_SHADOWS; range <= GIMP_HIGHLIGHTS; range++)
+  if (self->config)
     {
-      self->cyan_red[range]      = 0.0;
-      self->magenta_green[range] = 0.0;
-      self->yellow_blue[range]   = 0.0;
+      g_object_unref (self->config);
+      self->config = NULL;
     }
 
-  self->preserve_luminosity = TRUE;
+  G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
@@ -146,24 +114,8 @@
 
   switch (property_id)
     {
-    case PROP_RANGE:
-      g_value_set_enum (value, self->range);
-      break;
-
-    case PROP_CYAN_RED:
-      g_value_set_double (value, self->cyan_red[self->range]);
-      break;
-
-    case PROP_MAGENTA_GREEN:
-      g_value_set_double (value, self->magenta_green[self->range]);
-      break;
-
-    case PROP_YELLOW_BLUE:
-      g_value_set_double (value, self->yellow_blue[self->range]);
-      break;
-
-    case PROP_PRESERVE_LUMINOSITY:
-      g_value_set_boolean (value, self->preserve_luminosity);
+    case PROP_CONFIG:
+      g_value_set_object (value, self->config);
       break;
 
     default:
@@ -182,24 +134,10 @@
 
   switch (property_id)
     {
-    case PROP_RANGE:
-      self->range = g_value_get_enum (value);
-      break;
-
-    case PROP_CYAN_RED:
-      self->cyan_red[self->range] = g_value_get_double (value);
-      break;
-
-    case PROP_MAGENTA_GREEN:
-      self->magenta_green[self->range] = g_value_get_double (value);
-      break;
-
-    case PROP_YELLOW_BLUE:
-      self->yellow_blue[self->range] = g_value_get_double (value);
-      break;
-
-    case PROP_PRESERVE_LUMINOSITY:
-      self->preserve_luminosity = g_value_get_boolean (value);
+    case PROP_CONFIG:
+      if (self->config)
+        g_object_unref (self->config);
+      self->config = g_value_dup_object (value);
       break;
 
    default:
@@ -250,11 +188,15 @@
                                       void          *out_buf,
                                       glong          samples)
 {
-  GimpOperationColorBalance *self = GIMP_OPERATION_COLOR_BALANCE (operation);
-  gfloat                    *src  = in_buf;
-  gfloat                    *dest = out_buf;
+  GimpOperationColorBalance *self   = GIMP_OPERATION_COLOR_BALANCE (operation);
+  GimpColorBalanceConfig    *config = self->config;
+  gfloat                    *src    = in_buf;
+  gfloat                    *dest   = out_buf;
   glong                      sample;
 
+  if (! config)
+    return FALSE;
+
   for (sample = 0; sample < samples; sample++)
     {
       gfloat r = src[RED_PIX];
@@ -265,21 +207,21 @@
       gfloat b_n;
 
       r_n = gimp_operation_color_balance_map (r,
-                                              self->cyan_red[GIMP_SHADOWS],
-                                              self->cyan_red[GIMP_MIDTONES],
-                                              self->cyan_red[GIMP_HIGHLIGHTS]);
+                                              config->cyan_red[GIMP_SHADOWS],
+                                              config->cyan_red[GIMP_MIDTONES],
+                                              config->cyan_red[GIMP_HIGHLIGHTS]);
 
       g_n = gimp_operation_color_balance_map (g,
-                                              self->magenta_green[GIMP_SHADOWS],
-                                              self->magenta_green[GIMP_MIDTONES],
-                                              self->magenta_green[GIMP_HIGHLIGHTS]);
+                                              config->magenta_green[GIMP_SHADOWS],
+                                              config->magenta_green[GIMP_MIDTONES],
+                                              config->magenta_green[GIMP_HIGHLIGHTS]);
 
       b_n = gimp_operation_color_balance_map (b,
-                                              self->yellow_blue[GIMP_SHADOWS],
-                                              self->yellow_blue[GIMP_MIDTONES],
-                                              self->yellow_blue[GIMP_HIGHLIGHTS]);
+                                              config->yellow_blue[GIMP_SHADOWS],
+                                              config->yellow_blue[GIMP_MIDTONES],
+                                              config->yellow_blue[GIMP_HIGHLIGHTS]);
 
-      if (self->preserve_luminosity)
+      if (config->preserve_luminosity)
         {
           GimpRGB rgb;
           GimpHSL hsl;

Modified: trunk/app/gegl/gimpoperationcolorbalance.h
==============================================================================
--- trunk/app/gegl/gimpoperationcolorbalance.h	(original)
+++ trunk/app/gegl/gimpoperationcolorbalance.h	Thu Jan 24 10:37:21 2008
@@ -22,6 +22,7 @@
 #ifndef __GIMP_OPERATION_COLOR_BALANCE_H__
 #define __GIMP_OPERATION_COLOR_BALANCE_H__
 
+
 #include <gegl-plugin.h>
 #include <operation/gegl-operation-point-filter.h>
 
@@ -40,13 +41,7 @@
 {
   GeglOperationPointFilter  parent_instance;
 
-  GimpTransferMode          range;
-
-  gdouble                   cyan_red[3];
-  gdouble                   magenta_green[3];
-  gdouble                   yellow_blue[3];
-
-  gboolean                  preserve_luminosity;
+  GimpColorBalanceConfig   *config;
 };
 
 struct _GimpOperationColorBalanceClass

Modified: trunk/app/tools/gimpcolorbalancetool.c
==============================================================================
--- trunk/app/tools/gimpcolorbalancetool.c	(original)
+++ trunk/app/tools/gimpcolorbalancetool.c	Thu Jan 24 10:37:21 2008
@@ -27,6 +27,8 @@
 
 #include "base/color-balance.h"
 
+#include "gegl/gimpcolorbalanceconfig.h"
+
 #include "core/gimpdrawable.h"
 #include "core/gimpimage.h"
 #include "core/gimpimagemap.h"
@@ -116,7 +118,6 @@
   GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (cb_tool);
 
   cb_tool->color_balance = g_slice_new0 (ColorBalance);
-  cb_tool->transfer_mode = GIMP_MIDTONES;
 
   color_balance_init (cb_tool->color_balance);
 
@@ -129,6 +130,12 @@
 {
   GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (object);
 
+  if (cb_tool->config)
+    {
+      g_object_unref (cb_tool->config);
+      cb_tool->config = NULL;
+    }
+
   g_slice_free (ColorBalance, cb_tool->color_balance);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -154,12 +161,13 @@
       return FALSE;
     }
 
-  color_balance_init (cb_tool->color_balance);
-
-  cb_tool->transfer_mode = GIMP_MIDTONES;
+  gimp_color_balance_config_reset (cb_tool->config);
 
   GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error);
 
+  gimp_int_radio_group_set_active (GTK_RADIO_BUTTON (cb_tool->range_radio),
+                                   cb_tool->config->range);
+
   color_balance_update (cb_tool);
 
   return TRUE;
@@ -168,36 +176,28 @@
 static GeglNode *
 gimp_color_balance_tool_get_operation (GimpImageMapTool *im_tool)
 {
-  return g_object_new (GEGL_TYPE_NODE,
+  GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (im_tool);
+  GeglNode             *node;
+
+  node = g_object_new (GEGL_TYPE_NODE,
                        "operation", "gimp-color-balance",
                        NULL);
+
+  cb_tool->config = g_object_new (GIMP_TYPE_COLOR_BALANCE_CONFIG, NULL);
+
+  gegl_node_set (node,
+                 "config", cb_tool->config,
+                 NULL);
+
+  return node;
 }
 
 static void
 gimp_color_balance_tool_map (GimpImageMapTool *image_map_tool)
 {
   GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (image_map_tool);
-  ColorBalance         *cb      = cb_tool->color_balance;
-  GimpTransferMode      range;
 
-  for (range = GIMP_SHADOWS; range <= GIMP_HIGHLIGHTS; range++)
-    {
-      gegl_node_set (image_map_tool->operation,
-                     "range", range,
-                     NULL);
-
-      gegl_node_set (image_map_tool->operation,
-                     "cyan-red",      cb->cyan_red[range]      / 256.0,
-                     "magenta-green", cb->magenta_green[range] / 256.0,
-                     "yellow-blue",   cb->yellow_blue[range]   / 256.0,
-                     NULL);
-    }
-
-  gegl_node_set (image_map_tool->operation,
-                 "preserve-luminosity", cb->preserve_luminosity,
-                 NULL);
-
-  color_balance_create_lookup_tables (cb_tool->color_balance);
+  gimp_color_balance_config_to_cruft (cb_tool->config, cb_tool->color_balance);
 }
 
 
@@ -252,7 +252,6 @@
   GtkWidget            *vbox;
   GtkWidget            *hbox;
   GtkWidget            *table;
-  GtkWidget            *toggle;
   GtkWidget            *button;
   GtkWidget            *frame;
 
@@ -260,7 +259,7 @@
                                      gtk_label_new (_("Select Range to Adjust")),
                                      G_CALLBACK (color_balance_range_callback),
                                      cb_tool,
-                                     &toggle);
+                                     &cb_tool->range_radio);
   gtk_box_pack_start (GTK_BOX (im_tool->main_vbox), frame, FALSE, FALSE, 0);
   gtk_widget_show (frame);
 
@@ -279,22 +278,22 @@
   gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
   gtk_widget_show (table);
 
-  cb_tool->cyan_red_adj =
-    create_levels_scale (_("Cyan"), _("Red"), table, 0);
+  cb_tool->cyan_red_adj = create_levels_scale (_("Cyan"), _("Red"),
+                                               table, 0);
 
   g_signal_connect (cb_tool->cyan_red_adj, "value-changed",
                     G_CALLBACK (color_balance_cr_changed),
                     cb_tool);
 
-  cb_tool->magenta_green_adj =
-    create_levels_scale (_("Magenta"), _("Green"), table, 1);
+  cb_tool->magenta_green_adj = create_levels_scale (_("Magenta"), _("Green"),
+                                                    table, 1);
 
   g_signal_connect (cb_tool->magenta_green_adj, "value-changed",
                     G_CALLBACK (color_balance_mg_changed),
                     cb_tool);
 
-  cb_tool->yellow_blue_adj =
-    create_levels_scale (_("Yellow"), _("Blue"), table, 2);
+  cb_tool->yellow_blue_adj = create_levels_scale (_("Yellow"), _("Blue"),
+                                                  table, 2);
 
   g_signal_connect (cb_tool->yellow_blue_adj, "value-changed",
                     G_CALLBACK (color_balance_yb_changed),
@@ -315,7 +314,7 @@
   cb_tool->preserve_toggle =
     gtk_check_button_new_with_mnemonic (_("Preserve _luminosity"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_tool->preserve_toggle),
-                                cb_tool->color_balance->preserve_luminosity);
+                                cb_tool->config->preserve_luminosity);
   gtk_box_pack_end (GTK_BOX (im_tool->main_vbox), cb_tool->preserve_toggle,
                     FALSE, FALSE, 0);
   gtk_widget_show (cb_tool->preserve_toggle);
@@ -323,51 +322,62 @@
   g_signal_connect (cb_tool->preserve_toggle, "toggled",
                     G_CALLBACK (color_balance_preserve_toggled),
                     cb_tool);
-
-  /*  set range after everything is in place  */
-  gimp_int_radio_group_set_active (GTK_RADIO_BUTTON (toggle),
-                                   cb_tool->transfer_mode);
 }
 
 static void
 gimp_color_balance_tool_reset (GimpImageMapTool *im_tool)
 {
   GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (im_tool);
+  GimpTransferMode      range   = cb_tool->config->range;
+
+  gimp_color_balance_config_reset (cb_tool->config);
+  g_object_set (cb_tool->config,
+                "range", range,
+                NULL);
 
-  color_balance_init (cb_tool->color_balance);
   color_balance_update (cb_tool);
 }
 
 static void
 color_balance_update (GimpColorBalanceTool *cb_tool)
 {
-  GimpTransferMode tm = cb_tool->transfer_mode;
+  GimpColorBalanceConfig *config = cb_tool->config;
 
   gtk_adjustment_set_value (cb_tool->cyan_red_adj,
-                            cb_tool->color_balance->cyan_red[tm]);
+                            config->cyan_red[config->range]      * 100.0);
   gtk_adjustment_set_value (cb_tool->magenta_green_adj,
-                            cb_tool->color_balance->magenta_green[tm]);
+                            config->magenta_green[config->range] * 100.0);
   gtk_adjustment_set_value (cb_tool->yellow_blue_adj,
-                            cb_tool->color_balance->yellow_blue[tm]);
+                            config->yellow_blue[config->range]   * 100.0);
 
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_tool->preserve_toggle),
-                                cb_tool->color_balance->preserve_luminosity);
+                                config->preserve_luminosity);
 }
 
 static void
 color_balance_range_callback (GtkWidget            *widget,
                               GimpColorBalanceTool *cb_tool)
 {
-  gimp_radio_button_update (widget, &cb_tool->transfer_mode);
-  color_balance_update (cb_tool);
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+    {
+      GimpTransferMode range;
+
+      gimp_radio_button_update (widget, &range);
+      g_object_set (cb_tool->config,
+                    "range", range,
+                    NULL);
+
+      color_balance_update (cb_tool);
+    }
 }
 
 static void
 color_balance_range_reset_callback (GtkWidget            *widget,
                                     GimpColorBalanceTool *cb_tool)
 {
-  color_balance_range_reset (cb_tool->color_balance,
-                             cb_tool->transfer_mode);
+  gimp_color_balance_config_reset_range (cb_tool->config,
+                                         cb_tool->config->range);
+
   color_balance_update (cb_tool);
 
   gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (cb_tool));
@@ -377,11 +387,14 @@
 color_balance_preserve_toggled (GtkWidget            *widget,
                                 GimpColorBalanceTool *cb_tool)
 {
-  gboolean active = GTK_TOGGLE_BUTTON (widget)->active;
+  GimpColorBalanceConfig *config = cb_tool->config;
+  gboolean                active = GTK_TOGGLE_BUTTON (widget)->active;
 
-  if (cb_tool->color_balance->preserve_luminosity != active)
+  if (config->preserve_luminosity != active)
     {
-      cb_tool->color_balance->preserve_luminosity = active;
+      g_object_set (config,
+                    "preserve-luminosity", active,
+                    NULL);
 
       gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (cb_tool));
     }
@@ -391,11 +404,14 @@
 color_balance_cr_changed (GtkAdjustment        *adjustment,
                           GimpColorBalanceTool *cb_tool)
 {
-  GimpTransferMode tm = cb_tool->transfer_mode;
+  GimpColorBalanceConfig *config = cb_tool->config;
+  gdouble                 value  = adjustment->value / 100.0;
 
-  if (cb_tool->color_balance->cyan_red[tm] != adjustment->value)
+  if (config->cyan_red[config->range] != value)
     {
-      cb_tool->color_balance->cyan_red[tm] = adjustment->value;
+      g_object_set (config,
+                    "cyan-red", value,
+                    NULL);
 
       gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (cb_tool));
     }
@@ -405,11 +421,14 @@
 color_balance_mg_changed (GtkAdjustment        *adjustment,
                           GimpColorBalanceTool *cb_tool)
 {
-  GimpTransferMode tm = cb_tool->transfer_mode;
+  GimpColorBalanceConfig *config = cb_tool->config;
+  gdouble                 value  = adjustment->value / 100.0;
 
-  if (cb_tool->color_balance->magenta_green[tm] != adjustment->value)
+  if (config->magenta_green[config->range] != value)
     {
-      cb_tool->color_balance->magenta_green[tm] = adjustment->value;
+      g_object_set (config,
+                    "magenta-green", value,
+                    NULL);
 
       gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (cb_tool));
     }
@@ -419,11 +438,14 @@
 color_balance_yb_changed (GtkAdjustment        *adjustment,
                           GimpColorBalanceTool *cb_tool)
 {
-  GimpTransferMode tm = cb_tool->transfer_mode;
+  GimpColorBalanceConfig *config = cb_tool->config;
+  gdouble                 value  = adjustment->value / 100.0;
 
-  if (cb_tool->color_balance->yellow_blue[tm] != adjustment->value)
+  if (config->yellow_blue[config->range] != value)
     {
-      cb_tool->color_balance->yellow_blue[tm] = adjustment->value;
+      g_object_set (config,
+                    "yellow-blue", value,
+                    NULL);
 
       gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (cb_tool));
     }

Modified: trunk/app/tools/gimpcolorbalancetool.h
==============================================================================
--- trunk/app/tools/gimpcolorbalancetool.h	(original)
+++ trunk/app/tools/gimpcolorbalancetool.h	Thu Jan 24 10:37:21 2008
@@ -16,8 +16,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#ifndef __GIMP_COLOR_BALANCE_DIALOG_H__
-#define __GIMP_COLOR_BALANCE_DIALOG_H__
+#ifndef __GIMP_COLOR_BALANCE_TOOL_H__
+#define __GIMP_COLOR_BALANCE_TOOL_H__
 
 
 #include "gimpimagemaptool.h"
@@ -37,16 +37,17 @@
 
 struct _GimpColorBalanceTool
 {
-  GimpImageMapTool  parent_instance;
+  GimpImageMapTool        parent_instance;
 
-  ColorBalance     *color_balance;
+  GimpColorBalanceConfig *config;
+  ColorBalance           *color_balance;
 
   /*  dialog  */
-  GimpTransferMode  transfer_mode;
-  GtkAdjustment    *cyan_red_adj;
-  GtkAdjustment    *magenta_green_adj;
-  GtkAdjustment    *yellow_blue_adj;
-  GtkWidget        *preserve_toggle;
+  GtkWidget              *range_radio;
+  GtkAdjustment          *cyan_red_adj;
+  GtkAdjustment          *magenta_green_adj;
+  GtkAdjustment          *yellow_blue_adj;
+  GtkWidget              *preserve_toggle;
 };
 
 struct _GimpColorBalanceToolClass
@@ -61,4 +62,4 @@
 GType   gimp_color_balance_tool_get_type (void) G_GNUC_CONST;
 
 
-#endif  /*  __GIMP_COLOR_BALANCE_GIMP_H__  */
+#endif  /*  __GIMP_COLOR_BALANCE_TOOL_H__  */



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