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



Author: mitch
Date: Tue May 13 20:52:24 2008
New Revision: 25654
URL: http://svn.gnome.org/viewvc/gimp?rev=25654&view=rev

Log:
2008-05-13  Michael Natterer  <mitch gimp org>

	First prototype of a button in the levels tool dialog that will
	jump the the curves tool with the same settings:

	* app/gegl/gimplevelsconfig.[ch]: add new function
	gimp_levels_config_to_curves_config() which converts a
	GimpLevelsConfig to a GimpCurvesConfig. Still lacks support
	for gamma.

	* app/tools/gimplevelstool.c: add "Edit this Settings as Curves"
	button and jump to curves when clicked. Still ugly.



Modified:
   trunk/ChangeLog
   trunk/app/gegl/gimplevelsconfig.c
   trunk/app/gegl/gimplevelsconfig.h
   trunk/app/tools/gimplevelstool.c

Modified: trunk/app/gegl/gimplevelsconfig.c
==============================================================================
--- trunk/app/gegl/gimplevelsconfig.c	(original)
+++ trunk/app/gegl/gimplevelsconfig.c	Tue May 13 20:52:24 2008
@@ -38,6 +38,9 @@
 /*  temp cruft  */
 #include "base/levels.h"
 
+#include "core/gimpcurve.h"
+
+#include "gimpcurvesconfig.h"
 #include "gimplevelsconfig.h"
 
 #include "gimp-intl.h"
@@ -522,6 +525,58 @@
   g_object_thaw_notify (G_OBJECT (config));
 }
 
+GimpCurvesConfig *
+gimp_levels_config_to_curves_config (GimpLevelsConfig *config)
+{
+  GimpCurvesConfig     *curves;
+  GimpHistogramChannel  channel;
+
+  g_return_val_if_fail (GIMP_IS_LEVELS_CONFIG (config), NULL);
+
+  curves = g_object_new (GIMP_TYPE_CURVES_CONFIG, NULL);
+
+  for (channel = GIMP_HISTOGRAM_VALUE;
+       channel <= GIMP_HISTOGRAM_ALPHA;
+       channel++)
+    {
+      GimpCurve *curve = curves->curve[channel];
+      gint       border_point;
+      gint       point;
+
+      if (config->low_input[channel]  > 0.0 ||
+          config->low_output[channel] > 0.0)
+        {
+          border_point = gimp_curve_get_closest_point (curve, 0.0);
+          point = gimp_curve_get_closest_point (curve,
+                                                config->low_input[channel]);
+
+          gimp_curve_set_point (curve, point,
+                                config->low_input[channel],
+                                config->low_output[channel]);
+
+          if (point != border_point)
+            gimp_curve_set_point (curve, border_point, -1, -1);
+        }
+
+      if (config->high_input[channel]  < 1.0 ||
+          config->high_output[channel] < 1.0)
+        {
+          border_point = gimp_curve_get_closest_point (curve, 1.0);
+          point = gimp_curve_get_closest_point (curve,
+                                                config->high_input[channel]);
+
+          gimp_curve_set_point (curve, point,
+                                config->high_input[channel],
+                                config->high_output[channel]);
+
+          if (point != border_point)
+            gimp_curve_set_point (curve, border_point, -1, -1);
+        }
+    }
+
+  return curves;
+}
+
 gboolean
 gimp_levels_config_load_cruft (GimpLevelsConfig  *config,
                                gpointer           fp,

Modified: trunk/app/gegl/gimplevelsconfig.h
==============================================================================
--- trunk/app/gegl/gimplevelsconfig.h	(original)
+++ trunk/app/gegl/gimplevelsconfig.h	Tue May 13 20:52:24 2008
@@ -73,6 +73,9 @@
                                                 const GimpRGB         *gray,
                                                 const GimpRGB         *white);
 
+GimpCurvesConfig *
+           gimp_levels_config_to_curves_config (GimpLevelsConfig      *config);
+
 gboolean   gimp_levels_config_load_cruft       (GimpLevelsConfig      *config,
                                                 gpointer               fp,
                                                 GError               **error);

Modified: trunk/app/tools/gimplevelstool.c
==============================================================================
--- trunk/app/tools/gimplevelstool.c	(original)
+++ trunk/app/tools/gimplevelstool.c	Tue May 13 20:52:24 2008
@@ -34,6 +34,9 @@
 #include "gegl/gimplevelsconfig.h"
 #include "gegl/gimpoperationlevels.h"
 
+#include "core/gimp.h"
+#include "core/gimpcontainer.h"
+#include "core/gimpcontext.h"
 #include "core/gimpdrawable.h"
 #include "core/gimpdrawable-histogram.h"
 #include "core/gimpimage.h"
@@ -47,6 +50,7 @@
 
 #include "gimphistogramoptions.h"
 #include "gimplevelstool.h"
+#include "tool_manager.h"
 
 #include "gimp-intl.h"
 
@@ -119,6 +123,9 @@
 static void       levels_input_picker_toggled     (GtkWidget         *widget,
                                                    GimpLevelsTool    *tool);
 
+static void       levels_to_curves_callback       (GtkWidget         *widget,
+                                                   GimpLevelsTool    *tool);
+
 
 G_DEFINE_TYPE (GimpLevelsTool, gimp_levels_tool, GIMP_TYPE_IMAGE_MAP_TOOL)
 
@@ -620,11 +627,11 @@
 
   /*  all channels frame  */
   frame = gimp_frame_new (_("All Channels"));
-  gtk_box_pack_end (GTK_BOX (image_map_tool->main_vbox), frame,
-                    FALSE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (image_map_tool->main_vbox), frame,
+                      FALSE, FALSE, 0);
   gtk_widget_show (frame);
 
-  hbox = gtk_hbox_new (FALSE, 0);
+  hbox = gtk_hbox_new (FALSE, 6);
   gtk_container_add (GTK_CONTAINER (frame), hbox);
   gtk_widget_show (hbox);
 
@@ -673,6 +680,17 @@
                     G_CALLBACK (gimp_levels_tool_dialog_unmap),
                     tool);
 
+  button = gtk_button_new_from_stock (GIMP_STOCK_TOOL_LEVELS);
+  gtk_button_set_label (GTK_BUTTON (button),
+                        _("Edit this Settings as Curves"));
+  gtk_box_pack_start (GTK_BOX (image_map_tool->main_vbox), button,
+                      FALSE, FALSE, 0);
+  gtk_widget_show (button);
+
+  g_signal_connect (button, "clicked",
+                    G_CALLBACK (levels_to_curves_callback),
+                    tool);
+
   gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (tool->channel_menu),
                                  config->channel);
 }
@@ -1113,3 +1131,37 @@
                                     value, tool->config->channel, color);
     }
 }
+
+static void
+levels_to_curves_callback (GtkWidget      *widget,
+                           GimpLevelsTool *tool)
+{
+  GimpCurvesConfig *curves;
+  GimpDisplay      *display;
+  GimpContext      *user_context;
+  GimpToolInfo     *tool_info;
+  GimpTool         *new_tool;
+
+  curves = gimp_levels_config_to_curves_config (tool->config);
+
+  display = GIMP_TOOL (tool)->display;
+
+  user_context = gimp_get_user_context (display->gimp);
+
+  tool_info = gimp_container_get_child_by_name (display->gimp->tool_info_list,
+                                                "gimp-curves-tool");
+
+  g_object_ref (tool);
+
+  gimp_context_set_tool (user_context, tool_info);
+  tool_manager_initialize_active (display->gimp, display);
+
+  new_tool = tool_manager_get_active (display->gimp);
+
+  gimp_config_copy (GIMP_CONFIG (curves),
+                    GIMP_CONFIG (GIMP_IMAGE_MAP_TOOL (new_tool)->config),
+                    0);
+
+  g_object_unref (tool);
+  g_object_unref (curves);
+}



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