This was something I needed a couple of weeks ago, and was surprised it
wasn't in the gimp already.  

It allows a user to dnd a color from any color dnd source to the by color
select window to select that color.

Enjoy
Sam


===
Sam Phillips <[EMAIL PROTECTED]>               http://www.usaworks.com/~sam
``Yeah, well I've got a dream too.  But it's about singing and dancing and 
  making people happy.  That's the kind of dream that gets better the more 
  people you share it with.  And, I've found a whole bunch  of friends who 
  have the same dream.  And that kinda makes us like a family.''
                                                -- Kermit The Frog
Index: app/by_color_select.c
===================================================================
RCS file: /cvs/gnome/gimp/app/by_color_select.c,v
retrieving revision 1.37
diff -u -r1.37 by_color_select.c
--- app/by_color_select.c       1999/09/27 17:58:07     1.37
+++ app/by_color_select.c       1999/10/09 17:16:38
@@ -32,6 +32,8 @@
 #include "gdisplay.h"
 #include "selection_options.h"
 
+#include "gimpdnd.h"
+
 #include "libgimp/gimpintl.h"
 
 #include "tile.h"                      /* ick. */
@@ -71,6 +73,15 @@
 /*  the by color selection dialog  */
 static ByColorDialog *  by_color_dialog = NULL;
 
+/*  dnd stuff  */
+static GtkTargetEntry by_color_select_image_target_table[] =
+{
+  GIMP_TARGET_COLOR
+};
+static guint n_by_color_select_image_targets = 
+    (sizeof (by_color_select_image_target_table) /
+     sizeof (by_color_select_image_target_table[0]));
+static void by_color_select_color_drop (GtkWidget*, guchar, guchar, guchar, 
+gpointer);
 
 /*  by_color select action functions  */
 
@@ -592,6 +603,17 @@
                      bcd);
   gtk_container_add (GTK_CONTAINER (frame), bcd->preview);
 
+  /* dnd colors to the image window */
+  gtk_drag_dest_set (bcd->preview, 
+                     GTK_DEST_DEFAULT_HIGHLIGHT |
+                     GTK_DEST_DEFAULT_MOTION |
+                     GTK_DEST_DEFAULT_DROP, 
+                     by_color_select_image_target_table, 
+                     n_by_color_select_image_targets,
+                     GDK_ACTION_COPY);
+  gimp_dnd_color_dest_set (bcd->preview, by_color_select_color_drop, bcd);
+
+
   gtk_widget_show (bcd->preview);
   gtk_widget_show (frame);
   gtk_widget_show (util_box);
@@ -928,6 +950,43 @@
                   by_color_options->sample_merged);
 
   tile_release (tile, FALSE);
+
+  /*  show selection on all views  */
+  gdisplays_flush ();
+
+  /*  update the preview window  */
+  by_color_select_render (bcd, bcd->gimage);
+  by_color_select_draw (bcd, bcd->gimage);
+}
+
+static void
+by_color_select_color_drop (GtkWidget *widget,
+                            guchar      r,
+                            guchar      g,
+                            guchar      b,
+                            gpointer    data)
+
+{
+  GimpDrawable *drawable;
+  ByColorDialog *bcd;
+  guchar col[3];
+
+  bcd = (ByColorDialog*) data;
+  drawable = gimage_active_drawable (bcd->gimage);
+  
+  col[0] = r;
+  col[1] = g;
+  col[2] = b;
+
+  by_color_select (bcd->gimage, 
+                   drawable, 
+                   col, 
+                   bcd->threshold,
+                   bcd->operation,
+                   by_color_options->antialias,
+                   by_color_options->feather,
+                   by_color_options->feather_radius,
+                   by_color_options->sample_merged);     
 
   /*  show selection on all views  */
   gdisplays_flush ();

Reply via email to