app/channels_dialog.c app/color_area.c app/color_panel.c

1999-08-24  Michael Natterer  <mitschel@cs.tu-berlin.de>

	* app/channels_dialog.c
	* app/color_area.c
	* app/color_panel.c
	* app/color_select.c
	* app/disp_callbacks.[ch]
	* app/gimpdnd.[ch]: pass the widget to the color dnd callbacks.

	* app/palette.c: color dnd for the palette dialog. Shift+click
	toggles setting the FG/BG color now.
This commit is contained in:
Michael Natterer 1999-08-24 00:36:57 +00:00 committed by Michael Natterer
parent 90178ccb3a
commit bb0447f165
24 changed files with 598 additions and 210 deletions

View File

@ -1,3 +1,15 @@
1999-08-24 Michael Natterer <mitschel@cs.tu-berlin.de>
* app/channels_dialog.c
* app/color_area.c
* app/color_panel.c
* app/color_select.c
* app/disp_callbacks.[ch]
* app/gimpdnd.[ch]: pass the widget to the color dnd callbacks.
* app/palette.c: color dnd for the palette dialog. Shift+click
toggles setting the FG/BG color now.
1999-08-24 Michael Natterer <mitschel@cs.tu-berlin.de>
* app/color_select.[ch]: color dnd for the standard color

View File

@ -156,8 +156,9 @@ static void channel_widget_drag_leave_callback (GtkWidget *,
guint);
static void channel_widget_drag_indicator_callback (GtkWidget *, gpointer);
static void channel_widget_set_color (gpointer,
guchar, guchar, guchar);
static void channel_widget_drop_color (GtkWidget *,
guchar, guchar, guchar,
gpointer);
static void channel_widget_draw_drop_indicator (ChannelWidget *, GimpDropType);
static void channel_widget_delete (ChannelWidget *);
static void channel_widget_select_update (GtkWidget *, gpointer);
@ -1387,7 +1388,7 @@ channel_widget_create (GImage *gimage,
channel_color_target_table, n_channel_color_targets,
GDK_ACTION_MOVE | GDK_ACTION_COPY);
gimp_dnd_color_dest_set (list_item,
channel_widget_set_color,
channel_widget_drop_color,
(gpointer) channel_widget);
gtk_signal_connect (GTK_OBJECT (list_item), "drag_leave",
@ -1630,10 +1631,11 @@ channel_widget_drag_indicator_callback (GtkWidget *widget,
}
static void
channel_widget_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
channel_widget_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
ChannelWidget *channel_widget = (ChannelWidget *) data;
Channel *channel = channel_widget->channel;

View File

@ -35,8 +35,10 @@ typedef enum
} ColorAreaTarget;
/* local function prototypes */
static void color_area_set_color (gpointer, guchar, guchar, guchar);
static void color_area_get_color (gpointer, guchar *, guchar *, guchar *);
static void color_area_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
static void color_area_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
/* Global variables */
gint active_color = FOREGROUND;
@ -405,7 +407,7 @@ color_area_create (gint width,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
color_area_target_table, n_color_area_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (color_area, color_area_get_color, NULL);
gimp_dnd_color_source_set (color_area, color_area_drag_color, NULL);
gtk_drag_dest_set (color_area,
GTK_DEST_DEFAULT_HIGHLIGHT |
@ -413,7 +415,7 @@ color_area_create (gint width,
GTK_DEST_DEFAULT_DROP,
color_area_target_table, n_color_area_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (color_area, color_area_set_color, NULL);
gimp_dnd_color_dest_set (color_area, color_area_drop_color, NULL);
return color_area;
}
@ -425,10 +427,11 @@ color_area_update ()
}
static void
color_area_get_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_area_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
if (active_color == FOREGROUND)
palette_get_foreground (r, g, b);
@ -437,10 +440,11 @@ color_area_get_color (gpointer data,
}
static void
color_area_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_area_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
if (color_notebook_active &&
active_color == edit_color)

View File

@ -46,8 +46,10 @@ static gint color_panel_events (GtkWidget *, GdkEvent *);
static void color_panel_select_callback (gint, gint, gint,
ColorNotebookState, void *);
static void color_panel_get_color (gpointer, guchar *, guchar *, guchar *);
static void color_panel_set_color (gpointer, guchar, guchar, guchar);
static void color_panel_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
static void color_panel_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
/* dnd stuff */
static GtkTargetEntry color_panel_target_table[] =
@ -104,7 +106,7 @@ color_panel_new (guchar *initial,
color_panel_target_table, n_color_panel_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (private->drawing_area,
color_panel_get_color, color_panel);
color_panel_drag_color, color_panel);
gtk_drag_dest_set (private->drawing_area,
GTK_DEST_DEFAULT_HIGHLIGHT |
@ -113,7 +115,7 @@ color_panel_new (guchar *initial,
color_panel_target_table, n_color_panel_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (private->drawing_area,
color_panel_set_color, color_panel);
color_panel_drop_color, color_panel);
return color_panel;
}
@ -266,10 +268,11 @@ color_panel_select_callback (gint r,
}
static void
color_panel_get_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_panel_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorPanel *color_panel = data;
@ -279,10 +282,11 @@ color_panel_get_color (gpointer data,
}
static void
color_panel_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_panel_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
ColorPanel *color_panel = data;
ColorPanelPrivate *private = (ColorPanelPrivate *) color_panel->private_part;

View File

@ -87,12 +87,15 @@ struct _ColorSelectFill
static GtkWidget * color_select_widget_new (ColorSelect *, gint, gint, gint);
static void color_select_drag_new_color (gpointer,
guchar *, guchar *, guchar *);
static void color_select_drop_new_color (gpointer,
guchar, guchar, guchar);
static void color_select_drag_old_color (gpointer,
guchar *, guchar *, guchar *);
static void color_select_drag_new_color (GtkWidget *,
guchar *, guchar *, guchar *,
gpointer);
static void color_select_drop_new_color (GtkWidget *,
guchar, guchar, guchar,
gpointer);
static void color_select_drag_old_color (GtkWidget *,
guchar *, guchar *, guchar *,
gpointer);
static void color_select_update (ColorSelect *,
ColorSelectUpdateType);
@ -461,10 +464,11 @@ color_select_widget_new (ColorSelect *csp,
}
static void
color_select_drag_new_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_select_drag_new_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorSelect *csp;
@ -476,10 +480,11 @@ color_select_drag_new_color (gpointer data,
}
static void
color_select_drop_new_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_select_drop_new_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
ColorSelect *csp;
@ -500,10 +505,11 @@ color_select_drop_new_color (gpointer data,
}
static void
color_select_drag_old_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_select_drag_old_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorSelect *csp;

View File

@ -754,10 +754,11 @@ gdisplay_drag_drop (GtkWidget *widget,
}
void
gdisplay_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
gdisplay_set_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
GimpImage *gimage;
GimpDrawable *drawable;

View File

@ -38,9 +38,10 @@ gboolean gdisplay_drag_drop (GtkWidget *widget,
gint y,
guint time,
gpointer data);
void gdisplay_set_color (gpointer data,
void gdisplay_set_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b);
guchar b,
gpointer data);
#endif /* __DISP_CALLBACKS_H__ */

View File

@ -754,10 +754,11 @@ gdisplay_drag_drop (GtkWidget *widget,
}
void
gdisplay_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
gdisplay_set_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
GimpImage *gimage;
GimpDrawable *drawable;

View File

@ -38,9 +38,10 @@ gboolean gdisplay_drag_drop (GtkWidget *widget,
gint y,
guint time,
gpointer data);
void gdisplay_set_color (gpointer data,
void gdisplay_set_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b);
guchar b,
gpointer data);
#endif /* __DISP_CALLBACKS_H__ */

View File

@ -754,10 +754,11 @@ gdisplay_drag_drop (GtkWidget *widget,
}
void
gdisplay_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
gdisplay_set_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
GimpImage *gimage;
GimpDrawable *drawable;

View File

@ -38,9 +38,10 @@ gboolean gdisplay_drag_drop (GtkWidget *widget,
gint y,
guint time,
gpointer data);
void gdisplay_set_color (gpointer data,
void gdisplay_set_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b);
guchar b,
gpointer data);
#endif /* __DISP_CALLBACKS_H__ */

View File

@ -231,11 +231,11 @@ gimp_dnd_color_drag_begin (GtkWidget *widget,
GtkWidget *window;
GdkColor bg;
guchar r, g, b;
GimpDndGetColorFunc get_color_func;
GimpDndDragColorFunc get_color_func;
get_color_func =
(GimpDndGetColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
(GimpDndDragColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
if (! get_color_func)
return;
@ -249,7 +249,7 @@ gimp_dnd_color_drag_begin (GtkWidget *widget,
window,
(GtkDestroyNotify) gtk_widget_destroy);
(* get_color_func) (data, &r, &g, &b);
(* get_color_func) (widget, &r, &g, &b, data);
bg.red = 0xff * r;
bg.green = 0xff * g;
@ -279,16 +279,16 @@ gimp_dnd_color_drag_handle (GtkWidget *widget,
{
guint16 vals[4];
guchar r, g, b;
GimpDndGetColorFunc get_color_func;
GimpDndDragColorFunc get_color_func;
get_color_func =
(GimpDndGetColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
(GimpDndDragColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
if (! get_color_func)
return;
(* get_color_func) (data, &r, &g, &b);
(* get_color_func) (widget, &r, &g, &b, data);
vals[0] = r * 0xff;
vals[1] = g * 0xff;
@ -312,11 +312,11 @@ gimp_dnd_color_drop_handle (GtkWidget *widget,
{
guint16 *vals;
guchar r, g, b;
GimpDndSetColorFunc set_color_func;
GimpDndDropColorFunc set_color_func;
set_color_func =
(GimpDndSetColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_set_color_func");
(GimpDndDropColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_set_color_func");
if (! set_color_func)
return;
@ -337,13 +337,13 @@ gimp_dnd_color_drop_handle (GtkWidget *widget,
g = vals[1] / 0xff;
b = vals[2] / 0xff;
(* set_color_func) (data, r, g, b);
(* set_color_func) (widget, r, g, b, data);
}
void
gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndGetColorFunc get_color_func,
gpointer data)
gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndDragColorFunc get_color_func,
gpointer data)
{
gtk_signal_connect (GTK_OBJECT (widget), "drag_begin",
GTK_SIGNAL_FUNC (gimp_dnd_color_drag_begin),
@ -360,9 +360,9 @@ gimp_dnd_color_source_set (GtkWidget *widget,
}
void
gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndSetColorFunc set_color_func,
gpointer data)
gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndDropColorFunc set_color_func,
gpointer data)
{
gtk_signal_connect (GTK_OBJECT (widget), "drag_data_received",
GTK_SIGNAL_FUNC (gimp_dnd_color_drop_handle),

View File

@ -82,15 +82,17 @@ void gimp_dnd_set_drawable_preview_icon (GtkWidget *widget,
/* color dnd functions */
typedef void (*GimpDndSetColorFunc) (gpointer, guchar, guchar, guchar);
typedef void (*GimpDndGetColorFunc) (gpointer, guchar *, guchar *, guchar *);
typedef void (*GimpDndDropColorFunc) (GtkWidget *,
guchar, guchar, guchar, gpointer);
typedef void (*GimpDndDragColorFunc) (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
void gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndGetColorFunc get_color_func,
gpointer data);
void gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndDragColorFunc get_color_func,
gpointer data);
void gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndSetColorFunc set_color_func,
gpointer data);
void gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndDropColorFunc set_color_func,
gpointer data);
#endif /* __GIMP_DND_H__ */

View File

@ -156,8 +156,9 @@ static void channel_widget_drag_leave_callback (GtkWidget *,
guint);
static void channel_widget_drag_indicator_callback (GtkWidget *, gpointer);
static void channel_widget_set_color (gpointer,
guchar, guchar, guchar);
static void channel_widget_drop_color (GtkWidget *,
guchar, guchar, guchar,
gpointer);
static void channel_widget_draw_drop_indicator (ChannelWidget *, GimpDropType);
static void channel_widget_delete (ChannelWidget *);
static void channel_widget_select_update (GtkWidget *, gpointer);
@ -1387,7 +1388,7 @@ channel_widget_create (GImage *gimage,
channel_color_target_table, n_channel_color_targets,
GDK_ACTION_MOVE | GDK_ACTION_COPY);
gimp_dnd_color_dest_set (list_item,
channel_widget_set_color,
channel_widget_drop_color,
(gpointer) channel_widget);
gtk_signal_connect (GTK_OBJECT (list_item), "drag_leave",
@ -1630,10 +1631,11 @@ channel_widget_drag_indicator_callback (GtkWidget *widget,
}
static void
channel_widget_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
channel_widget_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
ChannelWidget *channel_widget = (ChannelWidget *) data;
Channel *channel = channel_widget->channel;

View File

@ -35,8 +35,10 @@ typedef enum
} ColorAreaTarget;
/* local function prototypes */
static void color_area_set_color (gpointer, guchar, guchar, guchar);
static void color_area_get_color (gpointer, guchar *, guchar *, guchar *);
static void color_area_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
static void color_area_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
/* Global variables */
gint active_color = FOREGROUND;
@ -405,7 +407,7 @@ color_area_create (gint width,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
color_area_target_table, n_color_area_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (color_area, color_area_get_color, NULL);
gimp_dnd_color_source_set (color_area, color_area_drag_color, NULL);
gtk_drag_dest_set (color_area,
GTK_DEST_DEFAULT_HIGHLIGHT |
@ -413,7 +415,7 @@ color_area_create (gint width,
GTK_DEST_DEFAULT_DROP,
color_area_target_table, n_color_area_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (color_area, color_area_set_color, NULL);
gimp_dnd_color_dest_set (color_area, color_area_drop_color, NULL);
return color_area;
}
@ -425,10 +427,11 @@ color_area_update ()
}
static void
color_area_get_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_area_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
if (active_color == FOREGROUND)
palette_get_foreground (r, g, b);
@ -437,10 +440,11 @@ color_area_get_color (gpointer data,
}
static void
color_area_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_area_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
if (color_notebook_active &&
active_color == edit_color)

View File

@ -87,12 +87,15 @@ struct _ColorSelectFill
static GtkWidget * color_select_widget_new (ColorSelect *, gint, gint, gint);
static void color_select_drag_new_color (gpointer,
guchar *, guchar *, guchar *);
static void color_select_drop_new_color (gpointer,
guchar, guchar, guchar);
static void color_select_drag_old_color (gpointer,
guchar *, guchar *, guchar *);
static void color_select_drag_new_color (GtkWidget *,
guchar *, guchar *, guchar *,
gpointer);
static void color_select_drop_new_color (GtkWidget *,
guchar, guchar, guchar,
gpointer);
static void color_select_drag_old_color (GtkWidget *,
guchar *, guchar *, guchar *,
gpointer);
static void color_select_update (ColorSelect *,
ColorSelectUpdateType);
@ -461,10 +464,11 @@ color_select_widget_new (ColorSelect *csp,
}
static void
color_select_drag_new_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_select_drag_new_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorSelect *csp;
@ -476,10 +480,11 @@ color_select_drag_new_color (gpointer data,
}
static void
color_select_drop_new_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_select_drop_new_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
ColorSelect *csp;
@ -500,10 +505,11 @@ color_select_drop_new_color (gpointer data,
}
static void
color_select_drag_old_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_select_drag_old_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorSelect *csp;

View File

@ -39,6 +39,7 @@
#include "datafiles.h"
#include "devices.h"
#include "errors.h"
#include "gimpdnd.h"
#include "gimprc.h"
#include "gradient_header.h"
#include "gradient.h"
@ -132,6 +133,10 @@ static void palette_entries_save (PaletteEntriesP, char *);
PaletteDialog * create_palette_dialog (gboolean vert);
static void palette_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
static void palette_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
static void palette_draw_entries (PaletteDialog *palette, gint row_start,
gint column_highlight);
static void redraw_palette (PaletteDialog *palette);
@ -162,6 +167,14 @@ static ImportDialog *import_dialog = NULL;
PaletteDialog *top_level_edit_palette = NULL;
PaletteDialog *top_level_palette = NULL;
/* dnd stuff */
static GtkTargetEntry color_palette_target_table[] =
{
GIMP_TARGET_COLOR
};
static guint n_color_palette_targets = (sizeof (color_palette_target_table) /
sizeof (color_palette_target_table[0]));
static void
palette_entries_free (PaletteEntriesP entries)
{
@ -443,7 +456,6 @@ palette_entry_free (PaletteEntryP entry)
g_free (entry);
}
void
palette_free ()
{
@ -1511,9 +1523,19 @@ palette_color_area_events (GtkWidget *widget,
g = palette->color->color[1];
b = palette->color->color[2];
if (active_color == FOREGROUND)
palette_set_foreground (r, g, b);
{
if (bevent->state & GDK_CONTROL_MASK)
palette_set_background (r, g, b);
else
palette_set_foreground (r, g, b);
}
else if (active_color == BACKGROUND)
palette_set_background (r, g, b);
{
if (bevent->state & GDK_CONTROL_MASK)
palette_set_foreground (r, g, b);
else
palette_set_background (r, g, b);
}
palette_draw_entries (palette, row, col);
/* Update the active color name */
@ -2063,10 +2085,25 @@ create_palette_dialog (gint vert)
(GtkSignalFunc) palette_color_area_events,
palette);
gtk_widget_show (palette_region);
gtk_container_add (GTK_CONTAINER (alignment), palette_region);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledwindow),
alignment);
gtk_widget_show (palette_region);
/* dnd stuff */
gtk_drag_source_set (palette_region,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
color_palette_target_table, n_color_palette_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (palette_region, palette_drag_color, palette);
gtk_drag_dest_set (alignment,
GTK_DEST_DEFAULT_HIGHLIGHT |
GTK_DEST_DEFAULT_MOTION |
GTK_DEST_DEFAULT_DROP,
color_palette_target_table, n_color_palette_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (alignment, palette_drop_color, palette);
/* The color name entry */
hbox2 = gtk_hbox_new (FALSE, 2);
@ -2227,6 +2264,77 @@ create_palette_dialog (gint vert)
return palette;
}
static void
palette_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
PaletteDialog *palette;
palette = (PaletteDialog *) data;
if (palette && palette->entries)
{
*r = (guchar) palette->color->color[0];
*g = (guchar) palette->color->color[1];
*b = (guchar) palette->color->color[2];
}
}
static void
palette_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
PaletteDialog *palette;
gchar *name;
gchar *num_buf;
GSList *list;
gint pos = 0;
PaletteEntriesP p_entries = NULL;
palette = (PaletteDialog *) data;
if (palette && palette->entries)
{
name = g_strdup_printf ("#%2x%2x%2x", r, g, b);
palette->color =
palette_add_entry (palette->entries, name, r, g, b);
g_free (name);
redraw_palette (palette);
list = palette_entries_list;
while (list)
{
p_entries = (PaletteEntriesP) list->data;
list = g_slist_next (list);
/* to make sure we get something! */
if (p_entries == NULL)
{
p_entries = default_palette_entries;
}
if (p_entries == palette->entries)
break;
pos++;
}
num_buf = g_strdup_printf ("%d", p_entries->n_colors);;
palette_draw_small_preview (palette->gc, p_entries);
gtk_clist_set_text (GTK_CLIST (palette->clist), pos, 1, num_buf);
palette_select_set_text_all (palette->entries);
palette_select2_set_text_all (palette->entries);
}
}
static void
import_dialog_select_grad_callback (GtkWidget *widget,
gpointer data)

View File

@ -39,6 +39,7 @@
#include "datafiles.h"
#include "devices.h"
#include "errors.h"
#include "gimpdnd.h"
#include "gimprc.h"
#include "gradient_header.h"
#include "gradient.h"
@ -132,6 +133,10 @@ static void palette_entries_save (PaletteEntriesP, char *);
PaletteDialog * create_palette_dialog (gboolean vert);
static void palette_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
static void palette_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
static void palette_draw_entries (PaletteDialog *palette, gint row_start,
gint column_highlight);
static void redraw_palette (PaletteDialog *palette);
@ -162,6 +167,14 @@ static ImportDialog *import_dialog = NULL;
PaletteDialog *top_level_edit_palette = NULL;
PaletteDialog *top_level_palette = NULL;
/* dnd stuff */
static GtkTargetEntry color_palette_target_table[] =
{
GIMP_TARGET_COLOR
};
static guint n_color_palette_targets = (sizeof (color_palette_target_table) /
sizeof (color_palette_target_table[0]));
static void
palette_entries_free (PaletteEntriesP entries)
{
@ -443,7 +456,6 @@ palette_entry_free (PaletteEntryP entry)
g_free (entry);
}
void
palette_free ()
{
@ -1511,9 +1523,19 @@ palette_color_area_events (GtkWidget *widget,
g = palette->color->color[1];
b = palette->color->color[2];
if (active_color == FOREGROUND)
palette_set_foreground (r, g, b);
{
if (bevent->state & GDK_CONTROL_MASK)
palette_set_background (r, g, b);
else
palette_set_foreground (r, g, b);
}
else if (active_color == BACKGROUND)
palette_set_background (r, g, b);
{
if (bevent->state & GDK_CONTROL_MASK)
palette_set_foreground (r, g, b);
else
palette_set_background (r, g, b);
}
palette_draw_entries (palette, row, col);
/* Update the active color name */
@ -2063,10 +2085,25 @@ create_palette_dialog (gint vert)
(GtkSignalFunc) palette_color_area_events,
palette);
gtk_widget_show (palette_region);
gtk_container_add (GTK_CONTAINER (alignment), palette_region);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledwindow),
alignment);
gtk_widget_show (palette_region);
/* dnd stuff */
gtk_drag_source_set (palette_region,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
color_palette_target_table, n_color_palette_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (palette_region, palette_drag_color, palette);
gtk_drag_dest_set (alignment,
GTK_DEST_DEFAULT_HIGHLIGHT |
GTK_DEST_DEFAULT_MOTION |
GTK_DEST_DEFAULT_DROP,
color_palette_target_table, n_color_palette_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (alignment, palette_drop_color, palette);
/* The color name entry */
hbox2 = gtk_hbox_new (FALSE, 2);
@ -2227,6 +2264,77 @@ create_palette_dialog (gint vert)
return palette;
}
static void
palette_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
PaletteDialog *palette;
palette = (PaletteDialog *) data;
if (palette && palette->entries)
{
*r = (guchar) palette->color->color[0];
*g = (guchar) palette->color->color[1];
*b = (guchar) palette->color->color[2];
}
}
static void
palette_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
PaletteDialog *palette;
gchar *name;
gchar *num_buf;
GSList *list;
gint pos = 0;
PaletteEntriesP p_entries = NULL;
palette = (PaletteDialog *) data;
if (palette && palette->entries)
{
name = g_strdup_printf ("#%2x%2x%2x", r, g, b);
palette->color =
palette_add_entry (palette->entries, name, r, g, b);
g_free (name);
redraw_palette (palette);
list = palette_entries_list;
while (list)
{
p_entries = (PaletteEntriesP) list->data;
list = g_slist_next (list);
/* to make sure we get something! */
if (p_entries == NULL)
{
p_entries = default_palette_entries;
}
if (p_entries == palette->entries)
break;
pos++;
}
num_buf = g_strdup_printf ("%d", p_entries->n_colors);;
palette_draw_small_preview (palette->gc, p_entries);
gtk_clist_set_text (GTK_CLIST (palette->clist), pos, 1, num_buf);
palette_select_set_text_all (palette->entries);
palette_select2_set_text_all (palette->entries);
}
}
static void
import_dialog_select_grad_callback (GtkWidget *widget,
gpointer data)

View File

@ -46,8 +46,10 @@ static gint color_panel_events (GtkWidget *, GdkEvent *);
static void color_panel_select_callback (gint, gint, gint,
ColorNotebookState, void *);
static void color_panel_get_color (gpointer, guchar *, guchar *, guchar *);
static void color_panel_set_color (gpointer, guchar, guchar, guchar);
static void color_panel_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
static void color_panel_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
/* dnd stuff */
static GtkTargetEntry color_panel_target_table[] =
@ -104,7 +106,7 @@ color_panel_new (guchar *initial,
color_panel_target_table, n_color_panel_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (private->drawing_area,
color_panel_get_color, color_panel);
color_panel_drag_color, color_panel);
gtk_drag_dest_set (private->drawing_area,
GTK_DEST_DEFAULT_HIGHLIGHT |
@ -113,7 +115,7 @@ color_panel_new (guchar *initial,
color_panel_target_table, n_color_panel_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (private->drawing_area,
color_panel_set_color, color_panel);
color_panel_drop_color, color_panel);
return color_panel;
}
@ -266,10 +268,11 @@ color_panel_select_callback (gint r,
}
static void
color_panel_get_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_panel_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorPanel *color_panel = data;
@ -279,10 +282,11 @@ color_panel_get_color (gpointer data,
}
static void
color_panel_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_panel_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
ColorPanel *color_panel = data;
ColorPanelPrivate *private = (ColorPanelPrivate *) color_panel->private_part;

View File

@ -231,11 +231,11 @@ gimp_dnd_color_drag_begin (GtkWidget *widget,
GtkWidget *window;
GdkColor bg;
guchar r, g, b;
GimpDndGetColorFunc get_color_func;
GimpDndDragColorFunc get_color_func;
get_color_func =
(GimpDndGetColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
(GimpDndDragColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
if (! get_color_func)
return;
@ -249,7 +249,7 @@ gimp_dnd_color_drag_begin (GtkWidget *widget,
window,
(GtkDestroyNotify) gtk_widget_destroy);
(* get_color_func) (data, &r, &g, &b);
(* get_color_func) (widget, &r, &g, &b, data);
bg.red = 0xff * r;
bg.green = 0xff * g;
@ -279,16 +279,16 @@ gimp_dnd_color_drag_handle (GtkWidget *widget,
{
guint16 vals[4];
guchar r, g, b;
GimpDndGetColorFunc get_color_func;
GimpDndDragColorFunc get_color_func;
get_color_func =
(GimpDndGetColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
(GimpDndDragColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_get_color_func");
if (! get_color_func)
return;
(* get_color_func) (data, &r, &g, &b);
(* get_color_func) (widget, &r, &g, &b, data);
vals[0] = r * 0xff;
vals[1] = g * 0xff;
@ -312,11 +312,11 @@ gimp_dnd_color_drop_handle (GtkWidget *widget,
{
guint16 *vals;
guchar r, g, b;
GimpDndSetColorFunc set_color_func;
GimpDndDropColorFunc set_color_func;
set_color_func =
(GimpDndSetColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_set_color_func");
(GimpDndDropColorFunc) gtk_object_get_data (GTK_OBJECT (widget),
"gimp_dnd_set_color_func");
if (! set_color_func)
return;
@ -337,13 +337,13 @@ gimp_dnd_color_drop_handle (GtkWidget *widget,
g = vals[1] / 0xff;
b = vals[2] / 0xff;
(* set_color_func) (data, r, g, b);
(* set_color_func) (widget, r, g, b, data);
}
void
gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndGetColorFunc get_color_func,
gpointer data)
gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndDragColorFunc get_color_func,
gpointer data)
{
gtk_signal_connect (GTK_OBJECT (widget), "drag_begin",
GTK_SIGNAL_FUNC (gimp_dnd_color_drag_begin),
@ -360,9 +360,9 @@ gimp_dnd_color_source_set (GtkWidget *widget,
}
void
gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndSetColorFunc set_color_func,
gpointer data)
gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndDropColorFunc set_color_func,
gpointer data)
{
gtk_signal_connect (GTK_OBJECT (widget), "drag_data_received",
GTK_SIGNAL_FUNC (gimp_dnd_color_drop_handle),

View File

@ -82,15 +82,17 @@ void gimp_dnd_set_drawable_preview_icon (GtkWidget *widget,
/* color dnd functions */
typedef void (*GimpDndSetColorFunc) (gpointer, guchar, guchar, guchar);
typedef void (*GimpDndGetColorFunc) (gpointer, guchar *, guchar *, guchar *);
typedef void (*GimpDndDropColorFunc) (GtkWidget *,
guchar, guchar, guchar, gpointer);
typedef void (*GimpDndDragColorFunc) (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
void gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndGetColorFunc get_color_func,
gpointer data);
void gimp_dnd_color_source_set (GtkWidget *widget,
GimpDndDragColorFunc get_color_func,
gpointer data);
void gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndSetColorFunc set_color_func,
gpointer data);
void gimp_dnd_color_dest_set (GtkWidget *widget,
GimpDndDropColorFunc set_color_func,
gpointer data);
#endif /* __GIMP_DND_H__ */

View File

@ -39,6 +39,7 @@
#include "datafiles.h"
#include "devices.h"
#include "errors.h"
#include "gimpdnd.h"
#include "gimprc.h"
#include "gradient_header.h"
#include "gradient.h"
@ -132,6 +133,10 @@ static void palette_entries_save (PaletteEntriesP, char *);
PaletteDialog * create_palette_dialog (gboolean vert);
static void palette_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
static void palette_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
static void palette_draw_entries (PaletteDialog *palette, gint row_start,
gint column_highlight);
static void redraw_palette (PaletteDialog *palette);
@ -162,6 +167,14 @@ static ImportDialog *import_dialog = NULL;
PaletteDialog *top_level_edit_palette = NULL;
PaletteDialog *top_level_palette = NULL;
/* dnd stuff */
static GtkTargetEntry color_palette_target_table[] =
{
GIMP_TARGET_COLOR
};
static guint n_color_palette_targets = (sizeof (color_palette_target_table) /
sizeof (color_palette_target_table[0]));
static void
palette_entries_free (PaletteEntriesP entries)
{
@ -443,7 +456,6 @@ palette_entry_free (PaletteEntryP entry)
g_free (entry);
}
void
palette_free ()
{
@ -1511,9 +1523,19 @@ palette_color_area_events (GtkWidget *widget,
g = palette->color->color[1];
b = palette->color->color[2];
if (active_color == FOREGROUND)
palette_set_foreground (r, g, b);
{
if (bevent->state & GDK_CONTROL_MASK)
palette_set_background (r, g, b);
else
palette_set_foreground (r, g, b);
}
else if (active_color == BACKGROUND)
palette_set_background (r, g, b);
{
if (bevent->state & GDK_CONTROL_MASK)
palette_set_foreground (r, g, b);
else
palette_set_background (r, g, b);
}
palette_draw_entries (palette, row, col);
/* Update the active color name */
@ -2063,10 +2085,25 @@ create_palette_dialog (gint vert)
(GtkSignalFunc) palette_color_area_events,
palette);
gtk_widget_show (palette_region);
gtk_container_add (GTK_CONTAINER (alignment), palette_region);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledwindow),
alignment);
gtk_widget_show (palette_region);
/* dnd stuff */
gtk_drag_source_set (palette_region,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
color_palette_target_table, n_color_palette_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (palette_region, palette_drag_color, palette);
gtk_drag_dest_set (alignment,
GTK_DEST_DEFAULT_HIGHLIGHT |
GTK_DEST_DEFAULT_MOTION |
GTK_DEST_DEFAULT_DROP,
color_palette_target_table, n_color_palette_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (alignment, palette_drop_color, palette);
/* The color name entry */
hbox2 = gtk_hbox_new (FALSE, 2);
@ -2227,6 +2264,77 @@ create_palette_dialog (gint vert)
return palette;
}
static void
palette_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
PaletteDialog *palette;
palette = (PaletteDialog *) data;
if (palette && palette->entries)
{
*r = (guchar) palette->color->color[0];
*g = (guchar) palette->color->color[1];
*b = (guchar) palette->color->color[2];
}
}
static void
palette_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
PaletteDialog *palette;
gchar *name;
gchar *num_buf;
GSList *list;
gint pos = 0;
PaletteEntriesP p_entries = NULL;
palette = (PaletteDialog *) data;
if (palette && palette->entries)
{
name = g_strdup_printf ("#%2x%2x%2x", r, g, b);
palette->color =
palette_add_entry (palette->entries, name, r, g, b);
g_free (name);
redraw_palette (palette);
list = palette_entries_list;
while (list)
{
p_entries = (PaletteEntriesP) list->data;
list = g_slist_next (list);
/* to make sure we get something! */
if (p_entries == NULL)
{
p_entries = default_palette_entries;
}
if (p_entries == palette->entries)
break;
pos++;
}
num_buf = g_strdup_printf ("%d", p_entries->n_colors);;
palette_draw_small_preview (palette->gc, p_entries);
gtk_clist_set_text (GTK_CLIST (palette->clist), pos, 1, num_buf);
palette_select_set_text_all (palette->entries);
palette_select2_set_text_all (palette->entries);
}
}
static void
import_dialog_select_grad_callback (GtkWidget *widget,
gpointer data)

View File

@ -35,8 +35,10 @@ typedef enum
} ColorAreaTarget;
/* local function prototypes */
static void color_area_set_color (gpointer, guchar, guchar, guchar);
static void color_area_get_color (gpointer, guchar *, guchar *, guchar *);
static void color_area_drop_color (GtkWidget *,
guchar, guchar, guchar, gpointer);
static void color_area_drag_color (GtkWidget *,
guchar *, guchar *, guchar *, gpointer);
/* Global variables */
gint active_color = FOREGROUND;
@ -405,7 +407,7 @@ color_area_create (gint width,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
color_area_target_table, n_color_area_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gimp_dnd_color_source_set (color_area, color_area_get_color, NULL);
gimp_dnd_color_source_set (color_area, color_area_drag_color, NULL);
gtk_drag_dest_set (color_area,
GTK_DEST_DEFAULT_HIGHLIGHT |
@ -413,7 +415,7 @@ color_area_create (gint width,
GTK_DEST_DEFAULT_DROP,
color_area_target_table, n_color_area_targets,
GDK_ACTION_COPY);
gimp_dnd_color_dest_set (color_area, color_area_set_color, NULL);
gimp_dnd_color_dest_set (color_area, color_area_drop_color, NULL);
return color_area;
}
@ -425,10 +427,11 @@ color_area_update ()
}
static void
color_area_get_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_area_drag_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
if (active_color == FOREGROUND)
palette_get_foreground (r, g, b);
@ -437,10 +440,11 @@ color_area_get_color (gpointer data,
}
static void
color_area_set_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_area_drop_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
if (color_notebook_active &&
active_color == edit_color)

View File

@ -87,12 +87,15 @@ struct _ColorSelectFill
static GtkWidget * color_select_widget_new (ColorSelect *, gint, gint, gint);
static void color_select_drag_new_color (gpointer,
guchar *, guchar *, guchar *);
static void color_select_drop_new_color (gpointer,
guchar, guchar, guchar);
static void color_select_drag_old_color (gpointer,
guchar *, guchar *, guchar *);
static void color_select_drag_new_color (GtkWidget *,
guchar *, guchar *, guchar *,
gpointer);
static void color_select_drop_new_color (GtkWidget *,
guchar, guchar, guchar,
gpointer);
static void color_select_drag_old_color (GtkWidget *,
guchar *, guchar *, guchar *,
gpointer);
static void color_select_update (ColorSelect *,
ColorSelectUpdateType);
@ -461,10 +464,11 @@ color_select_widget_new (ColorSelect *csp,
}
static void
color_select_drag_new_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_select_drag_new_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorSelect *csp;
@ -476,10 +480,11 @@ color_select_drag_new_color (gpointer data,
}
static void
color_select_drop_new_color (gpointer data,
guchar r,
guchar g,
guchar b)
color_select_drop_new_color (GtkWidget *widget,
guchar r,
guchar g,
guchar b,
gpointer data)
{
ColorSelect *csp;
@ -500,10 +505,11 @@ color_select_drop_new_color (gpointer data,
}
static void
color_select_drag_old_color (gpointer data,
guchar *r,
guchar *g,
guchar *b)
color_select_drag_old_color (GtkWidget *widget,
guchar *r,
guchar *g,
guchar *b,
gpointer data)
{
ColorSelect *csp;