[gimp] app: allow to set a color for GimpCurveView's primary curve



commit ec196a8ac4d930d10326cdbffebaa987dd14bc04
Author: Michael Natterer <mitch gimp org>
Date:   Thu Feb 10 20:05:50 2011 +0100

    app: allow to set a color for GimpCurveView's primary curve
    
    and redo how the curves tool sets its curves in order to support this
    without code duplication. Also change the color of the yellow curve in
    the dynamics output editor to orange because yellow is hardly visible.

 app/tools/gimpcurvestool.c             |   66 ++++++++++++-------------------
 app/widgets/gimpcurveview.c            |   19 ++++++++-
 app/widgets/gimpcurveview.h            |    4 +-
 app/widgets/gimpdeviceinfoeditor.c     |    2 +-
 app/widgets/gimpdynamicsoutputeditor.c |    6 +-
 5 files changed, 49 insertions(+), 48 deletions(-)
---
diff --git a/app/tools/gimpcurvestool.c b/app/tools/gimpcurvestool.c
index 6a77e8d..df9bcee 100644
--- a/app/tools/gimpcurvestool.c
+++ b/app/tools/gimpcurvestool.c
@@ -125,6 +125,15 @@ G_DEFINE_TYPE (GimpCurvesTool, gimp_curves_tool, GIMP_TYPE_IMAGE_MAP_TOOL)
 
 #define parent_class gimp_curves_tool_parent_class
 
+static GimpRGB channel_colors[GIMP_HISTOGRAM_RGB] =
+{
+  { 0.0, 0.0, 0.0, 1.0 },
+  { 1.0, 0.0, 0.0, 1.0 },
+  { 0.0, 1.0, 0.0, 1.0 },
+  { 0.0, 0.0, 1.0, 1.0 },
+  { 0.5, 0.5, 0.5, 1.0 }
+};
+
 
 /*  public functions  */
 
@@ -531,7 +540,8 @@ gimp_curves_tool_dialog (GimpImageMapTool *image_map_tool)
                 "subdivisions", 1,
                 NULL);
   gimp_curve_view_set_curve (GIMP_CURVE_VIEW (tool->graph),
-                             config->curve[config->channel]);
+                             config->curve[config->channel],
+                             &channel_colors[config->channel]);
   gtk_container_add (GTK_CONTAINER (frame), tool->graph);
   gtk_widget_show (tool->graph);
 
@@ -740,9 +750,7 @@ gimp_curves_tool_config_notify (GObject        *object,
 
   if (! strcmp (pspec->name, "channel"))
     {
-      GimpRGB red;
-      GimpRGB green;
-      GimpRGB blue;
+      GimpHistogramChannel channel;
 
       gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (tool->channel_menu),
                                      config->channel);
@@ -787,45 +795,23 @@ gimp_curves_tool_config_notify (GObject        *object,
 
       gimp_curve_view_remove_all_backgrounds (GIMP_CURVE_VIEW (tool->graph));
 
-      gimp_rgb_set (&red,   1.0, 0.0, 0.0);
-      gimp_rgb_set (&green, 0.0, 1.0, 0.0);
-      gimp_rgb_set (&blue,  0.0, 0.0, 1.0);
-
-      switch (config->channel)
+      for (channel = GIMP_HISTOGRAM_VALUE;
+           channel <= GIMP_HISTOGRAM_ALPHA;
+           channel++)
         {
-        case GIMP_HISTOGRAM_RED:
-          gimp_curve_view_add_background (GIMP_CURVE_VIEW (tool->graph),
-                                          config->curve[GIMP_HISTOGRAM_GREEN],
-                                          &green);
-          gimp_curve_view_add_background (GIMP_CURVE_VIEW (tool->graph),
-                                          config->curve[GIMP_HISTOGRAM_BLUE],
-                                          &blue);
-          break;
-
-        case GIMP_HISTOGRAM_GREEN:
-          gimp_curve_view_add_background (GIMP_CURVE_VIEW (tool->graph),
-                                          config->curve[GIMP_HISTOGRAM_RED],
-                                          &red);
-          gimp_curve_view_add_background (GIMP_CURVE_VIEW (tool->graph),
-                                          config->curve[GIMP_HISTOGRAM_BLUE],
-                                          &blue);
-          break;
-
-        case GIMP_HISTOGRAM_BLUE:
-          gimp_curve_view_add_background (GIMP_CURVE_VIEW (tool->graph),
-                                          config->curve[GIMP_HISTOGRAM_RED],
-                                          &red);
-          gimp_curve_view_add_background (GIMP_CURVE_VIEW (tool->graph),
-                                          config->curve[GIMP_HISTOGRAM_GREEN],
-                                          &green);
-          break;
-
-        default:
-          break;
+          if (channel == config->channel)
+            {
+              gimp_curve_view_set_curve (GIMP_CURVE_VIEW (tool->graph), curve,
+                                         &channel_colors[channel]);
+            }
+          else
+            {
+              gimp_curve_view_add_background (GIMP_CURVE_VIEW (tool->graph),
+                                              config->curve[channel],
+                                              &channel_colors[channel]);
+            }
         }
 
-      gimp_curve_view_set_curve (GIMP_CURVE_VIEW (tool->graph), curve);
-
       gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (tool->curve_type),
                                      curve->curve_type);
     }
diff --git a/app/widgets/gimpcurveview.c b/app/widgets/gimpcurveview.c
index b4138b5..3f5d4ff 100644
--- a/app/widgets/gimpcurveview.c
+++ b/app/widgets/gimpcurveview.c
@@ -24,6 +24,7 @@
 
 #include "libgimpconfig/gimpconfig.h"
 #include "libgimpmath/gimpmath.h"
+#include "libgimpwidgets/gimpwidgets.h"
 
 #include "widgets-types.h"
 
@@ -242,7 +243,7 @@ gimp_curve_view_dispose (GObject *object)
 {
   GimpCurveView *view = GIMP_CURVE_VIEW (object);
 
-  gimp_curve_view_set_curve (view, NULL);
+  gimp_curve_view_set_curve (view, NULL, NULL);
 
   if (view->bg_curves)
     gimp_curve_view_remove_all_backgrounds (view);
@@ -513,7 +514,10 @@ gimp_curve_view_expose (GtkWidget      *widget,
     }
 
   /*  Draw the curve  */
-  gdk_cairo_set_source_color (cr, &style->text[GTK_STATE_NORMAL]);
+  if (view->curve_color)
+    gimp_cairo_set_source_rgb (cr, view->curve_color);
+  else
+    gdk_cairo_set_source_color (cr, &style->text[GTK_STATE_NORMAL]);
 
   gimp_curve_view_draw_curve (view, cr, view->curve,
                               width, height, border);
@@ -1088,7 +1092,8 @@ gimp_curve_view_curve_dirty (GimpCurve     *curve,
 
 void
 gimp_curve_view_set_curve (GimpCurveView *view,
-                           GimpCurve     *curve)
+                           GimpCurve     *curve,
+                           const GimpRGB *color)
 {
   g_return_if_fail (GIMP_IS_CURVE_VIEW (view));
   g_return_if_fail (curve == NULL || GIMP_IS_CURVE (curve));
@@ -1114,6 +1119,14 @@ gimp_curve_view_set_curve (GimpCurveView *view,
                         view);
     }
 
+  if (view->curve_color)
+    g_free (view->curve_color);
+
+  if (color)
+    view->curve_color = g_memdup (color, sizeof (GimpRGB));
+  else
+    view->curve_color = NULL;
+
   gtk_widget_queue_draw (GTK_WIDGET (view));
 }
 
diff --git a/app/widgets/gimpcurveview.h b/app/widgets/gimpcurveview.h
index 58a3de0..fae2f86 100644
--- a/app/widgets/gimpcurveview.h
+++ b/app/widgets/gimpcurveview.h
@@ -39,6 +39,7 @@ struct _GimpCurveView
   Gimp              *gimp; /* only needed for copy & paste */
 
   GimpCurve         *curve;
+  GimpRGB           *curve_color;
 
   GList             *bg_curves;
 
@@ -84,7 +85,8 @@ GType       gimp_curve_view_get_type          (void) G_GNUC_CONST;
 GtkWidget * gimp_curve_view_new               (void);
 
 void        gimp_curve_view_set_curve         (GimpCurveView *view,
-                                               GimpCurve     *curve);
+                                               GimpCurve     *curve,
+                                               const GimpRGB *color);
 GimpCurve * gimp_curve_view_get_curve         (GimpCurveView *view);
 
 void        gimp_curve_view_add_background    (GimpCurveView *view,
diff --git a/app/widgets/gimpdeviceinfoeditor.c b/app/widgets/gimpdeviceinfoeditor.c
index f5eeb89..e64bc6a 100644
--- a/app/widgets/gimpdeviceinfoeditor.c
+++ b/app/widgets/gimpdeviceinfoeditor.c
@@ -448,7 +448,7 @@ gimp_device_info_editor_constructed (GObject *object)
           gtk_container_add (GTK_CONTAINER (frame), view);
           gtk_widget_show (view);
 
-          gimp_curve_view_set_curve (GIMP_CURVE_VIEW (view), curve);
+          gimp_curve_view_set_curve (GIMP_CURVE_VIEW (view), curve, NULL);
 
           hbox = gtk_hbox_new (FALSE, 0);
           gtk_box_set_spacing (GTK_BOX (hbox), 6);
diff --git a/app/widgets/gimpdynamicsoutputeditor.c b/app/widgets/gimpdynamicsoutputeditor.c
index 908075b..6470920 100644
--- a/app/widgets/gimpdynamicsoutputeditor.c
+++ b/app/widgets/gimpdynamicsoutputeditor.c
@@ -68,7 +68,7 @@ inputs[] =
   { "use-pressure",  "pressure-curve",  N_("Pressure"),  { 1.0, 0.0, 0.0, 1.0 } },
   { "use-velocity",  "velocity-curve",  N_("Velocity"),  { 0.0, 1.0, 0.0, 1.0 } },
   { "use-direction", "direction-curve", N_("Direction"), { 0.0, 0.0, 1.0, 1.0 } },
-  { "use-tilt",      "tilt-curve",      N_("Tilt"),      { 1.0, 1.0, 0.0, 1.0 } },
+  { "use-tilt",      "tilt-curve",      N_("Tilt"),      { 1.0, 0.5, 0.0, 1.0 } },
   { "use-wheel",     "wheel-curve",     N_("Wheel"),     { 1.0, 0.0, 1.0, 1.0 } },
   { "use-random",    "random-curve",    N_("Random"),    { 0.0, 1.0, 1.0, 1.0 } },
   { "use-fade",      "fade-curve",      N_("Fade"),      { 0.2, 0.2, 0.2, 1.0 } }
@@ -394,7 +394,7 @@ gimp_dynamics_output_editor_activate_input (GimpDynamicsOutputEditor *editor,
   GimpDynamicsOutputEditorPrivate *private = GET_PRIVATE (editor);
   gint                             i;
 
-  gimp_curve_view_set_curve (GIMP_CURVE_VIEW (private->curve_view), NULL);
+  gimp_curve_view_set_curve (GIMP_CURVE_VIEW (private->curve_view), NULL, NULL);
   gimp_curve_view_remove_all_backgrounds (GIMP_CURVE_VIEW (private->curve_view));
 
   for (i = 0; i < G_N_ELEMENTS (inputs); i++)
@@ -410,7 +410,7 @@ gimp_dynamics_output_editor_activate_input (GimpDynamicsOutputEditor *editor,
       if (input == i)
         {
           gimp_curve_view_set_curve (GIMP_CURVE_VIEW (private->curve_view),
-                                     input_curve);
+                                     input_curve, &inputs[i].color);
           private->active_curve = input_curve;
         }
       else if (use_input)



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