gimp r24735 - in trunk: . app/gegl app/tools



Author: mitch
Date: Mon Jan 28 18:45:53 2008
New Revision: 24735
URL: http://svn.gnome.org/viewvc/gimp?rev=24735&view=rev

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

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

	* app/tools/gimpbrightnesscontrasttool.[ch]: use it.



Added:
   trunk/app/gegl/gimpbrightnesscontrastconfig.c
   trunk/app/gegl/gimpbrightnesscontrastconfig.h
Modified:
   trunk/ChangeLog
   trunk/app/gegl/Makefile.am
   trunk/app/gegl/gegl-types.h
   trunk/app/tools/gimpbrightnesscontrasttool.c
   trunk/app/tools/gimpbrightnesscontrasttool.h

Modified: trunk/app/gegl/Makefile.am
==============================================================================
--- trunk/app/gegl/Makefile.am	(original)
+++ trunk/app/gegl/Makefile.am	Mon Jan 28 18:45:53 2008
@@ -8,6 +8,8 @@
 	gimp-gegl-utils.c		\
 	gimp-gegl-utils.h		\
 	\
+	gimpbrightnesscontrastconfig.c	\
+	gimpbrightnesscontrastconfig.h	\
 	gimpcolorbalanceconfig.c	\
 	gimpcolorbalanceconfig.h	\
 	gimpcolorizeconfig.c		\

Modified: trunk/app/gegl/gegl-types.h
==============================================================================
--- trunk/app/gegl/gegl-types.h	(original)
+++ trunk/app/gegl/gegl-types.h	Mon Jan 28 18:45:53 2008
@@ -28,28 +28,29 @@
 
 /*  operations  */
 
-typedef struct _GimpOperationColorBalance  GimpOperationColorBalance;
-typedef struct _GimpOperationColorize      GimpOperationColorize;
-typedef struct _GimpOperationCurves        GimpOperationCurves;
-typedef struct _GimpOperationDesaturate    GimpOperationDesaturate;
-typedef struct _GimpOperationHueSaturation GimpOperationHueSaturation;
-typedef struct _GimpOperationLevels        GimpOperationLevels;
-typedef struct _GimpOperationPointFilter   GimpOperationPointFilter;
-typedef struct _GimpOperationPosterize     GimpOperationPosterize;
-typedef struct _GimpOperationThreshold     GimpOperationThreshold;
-typedef struct _GimpOperationTileSink      GimpOperationTileSink;
-typedef struct _GimpOperationTileSource    GimpOperationTileSource;
+typedef struct _GimpOperationColorBalance    GimpOperationColorBalance;
+typedef struct _GimpOperationColorize        GimpOperationColorize;
+typedef struct _GimpOperationCurves          GimpOperationCurves;
+typedef struct _GimpOperationDesaturate      GimpOperationDesaturate;
+typedef struct _GimpOperationHueSaturation   GimpOperationHueSaturation;
+typedef struct _GimpOperationLevels          GimpOperationLevels;
+typedef struct _GimpOperationPointFilter     GimpOperationPointFilter;
+typedef struct _GimpOperationPosterize       GimpOperationPosterize;
+typedef struct _GimpOperationThreshold       GimpOperationThreshold;
+typedef struct _GimpOperationTileSink        GimpOperationTileSink;
+typedef struct _GimpOperationTileSource      GimpOperationTileSource;
 
 
 /*  operation config objects  */
 
-typedef struct _GimpColorBalanceConfig     GimpColorBalanceConfig;
-typedef struct _GimpColorizeConfig         GimpColorizeConfig;
-typedef struct _GimpCurvesConfig           GimpCurvesConfig;
-typedef struct _GimpHueSaturationConfig    GimpHueSaturationConfig;
-typedef struct _GimpLevelsConfig           GimpLevelsConfig;
-typedef struct _GimpPosterizeConfig        GimpPosterizeConfig;
-typedef struct _GimpThresholdConfig        GimpThresholdConfig;
+typedef struct _GimpBrightnessContrastConfig GimpBrightnessContrastConfig;
+typedef struct _GimpColorBalanceConfig       GimpColorBalanceConfig;
+typedef struct _GimpColorizeConfig           GimpColorizeConfig;
+typedef struct _GimpCurvesConfig             GimpCurvesConfig;
+typedef struct _GimpHueSaturationConfig      GimpHueSaturationConfig;
+typedef struct _GimpLevelsConfig             GimpLevelsConfig;
+typedef struct _GimpPosterizeConfig          GimpPosterizeConfig;
+typedef struct _GimpThresholdConfig          GimpThresholdConfig;
 
 
 #endif /* __GEGL_TYPES_H__ */

Added: trunk/app/gegl/gimpbrightnesscontrastconfig.c
==============================================================================
--- (empty file)
+++ trunk/app/gegl/gimpbrightnesscontrastconfig.c	Mon Jan 28 18:45:53 2008
@@ -0,0 +1,159 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpbrightnesscontrastconfig.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 "libgimpconfig/gimpconfig.h"
+
+#include "gegl-types.h"
+
+#include "gimpbrightnesscontrastconfig.h"
+
+
+enum
+{
+  PROP_0,
+  PROP_BRIGHTNESS,
+  PROP_CONTRAST
+};
+
+
+static void   gimp_brightness_contrast_config_get_property (GObject      *object,
+                                                            guint         property_id,
+                                                            GValue       *value,
+                                                            GParamSpec   *pspec);
+static void   gimp_brightness_contrast_config_set_property (GObject      *object,
+                                                            guint         property_id,
+                                                            const GValue *value,
+                                                            GParamSpec   *pspec);
+
+
+G_DEFINE_TYPE_WITH_CODE (GimpBrightnessContrastConfig,
+                         gimp_brightness_contrast_config,
+                         G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (GIMP_TYPE_CONFIG, NULL))
+
+#define parent_class gimp_brightness_contrast_config_parent_class
+
+
+static void
+gimp_brightness_contrast_config_class_init (GimpBrightnessContrastConfigClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->set_property = gimp_brightness_contrast_config_set_property;
+  object_class->get_property = gimp_brightness_contrast_config_get_property;
+
+  g_object_class_install_property (object_class, PROP_BRIGHTNESS,
+                                   g_param_spec_double ("brightness",
+                                                        "Brightness",
+                                                        "Brightness",
+                                                        -1.0, 1.0, 0.0,
+                                                        G_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+
+  g_object_class_install_property (object_class, PROP_CONTRAST,
+                                   g_param_spec_double ("contrast",
+                                                        "Contrast",
+                                                        "Contrast",
+                                                        -1.0, 1.0, 0.0,
+                                                        G_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT));
+}
+
+static void
+gimp_brightness_contrast_config_init (GimpBrightnessContrastConfig *self)
+{
+}
+
+static void
+gimp_brightness_contrast_config_get_property (GObject    *object,
+                                              guint       property_id,
+                                              GValue     *value,
+                                              GParamSpec *pspec)
+{
+  GimpBrightnessContrastConfig *self = GIMP_BRIGHTNESS_CONTRAST_CONFIG (object);
+
+  switch (property_id)
+    {
+    case PROP_BRIGHTNESS:
+      g_value_set_double (value, self->brightness);
+      break;
+
+    case PROP_CONTRAST:
+      g_value_set_double (value, self->contrast);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+gimp_brightness_contrast_config_set_property (GObject      *object,
+                                              guint         property_id,
+                                              const GValue *value,
+                                              GParamSpec   *pspec)
+{
+  GimpBrightnessContrastConfig *self = GIMP_BRIGHTNESS_CONTRAST_CONFIG (object);
+
+  switch (property_id)
+    {
+    case PROP_BRIGHTNESS:
+      self->brightness = g_value_get_double (value);
+      break;
+
+    case PROP_CONTRAST:
+      self->contrast = g_value_get_double (value);
+      break;
+
+   default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+
+/*  public functions  */
+
+void
+gimp_brightness_contrast_config_set_node (GimpBrightnessContrastConfig *config,
+                                          GeglNode                     *node)
+{
+  gdouble brightness;
+  gdouble contrast;
+
+  g_return_if_fail (GIMP_IS_BRIGHTNESS_CONTRAST_CONFIG (config));
+  g_return_if_fail (GEGL_IS_NODE (node));
+
+  brightness = config->brightness / 2.0;
+  contrast   = (config->contrast < 0 ?
+                (config->contrast + 1.0) :
+                config->contrast * 4.0 + 1.0);
+
+  gegl_node_set (node,
+                 "brightness", brightness,
+                 "contrast",   contrast,
+                 NULL);
+}

Added: trunk/app/gegl/gimpbrightnesscontrastconfig.h
==============================================================================
--- (empty file)
+++ trunk/app/gegl/gimpbrightnesscontrastconfig.h	Mon Jan 28 18:45:53 2008
@@ -0,0 +1,56 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpbrightnesscontrastconfig.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_BRIGHTNESS_CONTRAST_CONFIG_H__
+#define __GIMP_BRIGHTNESS_CONTRAST_CONFIG_H__
+
+
+#define GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG            (gimp_brightness_contrast_config_get_type ())
+#define GIMP_BRIGHTNESS_CONTRAST_CONFIG(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG, GimpBrightnessContrastConfig))
+#define GIMP_BRIGHTNESS_CONTRAST_CONFIG_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG, GimpBrightnessContrastConfigClass))
+#define GIMP_IS_BRIGHTNESS_CONTRAST_CONFIG(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG))
+#define GIMP_IS_BRIGHTNESS_CONTRAST_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG))
+#define GIMP_BRIGHTNESS_CONTRAST_CONFIG_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG, GimpBrightnessContrastConfigClass))
+
+
+typedef struct _GimpBrightnessContrastConfigClass GimpBrightnessContrastConfigClass;
+
+struct _GimpBrightnessContrastConfig
+{
+  GObject  parent_instance;
+
+  gdouble  brightness;
+  gdouble  contrast;
+};
+
+struct _GimpBrightnessContrastConfigClass
+{
+  GObjectClass  parent_class;
+};
+
+
+GType   gimp_brightness_contrast_config_get_type (void) G_GNUC_CONST;
+
+void    gimp_brightness_contrast_config_set_node (GimpBrightnessContrastConfig *config,
+                                                  GeglNode                     *node);
+
+
+#endif /* __GIMP_BRIGHTNESS_CONTRAST_CONFIG_H__ */

Modified: trunk/app/tools/gimpbrightnesscontrasttool.c
==============================================================================
--- trunk/app/tools/gimpbrightnesscontrasttool.c	(original)
+++ trunk/app/tools/gimpbrightnesscontrasttool.c	Mon Jan 28 18:45:53 2008
@@ -21,6 +21,7 @@
 #include <gegl.h>
 #include <gtk/gtk.h>
 
+#include "libgimpconfig/gimpconfig.h"
 #include "libgimpwidgets/gimpwidgets.h"
 
 #include "tools-types.h"
@@ -28,6 +29,8 @@
 #include "base/gimplut.h"
 #include "base/lut-funcs.h"
 
+#include "gegl/gimpbrightnesscontrastconfig.h"
+
 #include "core/gimpdrawable.h"
 #include "core/gimpimage.h"
 
@@ -130,9 +133,7 @@
 {
   GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (bc_tool);
 
-  bc_tool->brightness = 0.0;
-  bc_tool->contrast   = 0.0;
-  bc_tool->lut        = gimp_lut_new ();
+  bc_tool->lut = gimp_lut_new ();
 
   im_tool->apply_func = (GimpImageMapApplyFunc) gimp_lut_process;
   im_tool->apply_data = bc_tool->lut;
@@ -143,6 +144,12 @@
 {
   GimpBrightnessContrastTool *bc_tool = GIMP_BRIGHTNESS_CONTRAST_TOOL (object);
 
+  if (bc_tool->config)
+    {
+      g_object_unref (bc_tool->config);
+      bc_tool->config = NULL;
+    }
+
   if (bc_tool->lut)
     {
       gimp_lut_free (bc_tool->lut);
@@ -172,8 +179,7 @@
       return FALSE;
     }
 
-  bc_tool->brightness = 0.0;
-  bc_tool->contrast   = 0.0;
+  gimp_config_reset (GIMP_CONFIG (bc_tool->config));
 
   GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error);
 
@@ -185,6 +191,10 @@
 static GeglNode *
 gimp_brightness_contrast_tool_get_operation (GimpImageMapTool *im_tool)
 {
+  GimpBrightnessContrastTool *bc_tool = GIMP_BRIGHTNESS_CONTRAST_TOOL (im_tool);
+
+  bc_tool->config = g_object_new (GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG, NULL);
+
   return g_object_new (GEGL_TYPE_NODE,
                        "operation", "brightness-contrast",
                        NULL);
@@ -194,22 +204,13 @@
 gimp_brightness_contrast_tool_map (GimpImageMapTool *im_tool)
 {
   GimpBrightnessContrastTool *bc_tool = GIMP_BRIGHTNESS_CONTRAST_TOOL (im_tool);
-  gdouble                     brightness;
-  gdouble                     contrast;
 
-  brightness = bc_tool->brightness / 256.0;
-  contrast   = (bc_tool->contrast < 0 ?
-                (bc_tool->contrast + 127.0) / 127.0 :
-                bc_tool->contrast * 4.0 / 127.0 + 1);
-
-  gegl_node_set (im_tool->operation,
-                 "brightness", brightness,
-                 "contrast",   contrast,
-                 NULL);
+  gimp_brightness_contrast_config_set_node (bc_tool->config,
+                                            im_tool->operation);
 
   brightness_contrast_lut_setup (bc_tool->lut,
-                                 bc_tool->brightness / 255.0,
-                                 bc_tool->contrast / 127.0,
+                                 bc_tool->config->brightness / 2.0,
+                                 bc_tool->config->contrast,
                                  gimp_drawable_bytes (im_tool->drawable));
 }
 
@@ -223,10 +224,10 @@
 {
   GimpBrightnessContrastTool *bc_tool = GIMP_BRIGHTNESS_CONTRAST_TOOL (tool);
 
-  bc_tool->x = coords->x - bc_tool->contrast;
-  bc_tool->y = coords->y + bc_tool->brightness;
-  bc_tool->dx =   bc_tool->contrast;
-  bc_tool->dy = - bc_tool->brightness;
+  bc_tool->x  = coords->x - bc_tool->config->contrast   * 127.0;
+  bc_tool->y  = coords->y + bc_tool->config->brightness * 127.0;
+  bc_tool->dx =   bc_tool->config->contrast   * 127.0;
+  bc_tool->dy = - bc_tool->config->brightness * 127.0;
 
   gimp_tool_control_activate (tool->control);
   tool->display = display;
@@ -269,8 +270,8 @@
   bc_tool->dx =   (coords->x - bc_tool->x);
   bc_tool->dy = - (coords->y - bc_tool->y);
 
-  bc_tool->brightness = CLAMP (bc_tool->dy, -127.0, 127.0);
-  bc_tool->contrast   = CLAMP (bc_tool->dx, -127.0, 127.0);
+  bc_tool->config->brightness = CLAMP (bc_tool->dy, -127.0, 127.0) / 127.0;
+  bc_tool->config->contrast   = CLAMP (bc_tool->dx, -127.0, 127.0) / 127.0;
 
   brightness_contrast_update_sliders (bc_tool);
   gimp_image_map_tool_preview (im_tool);
@@ -302,7 +303,7 @@
   /*  Create the brightness scale widget  */
   data = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
                                _("_Brightness:"), SLIDER_WIDTH, -1,
-                               bc_tool->brightness,
+                               bc_tool->config->brightness * 127.0,
                                -127.0, 127.0, 1.0, 10.0, 0,
                                TRUE, 0.0, 0.0,
                                NULL, NULL);
@@ -317,7 +318,7 @@
   /*  Create the contrast scale widget  */
   data = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
                                _("Con_trast:"), SLIDER_WIDTH, -1,
-                               bc_tool->contrast,
+                               bc_tool->config->contrast * 127.0,
                                -127.0, 127.0, 1.0, 10.0, 0,
                                TRUE, 0.0, 0.0,
                                NULL, NULL);
@@ -335,8 +336,7 @@
 {
   GimpBrightnessContrastTool *bc_tool = GIMP_BRIGHTNESS_CONTRAST_TOOL (im_tool);
 
-  bc_tool->brightness = 0.0;
-  bc_tool->contrast   = 0.0;
+  gimp_config_reset (GIMP_CONFIG (bc_tool->config));
 
   brightness_contrast_update_sliders (bc_tool);
 }
@@ -344,17 +344,24 @@
 static void
 brightness_contrast_update_sliders (GimpBrightnessContrastTool *bc_tool)
 {
-  gtk_adjustment_set_value (bc_tool->brightness_data, bc_tool->brightness);
-  gtk_adjustment_set_value (bc_tool->contrast_data,   bc_tool->contrast);
+  gtk_adjustment_set_value (bc_tool->brightness_data,
+                            bc_tool->config->brightness * 127.0);
+  gtk_adjustment_set_value (bc_tool->contrast_data,
+                            bc_tool->config->contrast   * 127.0);
 }
 
 static void
 brightness_contrast_brightness_changed (GtkAdjustment              *adjustment,
                                         GimpBrightnessContrastTool *bc_tool)
 {
-  if (bc_tool->brightness != adjustment->value)
+  GimpBrightnessContrastConfig *config = bc_tool->config;
+  gdouble                       value  = adjustment->value / 127.0;
+
+  if (config->brightness != value)
     {
-      bc_tool->brightness = adjustment->value;
+      g_object_set (config,
+                    "brightness", value,
+                    NULL);
 
       gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (bc_tool));
     }
@@ -364,9 +371,14 @@
 brightness_contrast_contrast_changed (GtkAdjustment              *adjustment,
                                       GimpBrightnessContrastTool *bc_tool)
 {
-  if (bc_tool->contrast != adjustment->value)
+  GimpBrightnessContrastConfig *config = bc_tool->config;
+  gdouble                       value  = adjustment->value / 127.0;
+
+  if (config->contrast != value)
     {
-      bc_tool->contrast = adjustment->value;
+      g_object_set (config,
+                    "contrast", value,
+                    NULL);
 
       gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (bc_tool));
     }

Modified: trunk/app/tools/gimpbrightnesscontrasttool.h
==============================================================================
--- trunk/app/tools/gimpbrightnesscontrasttool.h	(original)
+++ trunk/app/tools/gimpbrightnesscontrasttool.h	Mon Jan 28 18:45:53 2008
@@ -36,18 +36,17 @@
 
 struct _GimpBrightnessContrastTool
 {
-  GimpImageMapTool  parent_instance;
+  GimpImageMapTool              parent_instance;
 
-  gdouble           x, y;
-  gdouble           dx, dy;
+  GimpBrightnessContrastConfig *config;
+  GimpLut                      *lut;
 
-  gdouble           brightness;
-  gdouble           contrast;
-  GimpLut          *lut;
+  gdouble                       x, y;
+  gdouble                       dx, dy;
 
   /*  dialog  */
-  GtkAdjustment    *brightness_data;
-  GtkAdjustment    *contrast_data;
+  GtkAdjustment                *brightness_data;
+  GtkAdjustment                *contrast_data;
 };
 
 struct _GimpBrightnessContrastToolClass



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