app/by_color_select.c app/channels_dialog.c app/color_area.c

2001-01-07  Michael Natterer  <mitch@gimp.org>

	* app/by_color_select.c
	* app/channels_dialog.c
	* app/color_area.c
	* app/color_notebook.[ch]
	* app/color_panel.[ch]
	* app/color_picker.c
	* app/color_select.c
	* app/colormap_dialog.i.c
	* app/devices.c
	* app/disp_callbacks.[ch]
	* app/gimpdnd.[ch]
	* app/palette.c
	* app/qmask.c

	* libgimp/gimpcolorselector.h

	* modules/colorsel_gtk.c
	* modules/colorsel_triangle.c
	* modules/colorsel_water.c: made the color_notebook, the color_area
	and DND speak in terms of RGBA instead of GRB. The alpha value is
	not used yet, only the API changed. Everything should work exactly
	as before.
This commit is contained in:
Michael Natterer 2001-01-07 21:07:14 +00:00 committed by Michael Natterer
parent da07ba7cbc
commit ab014f8b3a
56 changed files with 2994 additions and 2336 deletions

View File

@ -1,3 +1,28 @@
2001-01-07 Michael Natterer <mitch@gimp.org>
* app/by_color_select.c
* app/channels_dialog.c
* app/color_area.c
* app/color_notebook.[ch]
* app/color_panel.[ch]
* app/color_picker.c
* app/color_select.c
* app/colormap_dialog.i.c
* app/devices.c
* app/disp_callbacks.[ch]
* app/gimpdnd.[ch]
* app/palette.c
* app/qmask.c
* libgimp/gimpcolorselector.h
* modules/colorsel_gtk.c
* modules/colorsel_triangle.c
* modules/colorsel_water.c: made the color_notebook, the color_area
and DND speak in terms of RGBA instead of GRB. The alpha value is
not used yet, only the API changed. Everything should work exactly
as before.
2001-01-07 Michael Natterer <mitch@gimp.org> 2001-01-07 Michael Natterer <mitch@gimp.org>
* TODO.xml: add "Cleanup GIMP's color selectors". * TODO.xml: add "Cleanup GIMP's color selectors".

View File

@ -255,9 +255,7 @@ edit_qmask_channel_query (GDisplay * gdisp)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
guchar r, g, b, a;
gint i;
guchar channel_color[3] = { 0, 0, 0 };
/* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */ /* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */
/* the new options structure */ /* the new options structure */
@ -265,10 +263,12 @@ edit_qmask_channel_query (GDisplay * gdisp)
options->gimage = gdisp->gimage; options->gimage = gdisp->gimage;
options->opacity = (gdouble) options->gimage->qmask_opacity; options->opacity = (gdouble) options->gimage->qmask_opacity;
for (i = 0; i < 3; i++) r = options->gimage->qmask_color[0];
channel_color[i] = options->gimage->qmask_color[i]; g = options->gimage->qmask_color[1];
b = options->gimage->qmask_color[2];
a = 255;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (r, g, b, a, FALSE, 48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -255,9 +255,7 @@ edit_qmask_channel_query (GDisplay * gdisp)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
guchar r, g, b, a;
gint i;
guchar channel_color[3] = { 0, 0, 0 };
/* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */ /* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */
/* the new options structure */ /* the new options structure */
@ -265,10 +263,12 @@ edit_qmask_channel_query (GDisplay * gdisp)
options->gimage = gdisp->gimage; options->gimage = gdisp->gimage;
options->opacity = (gdouble) options->gimage->qmask_opacity; options->opacity = (gdouble) options->gimage->qmask_opacity;
for (i = 0; i < 3; i++) r = options->gimage->qmask_color[0];
channel_color[i] = options->gimage->qmask_color[i]; g = options->gimage->qmask_color[1];
b = options->gimage->qmask_color[2];
a = 255;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (r, g, b, a, FALSE, 48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -102,6 +102,7 @@ static void by_color_select_color_drop (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
/* by_color select action functions */ /* by_color select action functions */
@ -1232,6 +1233,7 @@ by_color_select_color_drop (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {

View File

@ -185,6 +185,7 @@ static void channel_widget_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
static void channel_widget_draw_drop_indicator (ChannelWidget *cw, static void channel_widget_draw_drop_indicator (ChannelWidget *cw,
GimpDropType drop_type); GimpDropType drop_type);
@ -1757,10 +1758,11 @@ channel_widget_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
ChannelWidget *channel_widget = (ChannelWidget *) data; ChannelWidget *channel_widget = (ChannelWidget *) data;
Channel *channel = channel_widget->channel; Channel *channel = channel_widget->channel;
if (r != channel->col[0] || if (r != channel->col[0] ||
g != channel->col[1] || g != channel->col[1] ||
@ -1782,7 +1784,7 @@ channel_widget_draw_drop_indicator (ChannelWidget *channel_widget,
GimpDropType drop_type) GimpDropType drop_type)
{ {
static GdkGC *gc = NULL; static GdkGC *gc = NULL;
gint y = 0; gint y = 0;
if (!gc) if (!gc)
{ {
@ -1868,14 +1870,14 @@ channel_widget_button_events (GtkWidget *widget,
ChannelWidget *channel_widget; ChannelWidget *channel_widget;
GtkWidget *event_widget; GtkWidget *event_widget;
GdkEventButton *bevent; GdkEventButton *bevent;
gint return_val; gint return_val;
gint visible; gint visible;
gint width, height; gint width, height;
static gboolean button_down = FALSE; static gboolean button_down = FALSE;
static GtkWidget *click_widget = NULL; static GtkWidget *click_widget = NULL;
static gint old_state; static gint old_state;
static gint exclusive; static gint exclusive;
channel_widget = channel_widget =
(ChannelWidget *) gtk_object_get_user_data (GTK_OBJECT (widget)); (ChannelWidget *) gtk_object_get_user_data (GTK_OBJECT (widget));
@ -1896,7 +1898,6 @@ channel_widget_button_events (GtkWidget *widget,
break; break;
} }
switch (event->type) switch (event->type)
{ {
case GDK_EXPOSE: case GDK_EXPOSE:
@ -2009,7 +2010,7 @@ channel_widget_preview_events (GtkWidget *widget,
ChannelWidget *channel_widget; ChannelWidget *channel_widget;
GdkEventExpose *eevent; GdkEventExpose *eevent;
GdkEventButton *bevent; GdkEventButton *bevent;
gboolean valid; gboolean valid;
valid = FALSE; valid = FALSE;
@ -2082,8 +2083,8 @@ static void
channel_widget_preview_redraw (ChannelWidget *channel_widget) channel_widget_preview_redraw (ChannelWidget *channel_widget)
{ {
TempBuf *preview_buf; TempBuf *preview_buf;
gint width, height; gint width, height;
gint channel; gint channel;
/* allocate the channel widget pixmap */ /* allocate the channel widget pixmap */
if (! channel_widget->channel_pixmap) if (! channel_widget->channel_pixmap)
@ -2180,15 +2181,15 @@ channel_widget_preview_redraw (ChannelWidget *channel_widget)
static void static void
channel_widget_no_preview_redraw (ChannelWidget *channel_widget) channel_widget_no_preview_redraw (ChannelWidget *channel_widget)
{ {
GdkPixmap *pixmap; GdkPixmap *pixmap;
GdkPixmap **pixmap_normal; GdkPixmap **pixmap_normal;
GdkPixmap **pixmap_selected; GdkPixmap **pixmap_selected;
GdkPixmap **pixmap_insensitive; GdkPixmap **pixmap_insensitive;
GdkColor *color; GdkColor *color;
GtkWidget *widget; GtkWidget *widget;
GtkStateType state; GtkStateType state;
gchar *bits; gchar *bits;
gint width, height; gint width, height;
state = channel_widget->list_item->state; state = channel_widget->list_item->state;
@ -2249,10 +2250,10 @@ channel_widget_no_preview_redraw (ChannelWidget *channel_widget)
static void static void
channel_widget_eye_redraw (ChannelWidget *channel_widget) channel_widget_eye_redraw (ChannelWidget *channel_widget)
{ {
GdkPixmap *pixmap; GdkPixmap *pixmap;
GdkColor *color; GdkColor *color;
GtkStateType state; GtkStateType state;
gboolean visible; gboolean visible;
state = channel_widget->list_item->state; state = channel_widget->list_item->state;
@ -2480,16 +2481,16 @@ struct _NewChannelOptions
}; };
static gchar *channel_name = NULL; static gchar *channel_name = NULL;
static guchar channel_color[3] = { 0, 0, 0 }; static guchar channel_color[4] = { 0, 0, 0, 0 };
static void static void
new_channel_query_ok_callback (GtkWidget *widget, new_channel_query_ok_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
NewChannelOptions *options; NewChannelOptions *options;
Channel *new_channel; Channel *new_channel;
GimpImage *gimage; GimpImage *gimage;
gint i; gint i;
options = (NewChannelOptions *) data; options = (NewChannelOptions *) data;
@ -2530,7 +2531,12 @@ channels_dialog_new_channel_query (GimpImage* gimage)
options = g_new (NewChannelOptions, 1); options = g_new (NewChannelOptions, 1);
options->gimage = gimage; options->gimage = gimage;
options->opacity = 50.0; options->opacity = 50.0;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (channel_color[0],
channel_color[1],
channel_color[2],
channel_color[3],
FALSE,
48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =
@ -2633,9 +2639,9 @@ edit_channel_query_ok_callback (GtkWidget *widget,
{ {
EditChannelOptions *options; EditChannelOptions *options;
Channel *channel; Channel *channel;
gint opacity; gint opacity;
gint update = FALSE; gint update = FALSE;
gint i; gint i;
options = (EditChannelOptions *) data; options = (EditChannelOptions *) data;
channel = options->channel_widget->channel; channel = options->channel_widget->channel;
@ -2654,6 +2660,7 @@ edit_channel_query_ok_callback (GtkWidget *widget,
channel->opacity = opacity; channel->opacity = opacity;
update = TRUE; update = TRUE;
} }
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
if (options->color_panel->color[i] != channel->col[i]) if (options->color_panel->color[i] != channel->col[i])
{ {
@ -2683,17 +2690,23 @@ channels_dialog_edit_channel_query (ChannelWidget *channel_widget)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
gint i; gint i;
/* the new options structure */ /* the new options structure */
options = g_new (EditChannelOptions, 1); options = g_new (EditChannelOptions, 1);
options->channel_widget = channel_widget; options->channel_widget = channel_widget;
options->gimage = channel_widget->gimage; options->gimage = channel_widget->gimage;
options->opacity = (gdouble) channel_widget->channel->opacity / 2.55; options->opacity = (gdouble) channel_widget->channel->opacity / 2.55;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
channel_color[i] = channel_widget->channel->col[i]; channel_color[i] = channel_widget->channel->col[i];
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (channel_color[0],
channel_color[1],
channel_color[2],
channel_color[3],
FALSE,
48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -51,16 +51,19 @@ static void color_area_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
static void color_area_drag_color (GtkWidget *widget, static void color_area_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data); gpointer data);
static void color_area_color_changed (GimpContext *context, static void color_area_color_changed (GimpContext *context,
gint r, gint r,
gint g, gint g,
gint b, gint b,
gint a,
gpointer data); gpointer data);
/* Global variables */ /* Global variables */
@ -277,6 +280,7 @@ static void
color_area_select_callback (gint r, color_area_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
void *client_data) void *client_data)
{ {
@ -330,8 +334,9 @@ color_area_edit (void)
if (! color_notebook) if (! color_notebook)
{ {
color_notebook = color_notebook_new (r, g, b, color_area_select_callback, color_notebook = color_notebook_new (r, g, b, 255,
NULL, TRUE); color_area_select_callback,
NULL, TRUE, FALSE);
color_notebook_active = TRUE; color_notebook_active = TRUE;
} }
else else
@ -344,7 +349,7 @@ color_area_edit (void)
else else
gdk_window_raise (color_notebook->shell->window); gdk_window_raise (color_notebook->shell->window);
color_notebook_set_color (color_notebook, r, g, b, TRUE); color_notebook_set_color (color_notebook, r, g, b, 255, TRUE);
} }
} }
@ -534,8 +539,11 @@ color_area_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
*a = 255;
if (active_color == FOREGROUND) if (active_color == FOREGROUND)
gimp_context_get_foreground (gimp_context_get_user (), r, g, b); gimp_context_get_foreground (gimp_context_get_user (), r, g, b);
else else
@ -547,12 +555,13 @@ color_area_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
if (color_notebook_active && if (color_notebook_active &&
active_color == edit_color) active_color == edit_color)
{ {
color_notebook_set_color (color_notebook, r, g, b, TRUE); color_notebook_set_color (color_notebook, r, g, b, 255, TRUE);
} }
else else
{ {
@ -568,6 +577,7 @@ color_area_color_changed (GimpContext *context,
gint r, gint r,
gint g, gint g,
gint b, gint b,
gint a,
gpointer data) gpointer data)
{ {
color_area_draw (); color_area_draw ();

View File

@ -46,7 +46,7 @@ struct _ColorSelectorInfo
{ {
char *name; /* label used in notebook tab */ char *name; /* label used in notebook tab */
char *help_page; char *help_page;
GimpColorSelectorMethods m; GimpColorSelectorMethods methods;
int refs; /* number of instances around */ int refs; /* number of instances around */
gboolean active; gboolean active;
void (*death_callback) (void *data); void (*death_callback) (void *data);
@ -71,7 +71,8 @@ static void color_notebook_cancel_callback (GtkWidget *widget,
static void color_notebook_update_callback (gpointer data, static void color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue); gint blue,
gint alpha);
static void color_notebook_page_switch (GtkWidget *widget, static void color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num); guint page_num);
@ -88,6 +89,7 @@ enum
RED, RED,
GREEN, GREEN,
BLUE, BLUE,
ALPHA,
NUM_COLORS NUM_COLORS
}; };
@ -96,13 +98,15 @@ ColorNotebook *
color_notebook_new (gint red, color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer client_data, gpointer client_data,
gboolean wants_updates) gboolean wants_updates,
gboolean show_alpha)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
GtkWidget *label; GtkWidget *label;
ColorSelectorInfo *info; ColorSelectorInfo *info;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_val_if_fail (selector_info != NULL, NULL); g_return_val_if_fail (selector_info != NULL, NULL);
@ -118,6 +122,7 @@ color_notebook_new (gint red,
cnp->values[RED] = cnp->orig_values[RED] = red & 0xff; cnp->values[RED] = cnp->orig_values[RED] = red & 0xff;
cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff; cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff;
cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff; cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff;
cnp->values[ALPHA] = cnp->orig_values[ALPHA] = alpha & 0xff;
cnp->shell = cnp->shell =
gimp_dialog_new (_("Color Selection"), "color_selection", gimp_dialog_new (_("Color Selection"), "color_selection",
@ -158,9 +163,10 @@ color_notebook_new (gint red,
csel->color_notebook = cnp; csel->color_notebook = cnp;
csel->info = info; csel->info = info;
info->refs++; info->refs++;
csel->frame = info->m.new (red, green, blue, csel->frame = info->methods.new (red, green, blue, alpha,
color_notebook_update_callback, csel, show_alpha,
&csel->selector_data); color_notebook_update_callback, csel,
&csel->selector_data);
gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook", gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook",
csel); csel);
@ -201,7 +207,8 @@ color_notebook_new (gint red,
{ {
gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp); gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp);
gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page", gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page",
(GtkSignalFunc)color_notebook_page_switch, NULL); GTK_SIGNAL_FUNC (color_notebook_page_switch),
NULL);
} }
return cnp; return cnp;
@ -236,7 +243,7 @@ color_notebook_free (ColorNotebook *cnp)
{ {
next = csel->next; next = csel->next;
csel->info->m.free (csel->selector_data); csel->info->methods.free (csel->selector_data);
csel->info->refs--; csel->info->refs--;
if (csel->info->refs == 0 && !csel->info->active) if (csel->info->refs == 0 && !csel->info->active)
@ -254,24 +261,30 @@ color_notebook_set_color (ColorNotebook *cnp,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current) gboolean set_current)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_if_fail (cnp != NULL); g_return_if_fail (cnp != NULL);
cnp->orig_values[RED] = red; cnp->orig_values[RED] = red;
cnp->orig_values[GREEN] = green; cnp->orig_values[GREEN] = green;
cnp->orig_values[BLUE] = blue; cnp->orig_values[BLUE] = blue;
cnp->orig_values[ALPHA] = alpha;
if (set_current) if (set_current)
{ {
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
} }
csel = cnp->cur_page; csel = cnp->cur_page;
csel->info->m.setcolor (csel->selector_data, red, green, blue, set_current); csel->info->methods.setcolor (csel->selector_data,
red, green, blue, alpha,
set_current);
} }
/* Called by a colour selector on user selection of a colour */ /* Called by a colour selector on user selection of a colour */
@ -279,10 +292,11 @@ static void
color_notebook_update_callback (gpointer data, color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue) gint blue,
gint alpha)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
ColorNotebook *cnp; ColorNotebook *cnp;
g_return_if_fail (data != NULL); g_return_if_fail (data != NULL);
@ -292,12 +306,14 @@ color_notebook_update_callback (gpointer data,
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
if (cnp->wants_updates && cnp->callback) if (cnp->wants_updates && cnp->callback)
{ {
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_UPDATE, COLOR_NOTEBOOK_UPDATE,
cnp->client_data); cnp->client_data);
} }
@ -315,6 +331,7 @@ color_notebook_ok_callback (GtkWidget *widget,
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_OK, COLOR_NOTEBOOK_OK,
cnp->client_data); cnp->client_data);
} }
@ -331,6 +348,7 @@ color_notebook_cancel_callback (GtkWidget *widget,
(* cnp->callback) (cnp->orig_values[RED], (* cnp->callback) (cnp->orig_values[RED],
cnp->orig_values[GREEN], cnp->orig_values[GREEN],
cnp->orig_values[BLUE], cnp->orig_values[BLUE],
cnp->orig_values[ALPHA],
COLOR_NOTEBOOK_CANCEL, COLOR_NOTEBOOK_CANCEL,
cnp->client_data); cnp->client_data);
} }
@ -340,7 +358,7 @@ color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num) guint page_num)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
cnp = gtk_object_get_user_data (GTK_OBJECT (widget)); cnp = gtk_object_get_user_data (GTK_OBJECT (widget));
@ -349,18 +367,19 @@ color_notebook_page_switch (GtkWidget *widget,
g_return_if_fail (cnp != NULL && csel != NULL); g_return_if_fail (cnp != NULL && csel != NULL);
cnp->cur_page = csel; cnp->cur_page = csel;
csel->info->m.setcolor (csel->selector_data, csel->info->methods.setcolor (csel->selector_data,
cnp->values[RED], cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
TRUE); cnp->values[ALPHA],
TRUE);
} }
static void static void
color_notebook_help_func (const gchar *data) color_notebook_help_func (const gchar *data)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
gchar *help_path; gchar *help_path;
cnp = (ColorNotebook *) data; cnp = (ColorNotebook *) data;
@ -393,13 +412,14 @@ gimp_color_selector_register (const gchar *name,
info = g_new (ColorSelectorInfo, 1); info = g_new (ColorSelectorInfo, 1);
info->name = g_strdup (name); info->name = g_strdup (name);
info->help_page = g_strdup (help_page); info->help_page = g_strdup (help_page);
info->m = *methods; info->methods = *methods;
info->refs = 0; info->refs = 0;
info->active = TRUE; info->active = TRUE;
info->next = selector_info;
info->next = selector_info;
selector_info = info; selector_info = info;
return info; return info;

View File

@ -30,6 +30,7 @@ typedef enum
typedef void (* ColorNotebookCallback) (gint red, typedef void (* ColorNotebookCallback) (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookState state, ColorNotebookState state,
gpointer data); gpointer data);
@ -42,8 +43,8 @@ struct _ColorNotebook
GtkWidget *shell; GtkWidget *shell;
GtkWidget *notebook; GtkWidget *notebook;
gint values[3]; gint values[4];
gint orig_values[3]; gint orig_values[4];
ColorNotebookCallback callback; ColorNotebookCallback callback;
gpointer client_data; gpointer client_data;
@ -57,9 +58,11 @@ struct _ColorNotebook
ColorNotebook * color_notebook_new (gint red, ColorNotebook * color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer data, gpointer data,
gboolean wants_update); gboolean wants_update,
gboolean show_aplha);
void color_notebook_show (ColorNotebook *cnb); void color_notebook_show (ColorNotebook *cnb);
void color_notebook_hide (ColorNotebook *cnb); void color_notebook_hide (ColorNotebook *cnb);
@ -69,6 +72,7 @@ void color_notebook_set_color (ColorNotebook *cnb,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current); gboolean set_current);
#endif /* __COLOR_NOTEBOOK_H__ */ #endif /* __COLOR_NOTEBOOK_H__ */

View File

@ -40,6 +40,7 @@ struct _ColorPanelPrivate
GtkWidget *drawing_area; GtkWidget *drawing_area;
GdkGC *gc; GdkGC *gc;
gboolean show_alpha;
gboolean button_down; gboolean button_down;
ColorNotebook *color_notebook; ColorNotebook *color_notebook;
@ -55,6 +56,7 @@ static gint color_panel_events (GtkWidget *widget,
static void color_panel_select_callback (gint r, static void color_panel_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
gpointer data); gpointer data);
@ -62,11 +64,13 @@ static void color_panel_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data); gpointer data);
static void color_panel_drop_color (GtkWidget *widget, static void color_panel_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
/* dnd stuff */ /* dnd stuff */
@ -80,26 +84,31 @@ static guint n_color_panel_targets = (sizeof (color_panel_target_table) /
/* public functions */ /* public functions */
ColorPanel * ColorPanel *
color_panel_new (guchar *initial, color_panel_new (guchar r,
gint width, guchar g,
gint height) guchar b,
guchar a,
gboolean show_alpha,
gint width,
gint height)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
gint i;
private = g_new0 (ColorPanelPrivate, 1); private = g_new0 (ColorPanelPrivate, 1);
private->color_notebook = NULL; private->color_notebook = NULL;
private->color_notebook_active = FALSE; private->color_notebook_active = FALSE;
private->gc = NULL; private->gc = NULL;
private->show_alpha = show_alpha;
private->button_down = FALSE; private->button_down = FALSE;
color_panel = g_new (ColorPanel, 1); color_panel = g_new (ColorPanel, 1);
color_panel->private_part = private; color_panel->private_part = private;
/* set the initial color */ color_panel->color[0] = r;
for (i = 0; i < 3; i++) color_panel->color[1] = g;
color_panel->color[i] = (initial) ? initial[i] : 0; color_panel->color[2] = b;
color_panel->color[3] = a;
color_panel->color_panel_widget = gtk_frame_new (NULL); color_panel->color_panel_widget = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (color_panel->color_panel_widget), gtk_frame_set_shadow_type (GTK_FRAME (color_panel->color_panel_widget),
@ -111,7 +120,7 @@ color_panel_new (guchar *initial,
width, height); width, height);
gtk_widget_set_events (private->drawing_area, EVENT_MASK); gtk_widget_set_events (private->drawing_area, EVENT_MASK);
gtk_signal_connect (GTK_OBJECT (private->drawing_area), "event", gtk_signal_connect (GTK_OBJECT (private->drawing_area), "event",
(GtkSignalFunc) color_panel_events, GTK_SIGNAL_FUNC (color_panel_events),
color_panel); color_panel);
gtk_container_add (GTK_CONTAINER (color_panel->color_panel_widget), gtk_container_add (GTK_CONTAINER (color_panel->color_panel_widget),
private->drawing_area); private->drawing_area);
@ -144,17 +153,22 @@ color_panel_new (guchar *initial,
void void
color_panel_set_color (ColorPanel *color_panel, color_panel_set_color (ColorPanel *color_panel,
guchar *col) guchar r,
guchar g,
guchar b,
guchar a)
{ {
ColorPanelPrivate *private = color_panel->private_part; ColorPanelPrivate *private = color_panel->private_part;
color_panel->color[0] = col[0]; color_panel->color[0] = r;
color_panel->color[1] = col[1]; color_panel->color[1] = g;
color_panel->color[2] = col[2]; color_panel->color[2] = b;
color_panel->color[3] = a;
if (private->color_notebook_active) if (private->color_notebook_active)
color_notebook_set_color (private->color_notebook, color_notebook_set_color (private->color_notebook,
col[0], col[1], col[2], TRUE); r, g, b, a,
TRUE);
if (private->gc) if (private->gc)
color_panel_draw (color_panel); color_panel_draw (color_panel);
@ -186,9 +200,9 @@ color_panel_free (ColorPanel *color_panel)
static void static void
color_panel_draw (ColorPanel *color_panel) color_panel_draw (ColorPanel *color_panel)
{ {
GtkWidget *widget; GtkWidget *widget;
ColorPanelPrivate *private; ColorPanelPrivate *private;
GdkColor fg; GdkColor fg;
private = (ColorPanelPrivate *) color_panel->private_part; private = (ColorPanelPrivate *) color_panel->private_part;
widget = private->drawing_area; widget = private->drawing_area;
@ -207,8 +221,8 @@ color_panel_events (GtkWidget *widget,
GdkEvent *event, GdkEvent *event,
gpointer data) gpointer data)
{ {
GdkEventButton *bevent; GdkEventButton *bevent;
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
color_panel = (ColorPanel *) data; color_panel = (ColorPanel *) data;
@ -242,9 +256,11 @@ color_panel_events (GtkWidget *widget,
color_notebook_new (color_panel->color[0], color_notebook_new (color_panel->color[0],
color_panel->color[1], color_panel->color[1],
color_panel->color[2], color_panel->color[2],
color_panel->color[3],
color_panel_select_callback, color_panel_select_callback,
color_panel, color_panel,
FALSE); FALSE,
private->show_alpha);
private->color_notebook_active = TRUE; private->color_notebook_active = TRUE;
} }
else else
@ -257,7 +273,9 @@ color_panel_events (GtkWidget *widget,
color_notebook_set_color (private->color_notebook, color_notebook_set_color (private->color_notebook,
color_panel->color[0], color_panel->color[0],
color_panel->color[1], color_panel->color[1],
color_panel->color[2], 1); color_panel->color[2],
color_panel->color[3],
TRUE);
} }
private->button_down = FALSE; private->button_down = FALSE;
} }
@ -278,10 +296,11 @@ static void
color_panel_select_callback (gint r, color_panel_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
gpointer data) gpointer data)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
color_panel = (ColorPanel *) data; color_panel = (ColorPanel *) data;
@ -312,6 +331,7 @@ color_panel_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
@ -321,6 +341,7 @@ color_panel_drag_color (GtkWidget *widget,
*r = color_panel->color[0]; *r = color_panel->color[0];
*g = color_panel->color[1]; *g = color_panel->color[1];
*b = color_panel->color[2]; *b = color_panel->color[2];
*a = color_panel->color[3];
} }
static void static void
@ -328,9 +349,10 @@ color_panel_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
color_panel = (ColorPanel *) data; color_panel = (ColorPanel *) data;
@ -339,9 +361,10 @@ color_panel_drop_color (GtkWidget *widget,
color_panel->color[0] = r; color_panel->color[0] = r;
color_panel->color[1] = g; color_panel->color[1] = g;
color_panel->color[2] = b; color_panel->color[2] = b;
color_panel->color[3] = a;
if (private->color_notebook_active) if (private->color_notebook_active)
color_notebook_set_color (private->color_notebook, r, g, b, TRUE); color_notebook_set_color (private->color_notebook, r, g, b, a, TRUE);
color_panel_draw (color_panel); color_panel_draw (color_panel);
} }

View File

@ -19,6 +19,7 @@
#ifndef __COLOR_PANEL_H__ #ifndef __COLOR_PANEL_H__
#define __COLOR_PANEL_H__ #define __COLOR_PANEL_H__
typedef struct _ColorPanel ColorPanel; typedef struct _ColorPanel ColorPanel;
struct _ColorPanel struct _ColorPanel
@ -27,18 +28,26 @@ struct _ColorPanel
GtkWidget *color_panel_widget; GtkWidget *color_panel_widget;
/* The actual color */ /* The actual color */
guchar color [3]; guchar color [4];
/* Don't touch this :) */ /* Don't touch this :) */
void *private_part; gpointer private_part;
}; };
ColorPanel * color_panel_new (guchar *initial,
ColorPanel * color_panel_new (guchar r,
guchar g,
guchar b,
guchar a,
gboolean show_alpha,
gint width, gint width,
gint height); gint height);
void color_panel_set_color (ColorPanel *color_panel, void color_panel_set_color (ColorPanel *color_panel,
guchar *col); guchar r,
guchar g,
guchar b,
guchar a);
#endif /* __COLOR_PANEL_H__ */ #endif /* __COLOR_PANEL_H__ */

View File

@ -304,7 +304,9 @@ color_picker_button_press (Tool *tool,
gtk_widget_reparent (color_picker_info->info_table, hbox); gtk_widget_reparent (color_picker_info->info_table, hbox);
color_panel = color_panel_new (NULL, 48, 64); color_panel = color_panel_new (0, 0, 0, 0,
gimp_drawable_has_alpha (tool->drawable),
48, 64);
gtk_box_pack_start (GTK_BOX (hbox), color_panel->color_panel_widget, gtk_box_pack_start (GTK_BOX (hbox), color_panel->color_panel_widget,
FALSE, FALSE, 0); FALSE, FALSE, 0);
gtk_widget_show (color_panel->color_panel_widget); gtk_widget_show (color_panel->color_panel_widget);
@ -523,7 +525,7 @@ pick_color_do (GimpImage *gimage,
has_alpha = GIMP_IMAGE_TYPE_HAS_ALPHA (sample_type); has_alpha = GIMP_IMAGE_TYPE_HAS_ALPHA (sample_type);
if (!(color = (*get_color_func) (get_color_obj, x, y))) if (!(color = (* get_color_func) (get_color_obj, x, y)))
return FALSE; return FALSE;
if (sample_average) if (sample_average)
@ -536,7 +538,7 @@ pick_color_do (GimpImage *gimage,
for (i = x - radius; i <= x + radius; i++) for (i = x - radius; i <= x + radius; i++)
for (j = y - radius; j <= y + radius; j++) for (j = y - radius; j <= y + radius; j++)
if ((tmp_color = (*get_color_func) (get_color_obj, i, j))) if ((tmp_color = (* get_color_func) (get_color_obj, i, j)))
{ {
count++; count++;
@ -573,6 +575,7 @@ pick_color_do (GimpImage *gimage,
final); final);
g_free (color); g_free (color);
return TRUE; return TRUE;
} }
@ -622,7 +625,7 @@ colorpicker_draw (Tool *tool)
ty - radiusy, ty - radiusy,
2 * radiusx + cx, 2 * radiusy + cy); 2 * radiusx + cx, 2 * radiusy + cy);
if(radiusx > 1 && radiusy > 1) if (radiusx > 1 && radiusy > 1)
{ {
gdk_draw_rectangle (cp_tool->core->win, cp_tool->core->gc, 0, gdk_draw_rectangle (cp_tool->core->win, cp_tool->core->gc, 0,
tx - radiusx + 2, tx - radiusx + 2,
@ -650,7 +653,10 @@ color_picker_info_update (Tool *tool,
} }
else else
{ {
guchar col[3]; guchar r = 0;
guchar g = 0;
guchar b = 0;
guchar a = 0;
if (! GTK_WIDGET_IS_SENSITIVE (color_panel->color_panel_widget)) if (! GTK_WIDGET_IS_SENSITIVE (color_panel->color_panel_widget))
gtk_widget_set_sensitive (color_panel->color_panel_widget, TRUE); gtk_widget_set_sensitive (color_panel->color_panel_widget, TRUE);
@ -670,9 +676,12 @@ color_picker_info_update (Tool *tool,
col_value [RED_PIX], col_value [RED_PIX],
col_value [GREEN_PIX], col_value [GREEN_PIX],
col_value [BLUE_PIX]); col_value [BLUE_PIX]);
col[0] = col_value [RED_PIX];
col[1] = col_value [GREEN_PIX]; r = col_value [RED_PIX];
col[2] = col_value [BLUE_PIX]; g = col_value [GREEN_PIX];
b = col_value [BLUE_PIX];
if (sample_type == RGBA_GIMAGE)
a = col_value [ALPHA_PIX];
break; break;
case INDEXED_GIMAGE: case INDEXEDA_GIMAGE: case INDEXED_GIMAGE: case INDEXEDA_GIMAGE:
@ -688,9 +697,12 @@ color_picker_info_update (Tool *tool,
col_value [RED_PIX], col_value [RED_PIX],
col_value [GREEN_PIX], col_value [GREEN_PIX],
col_value [BLUE_PIX]); col_value [BLUE_PIX]);
col[0] = col_value [RED_PIX];
col[1] = col_value [GREEN_PIX]; r = col_value [RED_PIX];
col[2] = col_value [BLUE_PIX]; g = col_value [GREEN_PIX];
b = col_value [BLUE_PIX];
if (sample_type == INDEXEDA_GIMAGE)
a = col_value [ALPHA_PIX];
break; break;
case GRAY_GIMAGE: case GRAYA_GIMAGE: case GRAY_GIMAGE: case GRAYA_GIMAGE:
@ -703,13 +715,16 @@ color_picker_info_update (Tool *tool,
col_value [GRAY_PIX], col_value [GRAY_PIX],
col_value [GRAY_PIX], col_value [GRAY_PIX],
col_value [GRAY_PIX]); col_value [GRAY_PIX]);
col[0] = col_value [GRAY_PIX];
col[1] = col_value [GRAY_PIX]; r = col_value [GRAY_PIX];
col[2] = col_value [GRAY_PIX]; g = col_value [GRAY_PIX];
b = col_value [GRAY_PIX];
if (sample_type == GRAYA_GIMAGE)
a = col_value [ALPHA_PIX];
break; break;
} }
color_panel_set_color (color_panel, col); color_panel_set_color (color_panel, r, g, b, a);
} }
info_dialog_update (color_picker_info); info_dialog_update (color_picker_info);

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,7 @@ static void ipal_update_image_list (GimpColormapDialog *ipal);
static void ipal_add_callback (GtkWidget *, gpointer); static void ipal_add_callback (GtkWidget *, gpointer);
static void ipal_edit_callback (GtkWidget *, gpointer); static void ipal_edit_callback (GtkWidget *, gpointer);
static void ipal_close_callback (GtkWidget *, gpointer); static void ipal_close_callback (GtkWidget *, gpointer);
static void ipal_select_callback (gint, gint, gint, ColorNotebookState, static void ipal_select_callback (gint, gint, gint, gint, ColorNotebookState,
gpointer); gpointer);
/* event callback */ /* event callback */
@ -90,17 +90,19 @@ palette_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
GimpColormapDialog *ipal = (GimpColormapDialog *) data; GimpColormapDialog *ipal = (GimpColormapDialog *) data;
guint col = ipal->dnd_col_index; guint col = ipal->dnd_col_index;
GimpImage *gimage; GimpImage *gimage;
gimage = ipal->image; gimage = ipal->image;
*r = gimage->cmap[col * 3 + 0]; *r = gimage->cmap[col * 3 + 0];
*g = gimage->cmap[col * 3 + 1]; *g = gimage->cmap[col * 3 + 1];
*b = gimage->cmap[col * 3 + 2]; *b = gimage->cmap[col * 3 + 2];
*a = 255;
} }
static void static void
@ -108,6 +110,7 @@ palette_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
GimpColormapDialog *ipal = (GimpColormapDialog *) data; GimpColormapDialog *ipal = (GimpColormapDialog *) data;
@ -772,13 +775,13 @@ ipal_edit_callback (GtkWidget *widget,
if (! ipal->color_notebook) if (! ipal->color_notebook)
{ {
ipal->color_notebook ipal->color_notebook
= color_notebook_new (r, g, b, = color_notebook_new (r, g, b, 255,
ipal_select_callback, ipal, FALSE); ipal_select_callback, ipal, FALSE, FALSE);
} }
else else
{ {
color_notebook_show (ipal->color_notebook); color_notebook_show (ipal->color_notebook);
color_notebook_set_color (ipal->color_notebook, r, g, b, 1); color_notebook_set_color (ipal->color_notebook, r, g, b, 255, TRUE);
} }
} }
@ -797,10 +800,11 @@ static void
ipal_select_callback (gint r, ipal_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
gpointer data) gpointer data)
{ {
GimpImage *gimage; GimpImage *gimage;
GimpColormapDialog *ipal = data; GimpColormapDialog *ipal = data;
g_return_if_fail (ipal); g_return_if_fail (ipal);

View File

@ -255,9 +255,7 @@ edit_qmask_channel_query (GDisplay * gdisp)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
guchar r, g, b, a;
gint i;
guchar channel_color[3] = { 0, 0, 0 };
/* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */ /* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */
/* the new options structure */ /* the new options structure */
@ -265,10 +263,12 @@ edit_qmask_channel_query (GDisplay * gdisp)
options->gimage = gdisp->gimage; options->gimage = gdisp->gimage;
options->opacity = (gdouble) options->gimage->qmask_opacity; options->opacity = (gdouble) options->gimage->qmask_opacity;
for (i = 0; i < 3; i++) r = options->gimage->qmask_color[0];
channel_color[i] = options->gimage->qmask_color[i]; g = options->gimage->qmask_color[1];
b = options->gimage->qmask_color[2];
a = 255;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (r, g, b, a, FALSE, 48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -255,9 +255,7 @@ edit_qmask_channel_query (GDisplay * gdisp)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
guchar r, g, b, a;
gint i;
guchar channel_color[3] = { 0, 0, 0 };
/* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */ /* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */
/* the new options structure */ /* the new options structure */
@ -265,10 +263,12 @@ edit_qmask_channel_query (GDisplay * gdisp)
options->gimage = gdisp->gimage; options->gimage = gdisp->gimage;
options->opacity = (gdouble) options->gimage->qmask_opacity; options->opacity = (gdouble) options->gimage->qmask_opacity;
for (i = 0; i < 3; i++) r = options->gimage->qmask_color[0];
channel_color[i] = options->gimage->qmask_color[i]; g = options->gimage->qmask_color[1];
b = options->gimage->qmask_color[2];
a = 255;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (r, g, b, a, FALSE, 48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -101,40 +101,49 @@ struct _DeviceInfoDialog
GtkWidget **eventboxes; GtkWidget **eventboxes;
}; };
/* local functions */
static void input_dialog_able_callback (GtkWidget *w, guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info, /* local functions */
FILE *fp); static void input_dialog_able_callback (GtkWidget *widget,
guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info,
FILE *fp);
static void devices_write_rc (void); static void devices_write_rc (void);
static void device_status_destroy_callback (void); static void device_status_destroy_callback (void);
static void devices_close_callback (GtkWidget *, gpointer); static void devices_close_callback (GtkWidget *widget,
gpointer data);
static void device_status_update (guint32 deviceid); static void device_status_update (guint32 deviceid);
static void device_status_update_current (void); static void device_status_update_current (void);
static ToolType device_status_drag_tool (GtkWidget *, static ToolType device_status_drag_tool (GtkWidget *widget,
gpointer); gpointer data);
static void device_status_drop_tool (GtkWidget *, static void device_status_drop_tool (GtkWidget *widget,
ToolType, ToolType tool,
gpointer); gpointer data);
static void device_status_drag_color (GtkWidget *, static void device_status_drag_color (GtkWidget *widget,
guchar *, guchar *, guchar *, guchar *r,
gpointer); guchar *g,
static void device_status_drop_color (GtkWidget *, guchar *b,
guchar, guchar, guchar, guchar *a,
gpointer); gpointer data);
static void device_status_drop_brush (GtkWidget *, static void device_status_drop_color (GtkWidget *widget,
GimpBrush *, guchar r,
gpointer); guchar g,
static void device_status_drop_pattern (GtkWidget *, guchar b,
GPattern *, guchar a,
gpointer); gpointer data);
static void device_status_drop_gradient (GtkWidget *, static void device_status_drop_brush (GtkWidget *widget,
gradient_t *, GimpBrush *brush,
gpointer); gpointer data);
static void device_status_drop_pattern (GtkWidget *widget,
GPattern *pattern,
gpointer data);
static void device_status_drop_gradient (GtkWidget *widget,
gradient_t *gradient,
gpointer data);
static void device_status_color_changed (GimpContext *context, static void device_status_color_changed (GimpContext *context,
gint r, gint r,
@ -148,6 +157,7 @@ static void device_status_data_changed (GimpContext *context,
static void device_status_context_connect (GimpContext *context, static void device_status_context_connect (GimpContext *context,
guint32 deviceid); guint32 deviceid);
/* global data */ /* global data */
gint current_device = GDK_CORE_POINTER; gint current_device = GDK_CORE_POINTER;
@ -173,6 +183,7 @@ static GtkTargetEntry color_area_target_table[] =
static guint n_color_area_targets = (sizeof (color_area_target_table) / static guint n_color_area_targets = (sizeof (color_area_target_table) /
sizeof (color_area_target_table[0])); sizeof (color_area_target_table[0]));
/* utility functions for the device lists */ /* utility functions for the device lists */
static GdkDeviceInfo * static GdkDeviceInfo *
@ -1129,6 +1140,7 @@ device_status_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;
@ -1137,6 +1149,7 @@ device_status_drag_color (GtkWidget *widget,
if (device_info) if (device_info)
{ {
*a = 255;
gimp_context_get_foreground (device_info->context, r, g, b); gimp_context_get_foreground (device_info->context, r, g, b);
} }
else else
@ -1150,6 +1163,7 @@ device_status_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;

View File

@ -46,7 +46,7 @@ struct _ColorSelectorInfo
{ {
char *name; /* label used in notebook tab */ char *name; /* label used in notebook tab */
char *help_page; char *help_page;
GimpColorSelectorMethods m; GimpColorSelectorMethods methods;
int refs; /* number of instances around */ int refs; /* number of instances around */
gboolean active; gboolean active;
void (*death_callback) (void *data); void (*death_callback) (void *data);
@ -71,7 +71,8 @@ static void color_notebook_cancel_callback (GtkWidget *widget,
static void color_notebook_update_callback (gpointer data, static void color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue); gint blue,
gint alpha);
static void color_notebook_page_switch (GtkWidget *widget, static void color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num); guint page_num);
@ -88,6 +89,7 @@ enum
RED, RED,
GREEN, GREEN,
BLUE, BLUE,
ALPHA,
NUM_COLORS NUM_COLORS
}; };
@ -96,13 +98,15 @@ ColorNotebook *
color_notebook_new (gint red, color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer client_data, gpointer client_data,
gboolean wants_updates) gboolean wants_updates,
gboolean show_alpha)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
GtkWidget *label; GtkWidget *label;
ColorSelectorInfo *info; ColorSelectorInfo *info;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_val_if_fail (selector_info != NULL, NULL); g_return_val_if_fail (selector_info != NULL, NULL);
@ -118,6 +122,7 @@ color_notebook_new (gint red,
cnp->values[RED] = cnp->orig_values[RED] = red & 0xff; cnp->values[RED] = cnp->orig_values[RED] = red & 0xff;
cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff; cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff;
cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff; cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff;
cnp->values[ALPHA] = cnp->orig_values[ALPHA] = alpha & 0xff;
cnp->shell = cnp->shell =
gimp_dialog_new (_("Color Selection"), "color_selection", gimp_dialog_new (_("Color Selection"), "color_selection",
@ -158,9 +163,10 @@ color_notebook_new (gint red,
csel->color_notebook = cnp; csel->color_notebook = cnp;
csel->info = info; csel->info = info;
info->refs++; info->refs++;
csel->frame = info->m.new (red, green, blue, csel->frame = info->methods.new (red, green, blue, alpha,
color_notebook_update_callback, csel, show_alpha,
&csel->selector_data); color_notebook_update_callback, csel,
&csel->selector_data);
gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook", gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook",
csel); csel);
@ -201,7 +207,8 @@ color_notebook_new (gint red,
{ {
gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp); gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp);
gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page", gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page",
(GtkSignalFunc)color_notebook_page_switch, NULL); GTK_SIGNAL_FUNC (color_notebook_page_switch),
NULL);
} }
return cnp; return cnp;
@ -236,7 +243,7 @@ color_notebook_free (ColorNotebook *cnp)
{ {
next = csel->next; next = csel->next;
csel->info->m.free (csel->selector_data); csel->info->methods.free (csel->selector_data);
csel->info->refs--; csel->info->refs--;
if (csel->info->refs == 0 && !csel->info->active) if (csel->info->refs == 0 && !csel->info->active)
@ -254,24 +261,30 @@ color_notebook_set_color (ColorNotebook *cnp,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current) gboolean set_current)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_if_fail (cnp != NULL); g_return_if_fail (cnp != NULL);
cnp->orig_values[RED] = red; cnp->orig_values[RED] = red;
cnp->orig_values[GREEN] = green; cnp->orig_values[GREEN] = green;
cnp->orig_values[BLUE] = blue; cnp->orig_values[BLUE] = blue;
cnp->orig_values[ALPHA] = alpha;
if (set_current) if (set_current)
{ {
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
} }
csel = cnp->cur_page; csel = cnp->cur_page;
csel->info->m.setcolor (csel->selector_data, red, green, blue, set_current); csel->info->methods.setcolor (csel->selector_data,
red, green, blue, alpha,
set_current);
} }
/* Called by a colour selector on user selection of a colour */ /* Called by a colour selector on user selection of a colour */
@ -279,10 +292,11 @@ static void
color_notebook_update_callback (gpointer data, color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue) gint blue,
gint alpha)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
ColorNotebook *cnp; ColorNotebook *cnp;
g_return_if_fail (data != NULL); g_return_if_fail (data != NULL);
@ -292,12 +306,14 @@ color_notebook_update_callback (gpointer data,
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
if (cnp->wants_updates && cnp->callback) if (cnp->wants_updates && cnp->callback)
{ {
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_UPDATE, COLOR_NOTEBOOK_UPDATE,
cnp->client_data); cnp->client_data);
} }
@ -315,6 +331,7 @@ color_notebook_ok_callback (GtkWidget *widget,
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_OK, COLOR_NOTEBOOK_OK,
cnp->client_data); cnp->client_data);
} }
@ -331,6 +348,7 @@ color_notebook_cancel_callback (GtkWidget *widget,
(* cnp->callback) (cnp->orig_values[RED], (* cnp->callback) (cnp->orig_values[RED],
cnp->orig_values[GREEN], cnp->orig_values[GREEN],
cnp->orig_values[BLUE], cnp->orig_values[BLUE],
cnp->orig_values[ALPHA],
COLOR_NOTEBOOK_CANCEL, COLOR_NOTEBOOK_CANCEL,
cnp->client_data); cnp->client_data);
} }
@ -340,7 +358,7 @@ color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num) guint page_num)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
cnp = gtk_object_get_user_data (GTK_OBJECT (widget)); cnp = gtk_object_get_user_data (GTK_OBJECT (widget));
@ -349,18 +367,19 @@ color_notebook_page_switch (GtkWidget *widget,
g_return_if_fail (cnp != NULL && csel != NULL); g_return_if_fail (cnp != NULL && csel != NULL);
cnp->cur_page = csel; cnp->cur_page = csel;
csel->info->m.setcolor (csel->selector_data, csel->info->methods.setcolor (csel->selector_data,
cnp->values[RED], cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
TRUE); cnp->values[ALPHA],
TRUE);
} }
static void static void
color_notebook_help_func (const gchar *data) color_notebook_help_func (const gchar *data)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
gchar *help_path; gchar *help_path;
cnp = (ColorNotebook *) data; cnp = (ColorNotebook *) data;
@ -393,13 +412,14 @@ gimp_color_selector_register (const gchar *name,
info = g_new (ColorSelectorInfo, 1); info = g_new (ColorSelectorInfo, 1);
info->name = g_strdup (name); info->name = g_strdup (name);
info->help_page = g_strdup (help_page); info->help_page = g_strdup (help_page);
info->m = *methods; info->methods = *methods;
info->refs = 0; info->refs = 0;
info->active = TRUE; info->active = TRUE;
info->next = selector_info;
info->next = selector_info;
selector_info = info; selector_info = info;
return info; return info;

View File

@ -30,6 +30,7 @@ typedef enum
typedef void (* ColorNotebookCallback) (gint red, typedef void (* ColorNotebookCallback) (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookState state, ColorNotebookState state,
gpointer data); gpointer data);
@ -42,8 +43,8 @@ struct _ColorNotebook
GtkWidget *shell; GtkWidget *shell;
GtkWidget *notebook; GtkWidget *notebook;
gint values[3]; gint values[4];
gint orig_values[3]; gint orig_values[4];
ColorNotebookCallback callback; ColorNotebookCallback callback;
gpointer client_data; gpointer client_data;
@ -57,9 +58,11 @@ struct _ColorNotebook
ColorNotebook * color_notebook_new (gint red, ColorNotebook * color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer data, gpointer data,
gboolean wants_update); gboolean wants_update,
gboolean show_aplha);
void color_notebook_show (ColorNotebook *cnb); void color_notebook_show (ColorNotebook *cnb);
void color_notebook_hide (ColorNotebook *cnb); void color_notebook_hide (ColorNotebook *cnb);
@ -69,6 +72,7 @@ void color_notebook_set_color (ColorNotebook *cnb,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current); gboolean set_current);
#endif /* __COLOR_NOTEBOOK_H__ */ #endif /* __COLOR_NOTEBOOK_H__ */

View File

@ -898,9 +898,9 @@ gdisplay_bucket_fill (GtkWidget *widget,
TileManager *buf_tiles; TileManager *buf_tiles;
PixelRegion bufPR; PixelRegion bufPR;
GimpContext *context; GimpContext *context;
gint x1, x2, y1, y2; gint x1, x2, y1, y2;
gint bytes; gint bytes;
gboolean has_alpha; gboolean has_alpha;
guchar color[3]; guchar color[3];
TempBuf *pat_buf = NULL; TempBuf *pat_buf = NULL;
@ -995,13 +995,15 @@ gdisplay_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
guchar color[3]; guchar color[4];
color[0] = r; color[0] = r;
color[1] = g; color[1] = g;
color[2] = b; color[2] = b;
color[3] = a;
gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data); gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data);
} }

View File

@ -59,6 +59,7 @@ void gdisplay_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
void gdisplay_drop_pattern (GtkWidget *widget, void gdisplay_drop_pattern (GtkWidget *widget,
GPattern *pattern, GPattern *pattern,

View File

@ -898,9 +898,9 @@ gdisplay_bucket_fill (GtkWidget *widget,
TileManager *buf_tiles; TileManager *buf_tiles;
PixelRegion bufPR; PixelRegion bufPR;
GimpContext *context; GimpContext *context;
gint x1, x2, y1, y2; gint x1, x2, y1, y2;
gint bytes; gint bytes;
gboolean has_alpha; gboolean has_alpha;
guchar color[3]; guchar color[3];
TempBuf *pat_buf = NULL; TempBuf *pat_buf = NULL;
@ -995,13 +995,15 @@ gdisplay_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
guchar color[3]; guchar color[4];
color[0] = r; color[0] = r;
color[1] = g; color[1] = g;
color[2] = b; color[2] = b;
color[3] = a;
gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data); gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data);
} }

View File

@ -59,6 +59,7 @@ void gdisplay_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
void gdisplay_drop_pattern (GtkWidget *widget, void gdisplay_drop_pattern (GtkWidget *widget,
GPattern *pattern, GPattern *pattern,

View File

@ -898,9 +898,9 @@ gdisplay_bucket_fill (GtkWidget *widget,
TileManager *buf_tiles; TileManager *buf_tiles;
PixelRegion bufPR; PixelRegion bufPR;
GimpContext *context; GimpContext *context;
gint x1, x2, y1, y2; gint x1, x2, y1, y2;
gint bytes; gint bytes;
gboolean has_alpha; gboolean has_alpha;
guchar color[3]; guchar color[3];
TempBuf *pat_buf = NULL; TempBuf *pat_buf = NULL;
@ -995,13 +995,15 @@ gdisplay_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
guchar color[3]; guchar color[4];
color[0] = r; color[0] = r;
color[1] = g; color[1] = g;
color[2] = b; color[2] = b;
color[3] = a;
gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data); gdisplay_bucket_fill (widget, FG_BUCKET_FILL, color, NULL, data);
} }

View File

@ -59,6 +59,7 @@ void gdisplay_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
void gdisplay_drop_pattern (GtkWidget *widget, void gdisplay_drop_pattern (GtkWidget *widget,
GPattern *pattern, GPattern *pattern,

View File

@ -255,9 +255,7 @@ edit_qmask_channel_query (GDisplay * gdisp)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
guchar r, g, b, a;
gint i;
guchar channel_color[3] = { 0, 0, 0 };
/* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */ /* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */
/* the new options structure */ /* the new options structure */
@ -265,10 +263,12 @@ edit_qmask_channel_query (GDisplay * gdisp)
options->gimage = gdisp->gimage; options->gimage = gdisp->gimage;
options->opacity = (gdouble) options->gimage->qmask_opacity; options->opacity = (gdouble) options->gimage->qmask_opacity;
for (i = 0; i < 3; i++) r = options->gimage->qmask_color[0];
channel_color[i] = options->gimage->qmask_color[i]; g = options->gimage->qmask_color[1];
b = options->gimage->qmask_color[2];
a = 255;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (r, g, b, a, FALSE, 48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -492,11 +492,11 @@ gimp_dnd_get_color_icon (GtkWidget *widget,
gpointer get_color_data) gpointer get_color_data)
{ {
GtkWidget *preview; GtkWidget *preview;
guchar r, g, b; guchar r, g, b, a;
guchar row[DRAG_PREVIEW_SIZE * 3]; guchar row[DRAG_PREVIEW_SIZE * 3];
gint i; gint i;
(* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, (* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, &a,
get_color_data); get_color_data);
for (i = 0; i < DRAG_PREVIEW_SIZE; i++) for (i = 0; i < DRAG_PREVIEW_SIZE; i++)
@ -527,9 +527,9 @@ gimp_dnd_get_color_data (GtkWidget *widget,
gint *length) gint *length)
{ {
guint16 *vals; guint16 *vals;
guchar r, g, b; guchar r, g, b, a;
(* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, (* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, &a,
get_color_data); get_color_data);
vals = g_new (guint16, 4); vals = g_new (guint16, 4);
@ -537,7 +537,7 @@ gimp_dnd_get_color_data (GtkWidget *widget,
vals[0] = r + (r << 8); vals[0] = r + (r << 8);
vals[1] = g + (g << 8); vals[1] = g + (g << 8);
vals[2] = b + (b << 8); vals[2] = b + (b << 8);
vals[3] = 0xffff; vals[3] = a + (a << 8);
*format = 16; *format = 16;
*length = 8; *length = 8;
@ -554,7 +554,7 @@ gimp_dnd_set_color_data (GtkWidget *widget,
gint length) gint length)
{ {
guint16 *color_vals; guint16 *color_vals;
guchar r, g, b; guchar r, g, b, a;
if ((format != 16) || (length != 8)) if ((format != 16) || (length != 8))
{ {
@ -567,8 +567,9 @@ gimp_dnd_set_color_data (GtkWidget *widget,
r = color_vals[0] >> 8; r = color_vals[0] >> 8;
g = color_vals[1] >> 8; g = color_vals[1] >> 8;
b = color_vals[2] >> 8; b = color_vals[2] >> 8;
a = color_vals[3] >> 8;
(* (GimpDndDropColorFunc) set_color_func) (widget, r, g, b, (* (GimpDndDropColorFunc) set_color_func) (widget, r, g, b, a,
set_color_data); set_color_data);
} }
@ -627,7 +628,7 @@ gimp_dnd_get_brush_data (GtkWidget *widget,
gint *length) gint *length)
{ {
GimpBrush *brush; GimpBrush *brush;
gchar *name; gchar *name;
brush = (* (GimpDndDragBrushFunc) get_brush_func) (widget, get_brush_data); brush = (* (GimpDndDragBrushFunc) get_brush_func) (widget, get_brush_data);
@ -654,7 +655,7 @@ gimp_dnd_set_brush_data (GtkWidget *widget,
gint length) gint length)
{ {
GimpBrush *brush; GimpBrush *brush;
gchar *name; gchar *name;
if ((format != 8) || (length < 1)) if ((format != 8) || (length < 1))
{ {
@ -729,7 +730,7 @@ gimp_dnd_get_pattern_data (GtkWidget *widget,
gint *length) gint *length)
{ {
GPattern *pattern; GPattern *pattern;
gchar *name; gchar *name;
pattern = (* (GimpDndDragPatternFunc) get_pattern_func) (widget, pattern = (* (GimpDndDragPatternFunc) get_pattern_func) (widget,
get_pattern_data); get_pattern_data);
@ -754,7 +755,7 @@ gimp_dnd_set_pattern_data (GtkWidget *widget,
gint length) gint length)
{ {
GPattern *pattern; GPattern *pattern;
gchar *name; gchar *name;
if ((format != 8) || (length < 1)) if ((format != 8) || (length < 1))
{ {
@ -830,7 +831,7 @@ gimp_dnd_get_gradient_data (GtkWidget *widget,
gint *length) gint *length)
{ {
gradient_t *gradient; gradient_t *gradient;
gchar *name; gchar *name;
gradient = gradient =
(* (GimpDndDragGradientFunc) get_gradient_func) (widget, get_gradient_data); (* (GimpDndDragGradientFunc) get_gradient_func) (widget, get_gradient_data);
@ -855,7 +856,7 @@ gimp_dnd_set_gradient_data (GtkWidget *widget,
gint length) gint length)
{ {
gradient_t *gradient; gradient_t *gradient;
gchar *name; gchar *name;
if ((format != 8) || (length < 1)) if ((format != 8) || (length < 1))
{ {

View File

@ -97,11 +97,13 @@ typedef void (* GimpDndDropColorFunc) (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
typedef void (* GimpDndDragColorFunc) (GtkWidget *widget, typedef void (* GimpDndDragColorFunc) (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data); gpointer data);
void gimp_dnd_color_source_set (GtkWidget *widget, void gimp_dnd_color_source_set (GtkWidget *widget,

View File

@ -185,6 +185,7 @@ static void channel_widget_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
static void channel_widget_draw_drop_indicator (ChannelWidget *cw, static void channel_widget_draw_drop_indicator (ChannelWidget *cw,
GimpDropType drop_type); GimpDropType drop_type);
@ -1757,10 +1758,11 @@ channel_widget_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
ChannelWidget *channel_widget = (ChannelWidget *) data; ChannelWidget *channel_widget = (ChannelWidget *) data;
Channel *channel = channel_widget->channel; Channel *channel = channel_widget->channel;
if (r != channel->col[0] || if (r != channel->col[0] ||
g != channel->col[1] || g != channel->col[1] ||
@ -1782,7 +1784,7 @@ channel_widget_draw_drop_indicator (ChannelWidget *channel_widget,
GimpDropType drop_type) GimpDropType drop_type)
{ {
static GdkGC *gc = NULL; static GdkGC *gc = NULL;
gint y = 0; gint y = 0;
if (!gc) if (!gc)
{ {
@ -1868,14 +1870,14 @@ channel_widget_button_events (GtkWidget *widget,
ChannelWidget *channel_widget; ChannelWidget *channel_widget;
GtkWidget *event_widget; GtkWidget *event_widget;
GdkEventButton *bevent; GdkEventButton *bevent;
gint return_val; gint return_val;
gint visible; gint visible;
gint width, height; gint width, height;
static gboolean button_down = FALSE; static gboolean button_down = FALSE;
static GtkWidget *click_widget = NULL; static GtkWidget *click_widget = NULL;
static gint old_state; static gint old_state;
static gint exclusive; static gint exclusive;
channel_widget = channel_widget =
(ChannelWidget *) gtk_object_get_user_data (GTK_OBJECT (widget)); (ChannelWidget *) gtk_object_get_user_data (GTK_OBJECT (widget));
@ -1896,7 +1898,6 @@ channel_widget_button_events (GtkWidget *widget,
break; break;
} }
switch (event->type) switch (event->type)
{ {
case GDK_EXPOSE: case GDK_EXPOSE:
@ -2009,7 +2010,7 @@ channel_widget_preview_events (GtkWidget *widget,
ChannelWidget *channel_widget; ChannelWidget *channel_widget;
GdkEventExpose *eevent; GdkEventExpose *eevent;
GdkEventButton *bevent; GdkEventButton *bevent;
gboolean valid; gboolean valid;
valid = FALSE; valid = FALSE;
@ -2082,8 +2083,8 @@ static void
channel_widget_preview_redraw (ChannelWidget *channel_widget) channel_widget_preview_redraw (ChannelWidget *channel_widget)
{ {
TempBuf *preview_buf; TempBuf *preview_buf;
gint width, height; gint width, height;
gint channel; gint channel;
/* allocate the channel widget pixmap */ /* allocate the channel widget pixmap */
if (! channel_widget->channel_pixmap) if (! channel_widget->channel_pixmap)
@ -2180,15 +2181,15 @@ channel_widget_preview_redraw (ChannelWidget *channel_widget)
static void static void
channel_widget_no_preview_redraw (ChannelWidget *channel_widget) channel_widget_no_preview_redraw (ChannelWidget *channel_widget)
{ {
GdkPixmap *pixmap; GdkPixmap *pixmap;
GdkPixmap **pixmap_normal; GdkPixmap **pixmap_normal;
GdkPixmap **pixmap_selected; GdkPixmap **pixmap_selected;
GdkPixmap **pixmap_insensitive; GdkPixmap **pixmap_insensitive;
GdkColor *color; GdkColor *color;
GtkWidget *widget; GtkWidget *widget;
GtkStateType state; GtkStateType state;
gchar *bits; gchar *bits;
gint width, height; gint width, height;
state = channel_widget->list_item->state; state = channel_widget->list_item->state;
@ -2249,10 +2250,10 @@ channel_widget_no_preview_redraw (ChannelWidget *channel_widget)
static void static void
channel_widget_eye_redraw (ChannelWidget *channel_widget) channel_widget_eye_redraw (ChannelWidget *channel_widget)
{ {
GdkPixmap *pixmap; GdkPixmap *pixmap;
GdkColor *color; GdkColor *color;
GtkStateType state; GtkStateType state;
gboolean visible; gboolean visible;
state = channel_widget->list_item->state; state = channel_widget->list_item->state;
@ -2480,16 +2481,16 @@ struct _NewChannelOptions
}; };
static gchar *channel_name = NULL; static gchar *channel_name = NULL;
static guchar channel_color[3] = { 0, 0, 0 }; static guchar channel_color[4] = { 0, 0, 0, 0 };
static void static void
new_channel_query_ok_callback (GtkWidget *widget, new_channel_query_ok_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
NewChannelOptions *options; NewChannelOptions *options;
Channel *new_channel; Channel *new_channel;
GimpImage *gimage; GimpImage *gimage;
gint i; gint i;
options = (NewChannelOptions *) data; options = (NewChannelOptions *) data;
@ -2530,7 +2531,12 @@ channels_dialog_new_channel_query (GimpImage* gimage)
options = g_new (NewChannelOptions, 1); options = g_new (NewChannelOptions, 1);
options->gimage = gimage; options->gimage = gimage;
options->opacity = 50.0; options->opacity = 50.0;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (channel_color[0],
channel_color[1],
channel_color[2],
channel_color[3],
FALSE,
48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =
@ -2633,9 +2639,9 @@ edit_channel_query_ok_callback (GtkWidget *widget,
{ {
EditChannelOptions *options; EditChannelOptions *options;
Channel *channel; Channel *channel;
gint opacity; gint opacity;
gint update = FALSE; gint update = FALSE;
gint i; gint i;
options = (EditChannelOptions *) data; options = (EditChannelOptions *) data;
channel = options->channel_widget->channel; channel = options->channel_widget->channel;
@ -2654,6 +2660,7 @@ edit_channel_query_ok_callback (GtkWidget *widget,
channel->opacity = opacity; channel->opacity = opacity;
update = TRUE; update = TRUE;
} }
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
if (options->color_panel->color[i] != channel->col[i]) if (options->color_panel->color[i] != channel->col[i])
{ {
@ -2683,17 +2690,23 @@ channels_dialog_edit_channel_query (ChannelWidget *channel_widget)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
gint i; gint i;
/* the new options structure */ /* the new options structure */
options = g_new (EditChannelOptions, 1); options = g_new (EditChannelOptions, 1);
options->channel_widget = channel_widget; options->channel_widget = channel_widget;
options->gimage = channel_widget->gimage; options->gimage = channel_widget->gimage;
options->opacity = (gdouble) channel_widget->channel->opacity / 2.55; options->opacity = (gdouble) channel_widget->channel->opacity / 2.55;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
channel_color[i] = channel_widget->channel->col[i]; channel_color[i] = channel_widget->channel->col[i];
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (channel_color[0],
channel_color[1],
channel_color[2],
channel_color[3],
FALSE,
48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -51,16 +51,19 @@ static void color_area_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
static void color_area_drag_color (GtkWidget *widget, static void color_area_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data); gpointer data);
static void color_area_color_changed (GimpContext *context, static void color_area_color_changed (GimpContext *context,
gint r, gint r,
gint g, gint g,
gint b, gint b,
gint a,
gpointer data); gpointer data);
/* Global variables */ /* Global variables */
@ -277,6 +280,7 @@ static void
color_area_select_callback (gint r, color_area_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
void *client_data) void *client_data)
{ {
@ -330,8 +334,9 @@ color_area_edit (void)
if (! color_notebook) if (! color_notebook)
{ {
color_notebook = color_notebook_new (r, g, b, color_area_select_callback, color_notebook = color_notebook_new (r, g, b, 255,
NULL, TRUE); color_area_select_callback,
NULL, TRUE, FALSE);
color_notebook_active = TRUE; color_notebook_active = TRUE;
} }
else else
@ -344,7 +349,7 @@ color_area_edit (void)
else else
gdk_window_raise (color_notebook->shell->window); gdk_window_raise (color_notebook->shell->window);
color_notebook_set_color (color_notebook, r, g, b, TRUE); color_notebook_set_color (color_notebook, r, g, b, 255, TRUE);
} }
} }
@ -534,8 +539,11 @@ color_area_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
*a = 255;
if (active_color == FOREGROUND) if (active_color == FOREGROUND)
gimp_context_get_foreground (gimp_context_get_user (), r, g, b); gimp_context_get_foreground (gimp_context_get_user (), r, g, b);
else else
@ -547,12 +555,13 @@ color_area_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
if (color_notebook_active && if (color_notebook_active &&
active_color == edit_color) active_color == edit_color)
{ {
color_notebook_set_color (color_notebook, r, g, b, TRUE); color_notebook_set_color (color_notebook, r, g, b, 255, TRUE);
} }
else else
{ {
@ -568,6 +577,7 @@ color_area_color_changed (GimpContext *context,
gint r, gint r,
gint g, gint g,
gint b, gint b,
gint a,
gpointer data) gpointer data)
{ {
color_area_draw (); color_area_draw ();

View File

@ -46,7 +46,7 @@ struct _ColorSelectorInfo
{ {
char *name; /* label used in notebook tab */ char *name; /* label used in notebook tab */
char *help_page; char *help_page;
GimpColorSelectorMethods m; GimpColorSelectorMethods methods;
int refs; /* number of instances around */ int refs; /* number of instances around */
gboolean active; gboolean active;
void (*death_callback) (void *data); void (*death_callback) (void *data);
@ -71,7 +71,8 @@ static void color_notebook_cancel_callback (GtkWidget *widget,
static void color_notebook_update_callback (gpointer data, static void color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue); gint blue,
gint alpha);
static void color_notebook_page_switch (GtkWidget *widget, static void color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num); guint page_num);
@ -88,6 +89,7 @@ enum
RED, RED,
GREEN, GREEN,
BLUE, BLUE,
ALPHA,
NUM_COLORS NUM_COLORS
}; };
@ -96,13 +98,15 @@ ColorNotebook *
color_notebook_new (gint red, color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer client_data, gpointer client_data,
gboolean wants_updates) gboolean wants_updates,
gboolean show_alpha)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
GtkWidget *label; GtkWidget *label;
ColorSelectorInfo *info; ColorSelectorInfo *info;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_val_if_fail (selector_info != NULL, NULL); g_return_val_if_fail (selector_info != NULL, NULL);
@ -118,6 +122,7 @@ color_notebook_new (gint red,
cnp->values[RED] = cnp->orig_values[RED] = red & 0xff; cnp->values[RED] = cnp->orig_values[RED] = red & 0xff;
cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff; cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff;
cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff; cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff;
cnp->values[ALPHA] = cnp->orig_values[ALPHA] = alpha & 0xff;
cnp->shell = cnp->shell =
gimp_dialog_new (_("Color Selection"), "color_selection", gimp_dialog_new (_("Color Selection"), "color_selection",
@ -158,9 +163,10 @@ color_notebook_new (gint red,
csel->color_notebook = cnp; csel->color_notebook = cnp;
csel->info = info; csel->info = info;
info->refs++; info->refs++;
csel->frame = info->m.new (red, green, blue, csel->frame = info->methods.new (red, green, blue, alpha,
color_notebook_update_callback, csel, show_alpha,
&csel->selector_data); color_notebook_update_callback, csel,
&csel->selector_data);
gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook", gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook",
csel); csel);
@ -201,7 +207,8 @@ color_notebook_new (gint red,
{ {
gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp); gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp);
gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page", gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page",
(GtkSignalFunc)color_notebook_page_switch, NULL); GTK_SIGNAL_FUNC (color_notebook_page_switch),
NULL);
} }
return cnp; return cnp;
@ -236,7 +243,7 @@ color_notebook_free (ColorNotebook *cnp)
{ {
next = csel->next; next = csel->next;
csel->info->m.free (csel->selector_data); csel->info->methods.free (csel->selector_data);
csel->info->refs--; csel->info->refs--;
if (csel->info->refs == 0 && !csel->info->active) if (csel->info->refs == 0 && !csel->info->active)
@ -254,24 +261,30 @@ color_notebook_set_color (ColorNotebook *cnp,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current) gboolean set_current)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_if_fail (cnp != NULL); g_return_if_fail (cnp != NULL);
cnp->orig_values[RED] = red; cnp->orig_values[RED] = red;
cnp->orig_values[GREEN] = green; cnp->orig_values[GREEN] = green;
cnp->orig_values[BLUE] = blue; cnp->orig_values[BLUE] = blue;
cnp->orig_values[ALPHA] = alpha;
if (set_current) if (set_current)
{ {
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
} }
csel = cnp->cur_page; csel = cnp->cur_page;
csel->info->m.setcolor (csel->selector_data, red, green, blue, set_current); csel->info->methods.setcolor (csel->selector_data,
red, green, blue, alpha,
set_current);
} }
/* Called by a colour selector on user selection of a colour */ /* Called by a colour selector on user selection of a colour */
@ -279,10 +292,11 @@ static void
color_notebook_update_callback (gpointer data, color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue) gint blue,
gint alpha)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
ColorNotebook *cnp; ColorNotebook *cnp;
g_return_if_fail (data != NULL); g_return_if_fail (data != NULL);
@ -292,12 +306,14 @@ color_notebook_update_callback (gpointer data,
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
if (cnp->wants_updates && cnp->callback) if (cnp->wants_updates && cnp->callback)
{ {
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_UPDATE, COLOR_NOTEBOOK_UPDATE,
cnp->client_data); cnp->client_data);
} }
@ -315,6 +331,7 @@ color_notebook_ok_callback (GtkWidget *widget,
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_OK, COLOR_NOTEBOOK_OK,
cnp->client_data); cnp->client_data);
} }
@ -331,6 +348,7 @@ color_notebook_cancel_callback (GtkWidget *widget,
(* cnp->callback) (cnp->orig_values[RED], (* cnp->callback) (cnp->orig_values[RED],
cnp->orig_values[GREEN], cnp->orig_values[GREEN],
cnp->orig_values[BLUE], cnp->orig_values[BLUE],
cnp->orig_values[ALPHA],
COLOR_NOTEBOOK_CANCEL, COLOR_NOTEBOOK_CANCEL,
cnp->client_data); cnp->client_data);
} }
@ -340,7 +358,7 @@ color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num) guint page_num)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
cnp = gtk_object_get_user_data (GTK_OBJECT (widget)); cnp = gtk_object_get_user_data (GTK_OBJECT (widget));
@ -349,18 +367,19 @@ color_notebook_page_switch (GtkWidget *widget,
g_return_if_fail (cnp != NULL && csel != NULL); g_return_if_fail (cnp != NULL && csel != NULL);
cnp->cur_page = csel; cnp->cur_page = csel;
csel->info->m.setcolor (csel->selector_data, csel->info->methods.setcolor (csel->selector_data,
cnp->values[RED], cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
TRUE); cnp->values[ALPHA],
TRUE);
} }
static void static void
color_notebook_help_func (const gchar *data) color_notebook_help_func (const gchar *data)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
gchar *help_path; gchar *help_path;
cnp = (ColorNotebook *) data; cnp = (ColorNotebook *) data;
@ -393,13 +412,14 @@ gimp_color_selector_register (const gchar *name,
info = g_new (ColorSelectorInfo, 1); info = g_new (ColorSelectorInfo, 1);
info->name = g_strdup (name); info->name = g_strdup (name);
info->help_page = g_strdup (help_page); info->help_page = g_strdup (help_page);
info->m = *methods; info->methods = *methods;
info->refs = 0; info->refs = 0;
info->active = TRUE; info->active = TRUE;
info->next = selector_info;
info->next = selector_info;
selector_info = info; selector_info = info;
return info; return info;

View File

@ -30,6 +30,7 @@ typedef enum
typedef void (* ColorNotebookCallback) (gint red, typedef void (* ColorNotebookCallback) (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookState state, ColorNotebookState state,
gpointer data); gpointer data);
@ -42,8 +43,8 @@ struct _ColorNotebook
GtkWidget *shell; GtkWidget *shell;
GtkWidget *notebook; GtkWidget *notebook;
gint values[3]; gint values[4];
gint orig_values[3]; gint orig_values[4];
ColorNotebookCallback callback; ColorNotebookCallback callback;
gpointer client_data; gpointer client_data;
@ -57,9 +58,11 @@ struct _ColorNotebook
ColorNotebook * color_notebook_new (gint red, ColorNotebook * color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer data, gpointer data,
gboolean wants_update); gboolean wants_update,
gboolean show_aplha);
void color_notebook_show (ColorNotebook *cnb); void color_notebook_show (ColorNotebook *cnb);
void color_notebook_hide (ColorNotebook *cnb); void color_notebook_hide (ColorNotebook *cnb);
@ -69,6 +72,7 @@ void color_notebook_set_color (ColorNotebook *cnb,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current); gboolean set_current);
#endif /* __COLOR_NOTEBOOK_H__ */ #endif /* __COLOR_NOTEBOOK_H__ */

File diff suppressed because it is too large Load Diff

View File

@ -101,40 +101,49 @@ struct _DeviceInfoDialog
GtkWidget **eventboxes; GtkWidget **eventboxes;
}; };
/* local functions */
static void input_dialog_able_callback (GtkWidget *w, guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info, /* local functions */
FILE *fp); static void input_dialog_able_callback (GtkWidget *widget,
guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info,
FILE *fp);
static void devices_write_rc (void); static void devices_write_rc (void);
static void device_status_destroy_callback (void); static void device_status_destroy_callback (void);
static void devices_close_callback (GtkWidget *, gpointer); static void devices_close_callback (GtkWidget *widget,
gpointer data);
static void device_status_update (guint32 deviceid); static void device_status_update (guint32 deviceid);
static void device_status_update_current (void); static void device_status_update_current (void);
static ToolType device_status_drag_tool (GtkWidget *, static ToolType device_status_drag_tool (GtkWidget *widget,
gpointer); gpointer data);
static void device_status_drop_tool (GtkWidget *, static void device_status_drop_tool (GtkWidget *widget,
ToolType, ToolType tool,
gpointer); gpointer data);
static void device_status_drag_color (GtkWidget *, static void device_status_drag_color (GtkWidget *widget,
guchar *, guchar *, guchar *, guchar *r,
gpointer); guchar *g,
static void device_status_drop_color (GtkWidget *, guchar *b,
guchar, guchar, guchar, guchar *a,
gpointer); gpointer data);
static void device_status_drop_brush (GtkWidget *, static void device_status_drop_color (GtkWidget *widget,
GimpBrush *, guchar r,
gpointer); guchar g,
static void device_status_drop_pattern (GtkWidget *, guchar b,
GPattern *, guchar a,
gpointer); gpointer data);
static void device_status_drop_gradient (GtkWidget *, static void device_status_drop_brush (GtkWidget *widget,
gradient_t *, GimpBrush *brush,
gpointer); gpointer data);
static void device_status_drop_pattern (GtkWidget *widget,
GPattern *pattern,
gpointer data);
static void device_status_drop_gradient (GtkWidget *widget,
gradient_t *gradient,
gpointer data);
static void device_status_color_changed (GimpContext *context, static void device_status_color_changed (GimpContext *context,
gint r, gint r,
@ -148,6 +157,7 @@ static void device_status_data_changed (GimpContext *context,
static void device_status_context_connect (GimpContext *context, static void device_status_context_connect (GimpContext *context,
guint32 deviceid); guint32 deviceid);
/* global data */ /* global data */
gint current_device = GDK_CORE_POINTER; gint current_device = GDK_CORE_POINTER;
@ -173,6 +183,7 @@ static GtkTargetEntry color_area_target_table[] =
static guint n_color_area_targets = (sizeof (color_area_target_table) / static guint n_color_area_targets = (sizeof (color_area_target_table) /
sizeof (color_area_target_table[0])); sizeof (color_area_target_table[0]));
/* utility functions for the device lists */ /* utility functions for the device lists */
static GdkDeviceInfo * static GdkDeviceInfo *
@ -1129,6 +1140,7 @@ device_status_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;
@ -1137,6 +1149,7 @@ device_status_drag_color (GtkWidget *widget,
if (device_info) if (device_info)
{ {
*a = 255;
gimp_context_get_foreground (device_info->context, r, g, b); gimp_context_get_foreground (device_info->context, r, g, b);
} }
else else
@ -1150,6 +1163,7 @@ device_status_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;

View File

@ -101,40 +101,49 @@ struct _DeviceInfoDialog
GtkWidget **eventboxes; GtkWidget **eventboxes;
}; };
/* local functions */
static void input_dialog_able_callback (GtkWidget *w, guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info, /* local functions */
FILE *fp); static void input_dialog_able_callback (GtkWidget *widget,
guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info,
FILE *fp);
static void devices_write_rc (void); static void devices_write_rc (void);
static void device_status_destroy_callback (void); static void device_status_destroy_callback (void);
static void devices_close_callback (GtkWidget *, gpointer); static void devices_close_callback (GtkWidget *widget,
gpointer data);
static void device_status_update (guint32 deviceid); static void device_status_update (guint32 deviceid);
static void device_status_update_current (void); static void device_status_update_current (void);
static ToolType device_status_drag_tool (GtkWidget *, static ToolType device_status_drag_tool (GtkWidget *widget,
gpointer); gpointer data);
static void device_status_drop_tool (GtkWidget *, static void device_status_drop_tool (GtkWidget *widget,
ToolType, ToolType tool,
gpointer); gpointer data);
static void device_status_drag_color (GtkWidget *, static void device_status_drag_color (GtkWidget *widget,
guchar *, guchar *, guchar *, guchar *r,
gpointer); guchar *g,
static void device_status_drop_color (GtkWidget *, guchar *b,
guchar, guchar, guchar, guchar *a,
gpointer); gpointer data);
static void device_status_drop_brush (GtkWidget *, static void device_status_drop_color (GtkWidget *widget,
GimpBrush *, guchar r,
gpointer); guchar g,
static void device_status_drop_pattern (GtkWidget *, guchar b,
GPattern *, guchar a,
gpointer); gpointer data);
static void device_status_drop_gradient (GtkWidget *, static void device_status_drop_brush (GtkWidget *widget,
gradient_t *, GimpBrush *brush,
gpointer); gpointer data);
static void device_status_drop_pattern (GtkWidget *widget,
GPattern *pattern,
gpointer data);
static void device_status_drop_gradient (GtkWidget *widget,
gradient_t *gradient,
gpointer data);
static void device_status_color_changed (GimpContext *context, static void device_status_color_changed (GimpContext *context,
gint r, gint r,
@ -148,6 +157,7 @@ static void device_status_data_changed (GimpContext *context,
static void device_status_context_connect (GimpContext *context, static void device_status_context_connect (GimpContext *context,
guint32 deviceid); guint32 deviceid);
/* global data */ /* global data */
gint current_device = GDK_CORE_POINTER; gint current_device = GDK_CORE_POINTER;
@ -173,6 +183,7 @@ static GtkTargetEntry color_area_target_table[] =
static guint n_color_area_targets = (sizeof (color_area_target_table) / static guint n_color_area_targets = (sizeof (color_area_target_table) /
sizeof (color_area_target_table[0])); sizeof (color_area_target_table[0]));
/* utility functions for the device lists */ /* utility functions for the device lists */
static GdkDeviceInfo * static GdkDeviceInfo *
@ -1129,6 +1140,7 @@ device_status_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;
@ -1137,6 +1149,7 @@ device_status_drag_color (GtkWidget *widget,
if (device_info) if (device_info)
{ {
*a = 255;
gimp_context_get_foreground (device_info->context, r, g, b); gimp_context_get_foreground (device_info->context, r, g, b);
} }
else else
@ -1150,6 +1163,7 @@ device_status_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;

View File

@ -1008,6 +1008,7 @@ static void
palette_select_callback (gint r, palette_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
void *data) void *data)
{ {
@ -1086,7 +1087,7 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;
guchar *color; guchar *color;
palette = data; palette = data;
if (palette && palette->entries && palette->color) if (palette && palette->entries && palette->color)
@ -1096,9 +1097,9 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
if (!palette->color_notebook) if (!palette->color_notebook)
{ {
palette->color_notebook = palette->color_notebook =
color_notebook_new (color[0], color[1], color[2], color_notebook_new (color[0], color[1], color[2], 255,
palette_select_callback, palette, palette_select_callback, palette,
FALSE); FALSE, FALSE);
palette->color_notebook_active = TRUE; palette->color_notebook_active = TRUE;
} }
else else
@ -1110,7 +1111,8 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
} }
color_notebook_set_color (palette->color_notebook, color_notebook_set_color (palette->color_notebook,
color[0], color[1], color[2], 1); color[0], color[1], color[2], 255,
TRUE);
} }
} }
} }
@ -1119,10 +1121,10 @@ static void
palette_dialog_delete_entry_callback (GtkWidget *widget, palette_dialog_delete_entry_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
PaletteEntry *entry; PaletteEntry *entry;
PaletteDialog *palette; PaletteDialog *palette;
GSList *tmp_link; GSList *tmp_link;
gint pos = 0; gint pos = 0;
palette = data; palette = data;
@ -1984,6 +1986,7 @@ palette_dialog_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;
@ -1995,6 +1998,7 @@ palette_dialog_drag_color (GtkWidget *widget,
*r = (guchar) palette->dnd_color->color[0]; *r = (guchar) palette->dnd_color->color[0];
*g = (guchar) palette->dnd_color->color[1]; *g = (guchar) palette->dnd_color->color[1];
*b = (guchar) palette->dnd_color->color[2]; *b = (guchar) palette->dnd_color->color[2];
*a = (guchar) 255;
} }
else else
{ {
@ -2007,6 +2011,7 @@ palette_dialog_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;

View File

@ -255,9 +255,7 @@ edit_qmask_channel_query (GDisplay * gdisp)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
guchar r, g, b, a;
gint i;
guchar channel_color[3] = { 0, 0, 0 };
/* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */ /* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */
/* the new options structure */ /* the new options structure */
@ -265,10 +263,12 @@ edit_qmask_channel_query (GDisplay * gdisp)
options->gimage = gdisp->gimage; options->gimage = gdisp->gimage;
options->opacity = (gdouble) options->gimage->qmask_opacity; options->opacity = (gdouble) options->gimage->qmask_opacity;
for (i = 0; i < 3; i++) r = options->gimage->qmask_color[0];
channel_color[i] = options->gimage->qmask_color[i]; g = options->gimage->qmask_color[1];
b = options->gimage->qmask_color[2];
a = 255;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (r, g, b, a, FALSE, 48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -1008,6 +1008,7 @@ static void
palette_select_callback (gint r, palette_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
void *data) void *data)
{ {
@ -1086,7 +1087,7 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;
guchar *color; guchar *color;
palette = data; palette = data;
if (palette && palette->entries && palette->color) if (palette && palette->entries && palette->color)
@ -1096,9 +1097,9 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
if (!palette->color_notebook) if (!palette->color_notebook)
{ {
palette->color_notebook = palette->color_notebook =
color_notebook_new (color[0], color[1], color[2], color_notebook_new (color[0], color[1], color[2], 255,
palette_select_callback, palette, palette_select_callback, palette,
FALSE); FALSE, FALSE);
palette->color_notebook_active = TRUE; palette->color_notebook_active = TRUE;
} }
else else
@ -1110,7 +1111,8 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
} }
color_notebook_set_color (palette->color_notebook, color_notebook_set_color (palette->color_notebook,
color[0], color[1], color[2], 1); color[0], color[1], color[2], 255,
TRUE);
} }
} }
} }
@ -1119,10 +1121,10 @@ static void
palette_dialog_delete_entry_callback (GtkWidget *widget, palette_dialog_delete_entry_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
PaletteEntry *entry; PaletteEntry *entry;
PaletteDialog *palette; PaletteDialog *palette;
GSList *tmp_link; GSList *tmp_link;
gint pos = 0; gint pos = 0;
palette = data; palette = data;
@ -1984,6 +1986,7 @@ palette_dialog_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;
@ -1995,6 +1998,7 @@ palette_dialog_drag_color (GtkWidget *widget,
*r = (guchar) palette->dnd_color->color[0]; *r = (guchar) palette->dnd_color->color[0];
*g = (guchar) palette->dnd_color->color[1]; *g = (guchar) palette->dnd_color->color[1];
*b = (guchar) palette->dnd_color->color[2]; *b = (guchar) palette->dnd_color->color[2];
*a = (guchar) 255;
} }
else else
{ {
@ -2007,6 +2011,7 @@ palette_dialog_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;

View File

@ -255,9 +255,7 @@ edit_qmask_channel_query (GDisplay * gdisp)
GtkWidget *label; GtkWidget *label;
GtkWidget *opacity_scale; GtkWidget *opacity_scale;
GtkObject *opacity_scale_data; GtkObject *opacity_scale_data;
guchar r, g, b, a;
gint i;
guchar channel_color[3] = { 0, 0, 0 };
/* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */ /* channel = gimp_image_get_channel_by_name (gdisp->gimage, "Qmask"); */
/* the new options structure */ /* the new options structure */
@ -265,10 +263,12 @@ edit_qmask_channel_query (GDisplay * gdisp)
options->gimage = gdisp->gimage; options->gimage = gdisp->gimage;
options->opacity = (gdouble) options->gimage->qmask_opacity; options->opacity = (gdouble) options->gimage->qmask_opacity;
for (i = 0; i < 3; i++) r = options->gimage->qmask_color[0];
channel_color[i] = options->gimage->qmask_color[i]; g = options->gimage->qmask_color[1];
b = options->gimage->qmask_color[2];
a = 255;
options->color_panel = color_panel_new (channel_color, 48, 64); options->color_panel = color_panel_new (r, g, b, a, FALSE, 48, 64);
/* The dialog */ /* The dialog */
options->query_box = options->query_box =

View File

@ -102,6 +102,7 @@ static void by_color_select_color_drop (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
/* by_color select action functions */ /* by_color select action functions */
@ -1232,6 +1233,7 @@ by_color_select_color_drop (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {

View File

@ -304,7 +304,9 @@ color_picker_button_press (Tool *tool,
gtk_widget_reparent (color_picker_info->info_table, hbox); gtk_widget_reparent (color_picker_info->info_table, hbox);
color_panel = color_panel_new (NULL, 48, 64); color_panel = color_panel_new (0, 0, 0, 0,
gimp_drawable_has_alpha (tool->drawable),
48, 64);
gtk_box_pack_start (GTK_BOX (hbox), color_panel->color_panel_widget, gtk_box_pack_start (GTK_BOX (hbox), color_panel->color_panel_widget,
FALSE, FALSE, 0); FALSE, FALSE, 0);
gtk_widget_show (color_panel->color_panel_widget); gtk_widget_show (color_panel->color_panel_widget);
@ -523,7 +525,7 @@ pick_color_do (GimpImage *gimage,
has_alpha = GIMP_IMAGE_TYPE_HAS_ALPHA (sample_type); has_alpha = GIMP_IMAGE_TYPE_HAS_ALPHA (sample_type);
if (!(color = (*get_color_func) (get_color_obj, x, y))) if (!(color = (* get_color_func) (get_color_obj, x, y)))
return FALSE; return FALSE;
if (sample_average) if (sample_average)
@ -536,7 +538,7 @@ pick_color_do (GimpImage *gimage,
for (i = x - radius; i <= x + radius; i++) for (i = x - radius; i <= x + radius; i++)
for (j = y - radius; j <= y + radius; j++) for (j = y - radius; j <= y + radius; j++)
if ((tmp_color = (*get_color_func) (get_color_obj, i, j))) if ((tmp_color = (* get_color_func) (get_color_obj, i, j)))
{ {
count++; count++;
@ -573,6 +575,7 @@ pick_color_do (GimpImage *gimage,
final); final);
g_free (color); g_free (color);
return TRUE; return TRUE;
} }
@ -622,7 +625,7 @@ colorpicker_draw (Tool *tool)
ty - radiusy, ty - radiusy,
2 * radiusx + cx, 2 * radiusy + cy); 2 * radiusx + cx, 2 * radiusy + cy);
if(radiusx > 1 && radiusy > 1) if (radiusx > 1 && radiusy > 1)
{ {
gdk_draw_rectangle (cp_tool->core->win, cp_tool->core->gc, 0, gdk_draw_rectangle (cp_tool->core->win, cp_tool->core->gc, 0,
tx - radiusx + 2, tx - radiusx + 2,
@ -650,7 +653,10 @@ color_picker_info_update (Tool *tool,
} }
else else
{ {
guchar col[3]; guchar r = 0;
guchar g = 0;
guchar b = 0;
guchar a = 0;
if (! GTK_WIDGET_IS_SENSITIVE (color_panel->color_panel_widget)) if (! GTK_WIDGET_IS_SENSITIVE (color_panel->color_panel_widget))
gtk_widget_set_sensitive (color_panel->color_panel_widget, TRUE); gtk_widget_set_sensitive (color_panel->color_panel_widget, TRUE);
@ -670,9 +676,12 @@ color_picker_info_update (Tool *tool,
col_value [RED_PIX], col_value [RED_PIX],
col_value [GREEN_PIX], col_value [GREEN_PIX],
col_value [BLUE_PIX]); col_value [BLUE_PIX]);
col[0] = col_value [RED_PIX];
col[1] = col_value [GREEN_PIX]; r = col_value [RED_PIX];
col[2] = col_value [BLUE_PIX]; g = col_value [GREEN_PIX];
b = col_value [BLUE_PIX];
if (sample_type == RGBA_GIMAGE)
a = col_value [ALPHA_PIX];
break; break;
case INDEXED_GIMAGE: case INDEXEDA_GIMAGE: case INDEXED_GIMAGE: case INDEXEDA_GIMAGE:
@ -688,9 +697,12 @@ color_picker_info_update (Tool *tool,
col_value [RED_PIX], col_value [RED_PIX],
col_value [GREEN_PIX], col_value [GREEN_PIX],
col_value [BLUE_PIX]); col_value [BLUE_PIX]);
col[0] = col_value [RED_PIX];
col[1] = col_value [GREEN_PIX]; r = col_value [RED_PIX];
col[2] = col_value [BLUE_PIX]; g = col_value [GREEN_PIX];
b = col_value [BLUE_PIX];
if (sample_type == INDEXEDA_GIMAGE)
a = col_value [ALPHA_PIX];
break; break;
case GRAY_GIMAGE: case GRAYA_GIMAGE: case GRAY_GIMAGE: case GRAYA_GIMAGE:
@ -703,13 +715,16 @@ color_picker_info_update (Tool *tool,
col_value [GRAY_PIX], col_value [GRAY_PIX],
col_value [GRAY_PIX], col_value [GRAY_PIX],
col_value [GRAY_PIX]); col_value [GRAY_PIX]);
col[0] = col_value [GRAY_PIX];
col[1] = col_value [GRAY_PIX]; r = col_value [GRAY_PIX];
col[2] = col_value [GRAY_PIX]; g = col_value [GRAY_PIX];
b = col_value [GRAY_PIX];
if (sample_type == GRAYA_GIMAGE)
a = col_value [ALPHA_PIX];
break; break;
} }
color_panel_set_color (color_panel, col); color_panel_set_color (color_panel, r, g, b, a);
} }
info_dialog_update (color_picker_info); info_dialog_update (color_picker_info);

View File

@ -102,6 +102,7 @@ static void by_color_select_color_drop (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
/* by_color select action functions */ /* by_color select action functions */
@ -1232,6 +1233,7 @@ by_color_select_color_drop (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {

View File

@ -46,7 +46,7 @@ struct _ColorSelectorInfo
{ {
char *name; /* label used in notebook tab */ char *name; /* label used in notebook tab */
char *help_page; char *help_page;
GimpColorSelectorMethods m; GimpColorSelectorMethods methods;
int refs; /* number of instances around */ int refs; /* number of instances around */
gboolean active; gboolean active;
void (*death_callback) (void *data); void (*death_callback) (void *data);
@ -71,7 +71,8 @@ static void color_notebook_cancel_callback (GtkWidget *widget,
static void color_notebook_update_callback (gpointer data, static void color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue); gint blue,
gint alpha);
static void color_notebook_page_switch (GtkWidget *widget, static void color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num); guint page_num);
@ -88,6 +89,7 @@ enum
RED, RED,
GREEN, GREEN,
BLUE, BLUE,
ALPHA,
NUM_COLORS NUM_COLORS
}; };
@ -96,13 +98,15 @@ ColorNotebook *
color_notebook_new (gint red, color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer client_data, gpointer client_data,
gboolean wants_updates) gboolean wants_updates,
gboolean show_alpha)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
GtkWidget *label; GtkWidget *label;
ColorSelectorInfo *info; ColorSelectorInfo *info;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_val_if_fail (selector_info != NULL, NULL); g_return_val_if_fail (selector_info != NULL, NULL);
@ -118,6 +122,7 @@ color_notebook_new (gint red,
cnp->values[RED] = cnp->orig_values[RED] = red & 0xff; cnp->values[RED] = cnp->orig_values[RED] = red & 0xff;
cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff; cnp->values[GREEN] = cnp->orig_values[GREEN] = green & 0xff;
cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff; cnp->values[BLUE] = cnp->orig_values[BLUE] = blue & 0xff;
cnp->values[ALPHA] = cnp->orig_values[ALPHA] = alpha & 0xff;
cnp->shell = cnp->shell =
gimp_dialog_new (_("Color Selection"), "color_selection", gimp_dialog_new (_("Color Selection"), "color_selection",
@ -158,9 +163,10 @@ color_notebook_new (gint red,
csel->color_notebook = cnp; csel->color_notebook = cnp;
csel->info = info; csel->info = info;
info->refs++; info->refs++;
csel->frame = info->m.new (red, green, blue, csel->frame = info->methods.new (red, green, blue, alpha,
color_notebook_update_callback, csel, show_alpha,
&csel->selector_data); color_notebook_update_callback, csel,
&csel->selector_data);
gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook", gtk_object_set_data (GTK_OBJECT (csel->frame), "gimp_color_notebook",
csel); csel);
@ -201,7 +207,8 @@ color_notebook_new (gint red,
{ {
gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp); gtk_object_set_user_data (GTK_OBJECT (cnp->notebook), cnp);
gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page", gtk_signal_connect (GTK_OBJECT (cnp->notebook), "switch_page",
(GtkSignalFunc)color_notebook_page_switch, NULL); GTK_SIGNAL_FUNC (color_notebook_page_switch),
NULL);
} }
return cnp; return cnp;
@ -236,7 +243,7 @@ color_notebook_free (ColorNotebook *cnp)
{ {
next = csel->next; next = csel->next;
csel->info->m.free (csel->selector_data); csel->info->methods.free (csel->selector_data);
csel->info->refs--; csel->info->refs--;
if (csel->info->refs == 0 && !csel->info->active) if (csel->info->refs == 0 && !csel->info->active)
@ -254,24 +261,30 @@ color_notebook_set_color (ColorNotebook *cnp,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current) gboolean set_current)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
g_return_if_fail (cnp != NULL); g_return_if_fail (cnp != NULL);
cnp->orig_values[RED] = red; cnp->orig_values[RED] = red;
cnp->orig_values[GREEN] = green; cnp->orig_values[GREEN] = green;
cnp->orig_values[BLUE] = blue; cnp->orig_values[BLUE] = blue;
cnp->orig_values[ALPHA] = alpha;
if (set_current) if (set_current)
{ {
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
} }
csel = cnp->cur_page; csel = cnp->cur_page;
csel->info->m.setcolor (csel->selector_data, red, green, blue, set_current); csel->info->methods.setcolor (csel->selector_data,
red, green, blue, alpha,
set_current);
} }
/* Called by a colour selector on user selection of a colour */ /* Called by a colour selector on user selection of a colour */
@ -279,10 +292,11 @@ static void
color_notebook_update_callback (gpointer data, color_notebook_update_callback (gpointer data,
gint red, gint red,
gint green, gint green,
gint blue) gint blue,
gint alpha)
{ {
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
ColorNotebook *cnp; ColorNotebook *cnp;
g_return_if_fail (data != NULL); g_return_if_fail (data != NULL);
@ -292,12 +306,14 @@ color_notebook_update_callback (gpointer data,
cnp->values[RED] = red; cnp->values[RED] = red;
cnp->values[GREEN] = green; cnp->values[GREEN] = green;
cnp->values[BLUE] = blue; cnp->values[BLUE] = blue;
cnp->values[ALPHA] = alpha;
if (cnp->wants_updates && cnp->callback) if (cnp->wants_updates && cnp->callback)
{ {
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_UPDATE, COLOR_NOTEBOOK_UPDATE,
cnp->client_data); cnp->client_data);
} }
@ -315,6 +331,7 @@ color_notebook_ok_callback (GtkWidget *widget,
(* cnp->callback) (cnp->values[RED], (* cnp->callback) (cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
cnp->values[ALPHA],
COLOR_NOTEBOOK_OK, COLOR_NOTEBOOK_OK,
cnp->client_data); cnp->client_data);
} }
@ -331,6 +348,7 @@ color_notebook_cancel_callback (GtkWidget *widget,
(* cnp->callback) (cnp->orig_values[RED], (* cnp->callback) (cnp->orig_values[RED],
cnp->orig_values[GREEN], cnp->orig_values[GREEN],
cnp->orig_values[BLUE], cnp->orig_values[BLUE],
cnp->orig_values[ALPHA],
COLOR_NOTEBOOK_CANCEL, COLOR_NOTEBOOK_CANCEL,
cnp->client_data); cnp->client_data);
} }
@ -340,7 +358,7 @@ color_notebook_page_switch (GtkWidget *widget,
GtkNotebookPage *page, GtkNotebookPage *page,
guint page_num) guint page_num)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
ColorSelectorInstance *csel; ColorSelectorInstance *csel;
cnp = gtk_object_get_user_data (GTK_OBJECT (widget)); cnp = gtk_object_get_user_data (GTK_OBJECT (widget));
@ -349,18 +367,19 @@ color_notebook_page_switch (GtkWidget *widget,
g_return_if_fail (cnp != NULL && csel != NULL); g_return_if_fail (cnp != NULL && csel != NULL);
cnp->cur_page = csel; cnp->cur_page = csel;
csel->info->m.setcolor (csel->selector_data, csel->info->methods.setcolor (csel->selector_data,
cnp->values[RED], cnp->values[RED],
cnp->values[GREEN], cnp->values[GREEN],
cnp->values[BLUE], cnp->values[BLUE],
TRUE); cnp->values[ALPHA],
TRUE);
} }
static void static void
color_notebook_help_func (const gchar *data) color_notebook_help_func (const gchar *data)
{ {
ColorNotebook *cnp; ColorNotebook *cnp;
gchar *help_path; gchar *help_path;
cnp = (ColorNotebook *) data; cnp = (ColorNotebook *) data;
@ -393,13 +412,14 @@ gimp_color_selector_register (const gchar *name,
info = g_new (ColorSelectorInfo, 1); info = g_new (ColorSelectorInfo, 1);
info->name = g_strdup (name); info->name = g_strdup (name);
info->help_page = g_strdup (help_page); info->help_page = g_strdup (help_page);
info->m = *methods; info->methods = *methods;
info->refs = 0; info->refs = 0;
info->active = TRUE; info->active = TRUE;
info->next = selector_info;
info->next = selector_info;
selector_info = info; selector_info = info;
return info; return info;

View File

@ -30,6 +30,7 @@ typedef enum
typedef void (* ColorNotebookCallback) (gint red, typedef void (* ColorNotebookCallback) (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookState state, ColorNotebookState state,
gpointer data); gpointer data);
@ -42,8 +43,8 @@ struct _ColorNotebook
GtkWidget *shell; GtkWidget *shell;
GtkWidget *notebook; GtkWidget *notebook;
gint values[3]; gint values[4];
gint orig_values[3]; gint orig_values[4];
ColorNotebookCallback callback; ColorNotebookCallback callback;
gpointer client_data; gpointer client_data;
@ -57,9 +58,11 @@ struct _ColorNotebook
ColorNotebook * color_notebook_new (gint red, ColorNotebook * color_notebook_new (gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
ColorNotebookCallback callback, ColorNotebookCallback callback,
gpointer data, gpointer data,
gboolean wants_update); gboolean wants_update,
gboolean show_aplha);
void color_notebook_show (ColorNotebook *cnb); void color_notebook_show (ColorNotebook *cnb);
void color_notebook_hide (ColorNotebook *cnb); void color_notebook_hide (ColorNotebook *cnb);
@ -69,6 +72,7 @@ void color_notebook_set_color (ColorNotebook *cnb,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gboolean set_current); gboolean set_current);
#endif /* __COLOR_NOTEBOOK_H__ */ #endif /* __COLOR_NOTEBOOK_H__ */

View File

@ -40,6 +40,7 @@ struct _ColorPanelPrivate
GtkWidget *drawing_area; GtkWidget *drawing_area;
GdkGC *gc; GdkGC *gc;
gboolean show_alpha;
gboolean button_down; gboolean button_down;
ColorNotebook *color_notebook; ColorNotebook *color_notebook;
@ -55,6 +56,7 @@ static gint color_panel_events (GtkWidget *widget,
static void color_panel_select_callback (gint r, static void color_panel_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
gpointer data); gpointer data);
@ -62,11 +64,13 @@ static void color_panel_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data); gpointer data);
static void color_panel_drop_color (GtkWidget *widget, static void color_panel_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
/* dnd stuff */ /* dnd stuff */
@ -80,26 +84,31 @@ static guint n_color_panel_targets = (sizeof (color_panel_target_table) /
/* public functions */ /* public functions */
ColorPanel * ColorPanel *
color_panel_new (guchar *initial, color_panel_new (guchar r,
gint width, guchar g,
gint height) guchar b,
guchar a,
gboolean show_alpha,
gint width,
gint height)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
gint i;
private = g_new0 (ColorPanelPrivate, 1); private = g_new0 (ColorPanelPrivate, 1);
private->color_notebook = NULL; private->color_notebook = NULL;
private->color_notebook_active = FALSE; private->color_notebook_active = FALSE;
private->gc = NULL; private->gc = NULL;
private->show_alpha = show_alpha;
private->button_down = FALSE; private->button_down = FALSE;
color_panel = g_new (ColorPanel, 1); color_panel = g_new (ColorPanel, 1);
color_panel->private_part = private; color_panel->private_part = private;
/* set the initial color */ color_panel->color[0] = r;
for (i = 0; i < 3; i++) color_panel->color[1] = g;
color_panel->color[i] = (initial) ? initial[i] : 0; color_panel->color[2] = b;
color_panel->color[3] = a;
color_panel->color_panel_widget = gtk_frame_new (NULL); color_panel->color_panel_widget = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (color_panel->color_panel_widget), gtk_frame_set_shadow_type (GTK_FRAME (color_panel->color_panel_widget),
@ -111,7 +120,7 @@ color_panel_new (guchar *initial,
width, height); width, height);
gtk_widget_set_events (private->drawing_area, EVENT_MASK); gtk_widget_set_events (private->drawing_area, EVENT_MASK);
gtk_signal_connect (GTK_OBJECT (private->drawing_area), "event", gtk_signal_connect (GTK_OBJECT (private->drawing_area), "event",
(GtkSignalFunc) color_panel_events, GTK_SIGNAL_FUNC (color_panel_events),
color_panel); color_panel);
gtk_container_add (GTK_CONTAINER (color_panel->color_panel_widget), gtk_container_add (GTK_CONTAINER (color_panel->color_panel_widget),
private->drawing_area); private->drawing_area);
@ -144,17 +153,22 @@ color_panel_new (guchar *initial,
void void
color_panel_set_color (ColorPanel *color_panel, color_panel_set_color (ColorPanel *color_panel,
guchar *col) guchar r,
guchar g,
guchar b,
guchar a)
{ {
ColorPanelPrivate *private = color_panel->private_part; ColorPanelPrivate *private = color_panel->private_part;
color_panel->color[0] = col[0]; color_panel->color[0] = r;
color_panel->color[1] = col[1]; color_panel->color[1] = g;
color_panel->color[2] = col[2]; color_panel->color[2] = b;
color_panel->color[3] = a;
if (private->color_notebook_active) if (private->color_notebook_active)
color_notebook_set_color (private->color_notebook, color_notebook_set_color (private->color_notebook,
col[0], col[1], col[2], TRUE); r, g, b, a,
TRUE);
if (private->gc) if (private->gc)
color_panel_draw (color_panel); color_panel_draw (color_panel);
@ -186,9 +200,9 @@ color_panel_free (ColorPanel *color_panel)
static void static void
color_panel_draw (ColorPanel *color_panel) color_panel_draw (ColorPanel *color_panel)
{ {
GtkWidget *widget; GtkWidget *widget;
ColorPanelPrivate *private; ColorPanelPrivate *private;
GdkColor fg; GdkColor fg;
private = (ColorPanelPrivate *) color_panel->private_part; private = (ColorPanelPrivate *) color_panel->private_part;
widget = private->drawing_area; widget = private->drawing_area;
@ -207,8 +221,8 @@ color_panel_events (GtkWidget *widget,
GdkEvent *event, GdkEvent *event,
gpointer data) gpointer data)
{ {
GdkEventButton *bevent; GdkEventButton *bevent;
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
color_panel = (ColorPanel *) data; color_panel = (ColorPanel *) data;
@ -242,9 +256,11 @@ color_panel_events (GtkWidget *widget,
color_notebook_new (color_panel->color[0], color_notebook_new (color_panel->color[0],
color_panel->color[1], color_panel->color[1],
color_panel->color[2], color_panel->color[2],
color_panel->color[3],
color_panel_select_callback, color_panel_select_callback,
color_panel, color_panel,
FALSE); FALSE,
private->show_alpha);
private->color_notebook_active = TRUE; private->color_notebook_active = TRUE;
} }
else else
@ -257,7 +273,9 @@ color_panel_events (GtkWidget *widget,
color_notebook_set_color (private->color_notebook, color_notebook_set_color (private->color_notebook,
color_panel->color[0], color_panel->color[0],
color_panel->color[1], color_panel->color[1],
color_panel->color[2], 1); color_panel->color[2],
color_panel->color[3],
TRUE);
} }
private->button_down = FALSE; private->button_down = FALSE;
} }
@ -278,10 +296,11 @@ static void
color_panel_select_callback (gint r, color_panel_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
gpointer data) gpointer data)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
color_panel = (ColorPanel *) data; color_panel = (ColorPanel *) data;
@ -312,6 +331,7 @@ color_panel_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
@ -321,6 +341,7 @@ color_panel_drag_color (GtkWidget *widget,
*r = color_panel->color[0]; *r = color_panel->color[0];
*g = color_panel->color[1]; *g = color_panel->color[1];
*b = color_panel->color[2]; *b = color_panel->color[2];
*a = color_panel->color[3];
} }
static void static void
@ -328,9 +349,10 @@ color_panel_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
ColorPanel *color_panel; ColorPanel *color_panel;
ColorPanelPrivate *private; ColorPanelPrivate *private;
color_panel = (ColorPanel *) data; color_panel = (ColorPanel *) data;
@ -339,9 +361,10 @@ color_panel_drop_color (GtkWidget *widget,
color_panel->color[0] = r; color_panel->color[0] = r;
color_panel->color[1] = g; color_panel->color[1] = g;
color_panel->color[2] = b; color_panel->color[2] = b;
color_panel->color[3] = a;
if (private->color_notebook_active) if (private->color_notebook_active)
color_notebook_set_color (private->color_notebook, r, g, b, TRUE); color_notebook_set_color (private->color_notebook, r, g, b, a, TRUE);
color_panel_draw (color_panel); color_panel_draw (color_panel);
} }

View File

@ -19,6 +19,7 @@
#ifndef __COLOR_PANEL_H__ #ifndef __COLOR_PANEL_H__
#define __COLOR_PANEL_H__ #define __COLOR_PANEL_H__
typedef struct _ColorPanel ColorPanel; typedef struct _ColorPanel ColorPanel;
struct _ColorPanel struct _ColorPanel
@ -27,18 +28,26 @@ struct _ColorPanel
GtkWidget *color_panel_widget; GtkWidget *color_panel_widget;
/* The actual color */ /* The actual color */
guchar color [3]; guchar color [4];
/* Don't touch this :) */ /* Don't touch this :) */
void *private_part; gpointer private_part;
}; };
ColorPanel * color_panel_new (guchar *initial,
ColorPanel * color_panel_new (guchar r,
guchar g,
guchar b,
guchar a,
gboolean show_alpha,
gint width, gint width,
gint height); gint height);
void color_panel_set_color (ColorPanel *color_panel, void color_panel_set_color (ColorPanel *color_panel,
guchar *col); guchar r,
guchar g,
guchar b,
guchar a);
#endif /* __COLOR_PANEL_H__ */ #endif /* __COLOR_PANEL_H__ */

View File

@ -101,40 +101,49 @@ struct _DeviceInfoDialog
GtkWidget **eventboxes; GtkWidget **eventboxes;
}; };
/* local functions */
static void input_dialog_able_callback (GtkWidget *w, guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info, /* local functions */
FILE *fp); static void input_dialog_able_callback (GtkWidget *widget,
guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info,
FILE *fp);
static void devices_write_rc (void); static void devices_write_rc (void);
static void device_status_destroy_callback (void); static void device_status_destroy_callback (void);
static void devices_close_callback (GtkWidget *, gpointer); static void devices_close_callback (GtkWidget *widget,
gpointer data);
static void device_status_update (guint32 deviceid); static void device_status_update (guint32 deviceid);
static void device_status_update_current (void); static void device_status_update_current (void);
static ToolType device_status_drag_tool (GtkWidget *, static ToolType device_status_drag_tool (GtkWidget *widget,
gpointer); gpointer data);
static void device_status_drop_tool (GtkWidget *, static void device_status_drop_tool (GtkWidget *widget,
ToolType, ToolType tool,
gpointer); gpointer data);
static void device_status_drag_color (GtkWidget *, static void device_status_drag_color (GtkWidget *widget,
guchar *, guchar *, guchar *, guchar *r,
gpointer); guchar *g,
static void device_status_drop_color (GtkWidget *, guchar *b,
guchar, guchar, guchar, guchar *a,
gpointer); gpointer data);
static void device_status_drop_brush (GtkWidget *, static void device_status_drop_color (GtkWidget *widget,
GimpBrush *, guchar r,
gpointer); guchar g,
static void device_status_drop_pattern (GtkWidget *, guchar b,
GPattern *, guchar a,
gpointer); gpointer data);
static void device_status_drop_gradient (GtkWidget *, static void device_status_drop_brush (GtkWidget *widget,
gradient_t *, GimpBrush *brush,
gpointer); gpointer data);
static void device_status_drop_pattern (GtkWidget *widget,
GPattern *pattern,
gpointer data);
static void device_status_drop_gradient (GtkWidget *widget,
gradient_t *gradient,
gpointer data);
static void device_status_color_changed (GimpContext *context, static void device_status_color_changed (GimpContext *context,
gint r, gint r,
@ -148,6 +157,7 @@ static void device_status_data_changed (GimpContext *context,
static void device_status_context_connect (GimpContext *context, static void device_status_context_connect (GimpContext *context,
guint32 deviceid); guint32 deviceid);
/* global data */ /* global data */
gint current_device = GDK_CORE_POINTER; gint current_device = GDK_CORE_POINTER;
@ -173,6 +183,7 @@ static GtkTargetEntry color_area_target_table[] =
static guint n_color_area_targets = (sizeof (color_area_target_table) / static guint n_color_area_targets = (sizeof (color_area_target_table) /
sizeof (color_area_target_table[0])); sizeof (color_area_target_table[0]));
/* utility functions for the device lists */ /* utility functions for the device lists */
static GdkDeviceInfo * static GdkDeviceInfo *
@ -1129,6 +1140,7 @@ device_status_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;
@ -1137,6 +1149,7 @@ device_status_drag_color (GtkWidget *widget,
if (device_info) if (device_info)
{ {
*a = 255;
gimp_context_get_foreground (device_info->context, r, g, b); gimp_context_get_foreground (device_info->context, r, g, b);
} }
else else
@ -1150,6 +1163,7 @@ device_status_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;

View File

@ -101,40 +101,49 @@ struct _DeviceInfoDialog
GtkWidget **eventboxes; GtkWidget **eventboxes;
}; };
/* local functions */
static void input_dialog_able_callback (GtkWidget *w, guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info, /* local functions */
FILE *fp); static void input_dialog_able_callback (GtkWidget *widget,
guint32 deviceid,
gpointer data);
static void devices_write_rc_device (DeviceInfo *device_info,
FILE *fp);
static void devices_write_rc (void); static void devices_write_rc (void);
static void device_status_destroy_callback (void); static void device_status_destroy_callback (void);
static void devices_close_callback (GtkWidget *, gpointer); static void devices_close_callback (GtkWidget *widget,
gpointer data);
static void device_status_update (guint32 deviceid); static void device_status_update (guint32 deviceid);
static void device_status_update_current (void); static void device_status_update_current (void);
static ToolType device_status_drag_tool (GtkWidget *, static ToolType device_status_drag_tool (GtkWidget *widget,
gpointer); gpointer data);
static void device_status_drop_tool (GtkWidget *, static void device_status_drop_tool (GtkWidget *widget,
ToolType, ToolType tool,
gpointer); gpointer data);
static void device_status_drag_color (GtkWidget *, static void device_status_drag_color (GtkWidget *widget,
guchar *, guchar *, guchar *, guchar *r,
gpointer); guchar *g,
static void device_status_drop_color (GtkWidget *, guchar *b,
guchar, guchar, guchar, guchar *a,
gpointer); gpointer data);
static void device_status_drop_brush (GtkWidget *, static void device_status_drop_color (GtkWidget *widget,
GimpBrush *, guchar r,
gpointer); guchar g,
static void device_status_drop_pattern (GtkWidget *, guchar b,
GPattern *, guchar a,
gpointer); gpointer data);
static void device_status_drop_gradient (GtkWidget *, static void device_status_drop_brush (GtkWidget *widget,
gradient_t *, GimpBrush *brush,
gpointer); gpointer data);
static void device_status_drop_pattern (GtkWidget *widget,
GPattern *pattern,
gpointer data);
static void device_status_drop_gradient (GtkWidget *widget,
gradient_t *gradient,
gpointer data);
static void device_status_color_changed (GimpContext *context, static void device_status_color_changed (GimpContext *context,
gint r, gint r,
@ -148,6 +157,7 @@ static void device_status_data_changed (GimpContext *context,
static void device_status_context_connect (GimpContext *context, static void device_status_context_connect (GimpContext *context,
guint32 deviceid); guint32 deviceid);
/* global data */ /* global data */
gint current_device = GDK_CORE_POINTER; gint current_device = GDK_CORE_POINTER;
@ -173,6 +183,7 @@ static GtkTargetEntry color_area_target_table[] =
static guint n_color_area_targets = (sizeof (color_area_target_table) / static guint n_color_area_targets = (sizeof (color_area_target_table) /
sizeof (color_area_target_table[0])); sizeof (color_area_target_table[0]));
/* utility functions for the device lists */ /* utility functions for the device lists */
static GdkDeviceInfo * static GdkDeviceInfo *
@ -1129,6 +1140,7 @@ device_status_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;
@ -1137,6 +1149,7 @@ device_status_drag_color (GtkWidget *widget,
if (device_info) if (device_info)
{ {
*a = 255;
gimp_context_get_foreground (device_info->context, r, g, b); gimp_context_get_foreground (device_info->context, r, g, b);
} }
else else
@ -1150,6 +1163,7 @@ device_status_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
DeviceInfo *device_info; DeviceInfo *device_info;

View File

@ -492,11 +492,11 @@ gimp_dnd_get_color_icon (GtkWidget *widget,
gpointer get_color_data) gpointer get_color_data)
{ {
GtkWidget *preview; GtkWidget *preview;
guchar r, g, b; guchar r, g, b, a;
guchar row[DRAG_PREVIEW_SIZE * 3]; guchar row[DRAG_PREVIEW_SIZE * 3];
gint i; gint i;
(* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, (* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, &a,
get_color_data); get_color_data);
for (i = 0; i < DRAG_PREVIEW_SIZE; i++) for (i = 0; i < DRAG_PREVIEW_SIZE; i++)
@ -527,9 +527,9 @@ gimp_dnd_get_color_data (GtkWidget *widget,
gint *length) gint *length)
{ {
guint16 *vals; guint16 *vals;
guchar r, g, b; guchar r, g, b, a;
(* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, (* (GimpDndDragColorFunc) get_color_func) (widget, &r, &g, &b, &a,
get_color_data); get_color_data);
vals = g_new (guint16, 4); vals = g_new (guint16, 4);
@ -537,7 +537,7 @@ gimp_dnd_get_color_data (GtkWidget *widget,
vals[0] = r + (r << 8); vals[0] = r + (r << 8);
vals[1] = g + (g << 8); vals[1] = g + (g << 8);
vals[2] = b + (b << 8); vals[2] = b + (b << 8);
vals[3] = 0xffff; vals[3] = a + (a << 8);
*format = 16; *format = 16;
*length = 8; *length = 8;
@ -554,7 +554,7 @@ gimp_dnd_set_color_data (GtkWidget *widget,
gint length) gint length)
{ {
guint16 *color_vals; guint16 *color_vals;
guchar r, g, b; guchar r, g, b, a;
if ((format != 16) || (length != 8)) if ((format != 16) || (length != 8))
{ {
@ -567,8 +567,9 @@ gimp_dnd_set_color_data (GtkWidget *widget,
r = color_vals[0] >> 8; r = color_vals[0] >> 8;
g = color_vals[1] >> 8; g = color_vals[1] >> 8;
b = color_vals[2] >> 8; b = color_vals[2] >> 8;
a = color_vals[3] >> 8;
(* (GimpDndDropColorFunc) set_color_func) (widget, r, g, b, (* (GimpDndDropColorFunc) set_color_func) (widget, r, g, b, a,
set_color_data); set_color_data);
} }
@ -627,7 +628,7 @@ gimp_dnd_get_brush_data (GtkWidget *widget,
gint *length) gint *length)
{ {
GimpBrush *brush; GimpBrush *brush;
gchar *name; gchar *name;
brush = (* (GimpDndDragBrushFunc) get_brush_func) (widget, get_brush_data); brush = (* (GimpDndDragBrushFunc) get_brush_func) (widget, get_brush_data);
@ -654,7 +655,7 @@ gimp_dnd_set_brush_data (GtkWidget *widget,
gint length) gint length)
{ {
GimpBrush *brush; GimpBrush *brush;
gchar *name; gchar *name;
if ((format != 8) || (length < 1)) if ((format != 8) || (length < 1))
{ {
@ -729,7 +730,7 @@ gimp_dnd_get_pattern_data (GtkWidget *widget,
gint *length) gint *length)
{ {
GPattern *pattern; GPattern *pattern;
gchar *name; gchar *name;
pattern = (* (GimpDndDragPatternFunc) get_pattern_func) (widget, pattern = (* (GimpDndDragPatternFunc) get_pattern_func) (widget,
get_pattern_data); get_pattern_data);
@ -754,7 +755,7 @@ gimp_dnd_set_pattern_data (GtkWidget *widget,
gint length) gint length)
{ {
GPattern *pattern; GPattern *pattern;
gchar *name; gchar *name;
if ((format != 8) || (length < 1)) if ((format != 8) || (length < 1))
{ {
@ -830,7 +831,7 @@ gimp_dnd_get_gradient_data (GtkWidget *widget,
gint *length) gint *length)
{ {
gradient_t *gradient; gradient_t *gradient;
gchar *name; gchar *name;
gradient = gradient =
(* (GimpDndDragGradientFunc) get_gradient_func) (widget, get_gradient_data); (* (GimpDndDragGradientFunc) get_gradient_func) (widget, get_gradient_data);
@ -855,7 +856,7 @@ gimp_dnd_set_gradient_data (GtkWidget *widget,
gint length) gint length)
{ {
gradient_t *gradient; gradient_t *gradient;
gchar *name; gchar *name;
if ((format != 8) || (length < 1)) if ((format != 8) || (length < 1))
{ {

View File

@ -97,11 +97,13 @@ typedef void (* GimpDndDropColorFunc) (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
typedef void (* GimpDndDragColorFunc) (GtkWidget *widget, typedef void (* GimpDndDragColorFunc) (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data); gpointer data);
void gimp_dnd_color_source_set (GtkWidget *widget, void gimp_dnd_color_source_set (GtkWidget *widget,

View File

@ -1008,6 +1008,7 @@ static void
palette_select_callback (gint r, palette_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
void *data) void *data)
{ {
@ -1086,7 +1087,7 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;
guchar *color; guchar *color;
palette = data; palette = data;
if (palette && palette->entries && palette->color) if (palette && palette->entries && palette->color)
@ -1096,9 +1097,9 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
if (!palette->color_notebook) if (!palette->color_notebook)
{ {
palette->color_notebook = palette->color_notebook =
color_notebook_new (color[0], color[1], color[2], color_notebook_new (color[0], color[1], color[2], 255,
palette_select_callback, palette, palette_select_callback, palette,
FALSE); FALSE, FALSE);
palette->color_notebook_active = TRUE; palette->color_notebook_active = TRUE;
} }
else else
@ -1110,7 +1111,8 @@ palette_dialog_edit_entry_callback (GtkWidget *widget,
} }
color_notebook_set_color (palette->color_notebook, color_notebook_set_color (palette->color_notebook,
color[0], color[1], color[2], 1); color[0], color[1], color[2], 255,
TRUE);
} }
} }
} }
@ -1119,10 +1121,10 @@ static void
palette_dialog_delete_entry_callback (GtkWidget *widget, palette_dialog_delete_entry_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
PaletteEntry *entry; PaletteEntry *entry;
PaletteDialog *palette; PaletteDialog *palette;
GSList *tmp_link; GSList *tmp_link;
gint pos = 0; gint pos = 0;
palette = data; palette = data;
@ -1984,6 +1986,7 @@ palette_dialog_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;
@ -1995,6 +1998,7 @@ palette_dialog_drag_color (GtkWidget *widget,
*r = (guchar) palette->dnd_color->color[0]; *r = (guchar) palette->dnd_color->color[0];
*g = (guchar) palette->dnd_color->color[1]; *g = (guchar) palette->dnd_color->color[1];
*b = (guchar) palette->dnd_color->color[2]; *b = (guchar) palette->dnd_color->color[2];
*a = (guchar) 255;
} }
else else
{ {
@ -2007,6 +2011,7 @@ palette_dialog_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
PaletteDialog *palette; PaletteDialog *palette;

View File

@ -51,16 +51,19 @@ static void color_area_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data); gpointer data);
static void color_area_drag_color (GtkWidget *widget, static void color_area_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data); gpointer data);
static void color_area_color_changed (GimpContext *context, static void color_area_color_changed (GimpContext *context,
gint r, gint r,
gint g, gint g,
gint b, gint b,
gint a,
gpointer data); gpointer data);
/* Global variables */ /* Global variables */
@ -277,6 +280,7 @@ static void
color_area_select_callback (gint r, color_area_select_callback (gint r,
gint g, gint g,
gint b, gint b,
gint a,
ColorNotebookState state, ColorNotebookState state,
void *client_data) void *client_data)
{ {
@ -330,8 +334,9 @@ color_area_edit (void)
if (! color_notebook) if (! color_notebook)
{ {
color_notebook = color_notebook_new (r, g, b, color_area_select_callback, color_notebook = color_notebook_new (r, g, b, 255,
NULL, TRUE); color_area_select_callback,
NULL, TRUE, FALSE);
color_notebook_active = TRUE; color_notebook_active = TRUE;
} }
else else
@ -344,7 +349,7 @@ color_area_edit (void)
else else
gdk_window_raise (color_notebook->shell->window); gdk_window_raise (color_notebook->shell->window);
color_notebook_set_color (color_notebook, r, g, b, TRUE); color_notebook_set_color (color_notebook, r, g, b, 255, TRUE);
} }
} }
@ -534,8 +539,11 @@ color_area_drag_color (GtkWidget *widget,
guchar *r, guchar *r,
guchar *g, guchar *g,
guchar *b, guchar *b,
guchar *a,
gpointer data) gpointer data)
{ {
*a = 255;
if (active_color == FOREGROUND) if (active_color == FOREGROUND)
gimp_context_get_foreground (gimp_context_get_user (), r, g, b); gimp_context_get_foreground (gimp_context_get_user (), r, g, b);
else else
@ -547,12 +555,13 @@ color_area_drop_color (GtkWidget *widget,
guchar r, guchar r,
guchar g, guchar g,
guchar b, guchar b,
guchar a,
gpointer data) gpointer data)
{ {
if (color_notebook_active && if (color_notebook_active &&
active_color == edit_color) active_color == edit_color)
{ {
color_notebook_set_color (color_notebook, r, g, b, TRUE); color_notebook_set_color (color_notebook, r, g, b, 255, TRUE);
} }
else else
{ {
@ -568,6 +577,7 @@ color_area_color_changed (GimpContext *context,
gint r, gint r,
gint g, gint g,
gint b, gint b,
gint a,
gpointer data) gpointer data)
{ {
color_area_draw (); color_area_draw ();

View File

@ -28,34 +28,38 @@ extern "C" {
/* For information look at the html documentation */ /* For information look at the html documentation */
typedef void (* GimpColorSelector_Callback) (gpointer data, typedef void (* GimpColorSelectorCallback) (gpointer data,
gint r, gint r,
gint g, gint g,
gint b); gint b,
gint a);
typedef GtkWidget * (* GimpColorSelector_NewFunc) (gint r, typedef GtkWidget * (* GimpColorSelectorNewFunc) (gint r,
gint g, gint g,
gint b, gint b,
GimpColorSelector_Callback cb, gint a,
gpointer data, gboolean show_alpha,
gpointer *selector_data); GimpColorSelectorCallback cb,
gpointer data,
gpointer *selector_data);
typedef void (* GimpColorSelector_FreeFunc) (gpointer selector_data); typedef void (* GimpColorSelectorFreeFunc) (gpointer selector_data);
typedef void (* GimpColorSelector_SetColorFunc) (gpointer selector_data, typedef void (* GimpColorSelectorSetColorFunc) (gpointer selector_data,
gint r, gint r,
gint g, gint g,
gint b, gint b,
gboolean set_current); gint a,
gboolean set_current);
typedef struct _GimpColorSelectorMethods GimpColorSelectorMethods; typedef struct _GimpColorSelectorMethods GimpColorSelectorMethods;
struct _GimpColorSelectorMethods struct _GimpColorSelectorMethods
{ {
GimpColorSelector_NewFunc new; GimpColorSelectorNewFunc new;
GimpColorSelector_FreeFunc free; GimpColorSelectorFreeFunc free;
GimpColorSelector_SetColorFunc setcolor; GimpColorSelectorSetColorFunc setcolor;
}; };
typedef gpointer GimpColorSelectorID; typedef gpointer GimpColorSelectorID;
@ -65,15 +69,17 @@ typedef gpointer GimpColorSelectorID;
/* Bypass when compiling the source for these functions. /* Bypass when compiling the source for these functions.
*/ */
GimpColorSelectorID gimp_color_selector_register (const gchar *name, GimpColorSelectorID
const gchar *help_page, gimp_color_selector_register (const gchar *name,
GimpColorSelectorMethods *methods); const gchar *help_page,
GimpColorSelectorMethods *methods);
typedef void (* GimpColorSelectorFinishedCB) (gpointer finished_data); typedef void (* GimpColorSelectorFinishedCB) (gpointer finished_data);
gboolean gimp_color_selector_unregister (GimpColorSelectorID id, gboolean
GimpColorSelectorFinishedCB finished_cb, gimp_color_selector_unregister (GimpColorSelectorID id,
gpointer finished_data); GimpColorSelectorFinishedCB finished_cb,
gpointer finished_data);
#endif /* !__COLOR_NOTEBOOK_C__ */ #endif /* !__COLOR_NOTEBOOK_C__ */

File diff suppressed because it is too large Load Diff

View File

@ -17,6 +17,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include "config.h" #include "config.h"
#include <stdio.h> #include <stdio.h>
@ -32,12 +33,23 @@
/* prototypes */ /* prototypes */
static GtkWidget * colorsel_gtk_new (int, int, int, static GtkWidget * colorsel_gtk_new (gint r,
GimpColorSelector_Callback, void *, gint g,
void **); gint b,
static void colorsel_gtk_free (void *); gint a,
static void colorsel_gtk_setcolor (void *, int, int, int, int); gboolean show_alpha,
static void colorsel_gtk_update (GtkWidget *, gpointer); GimpColorSelectorCallback callback,
gpointer data,
gpointer *selector_data);
static void colorsel_gtk_free (gpointer data);
static void colorsel_gtk_setcolor (gpointer data,
gint r,
gint g,
gint b,
gint a,
gboolean set_current);
static void colorsel_gtk_update (GtkWidget *widget,
gpointer data);
/* local methods */ /* local methods */
@ -48,13 +60,14 @@ static GimpColorSelectorMethods methods =
colorsel_gtk_setcolor colorsel_gtk_setcolor
}; };
static GimpModuleInfo info = { static GimpModuleInfo info =
NULL, {
N_("GTK color selector as a pluggable color selector"), NULL,
"Austin Donnelly <austin@gimp.org>", N_("GTK color selector as a pluggable color selector"),
"v0.02", "Austin Donnelly <austin@gimp.org>",
"(c) 1999, released under the GPL", "v0.02",
"17 Jan 1999" "(c) 1999, released under the GPL",
"17 Jan 1999"
}; };
@ -69,23 +82,24 @@ module_init (GimpModuleInfo **inforet)
#else #else
id = mod_color_selector_register ("GTK", "gtk.html", &methods); id = mod_color_selector_register ("GTK", "gtk.html", &methods);
#endif #endif
if (id) if (id)
{ {
info.shutdown_data = id; info.shutdown_data = id;
*inforet = &info; *inforet = &info;
return GIMP_MODULE_OK; return GIMP_MODULE_OK;
} }
else else
{ {
return GIMP_MODULE_UNLOAD; return GIMP_MODULE_UNLOAD;
} }
} }
G_MODULE_EXPORT void G_MODULE_EXPORT void
module_unload (void *shutdown_data, module_unload (gpointer shutdown_data,
void (*completed_cb)(void *), GimpColorSelectorFinishedCB completed_cb,
void *completed_data) gpointer completed_data)
{ {
#ifndef __EMX__ #ifndef __EMX__
gimp_color_selector_unregister (shutdown_data, completed_cb, completed_data); gimp_color_selector_unregister (shutdown_data, completed_cb, completed_data);
@ -95,37 +109,43 @@ module_unload (void *shutdown_data,
} }
/******************************/
/* GTK color selector methods */
/**************************************************************/ typedef struct
/* GTK colour selector methods */ {
GtkWidget *selector;
typedef struct { GimpColorSelectorCallback callback;
GtkWidget *selector; void *client_data;
GimpColorSelector_Callback callback;
void *client_data;
} ColorselGtk; } ColorselGtk;
static GtkWidget * static GtkWidget *
colorsel_gtk_new (int r, int g, int b, colorsel_gtk_new (gint r,
GimpColorSelector_Callback callback, void *client_data, gint g,
gint b,
gint a,
gboolean show_alpha,
GimpColorSelectorCallback callback,
gpointer data,
/* RETURNS: */ /* RETURNS: */
void **selector_data) gpointer *selector_data)
{ {
GtkWidget *hbox; GtkWidget *hbox;
GtkWidget *vbox; GtkWidget *vbox;
ColorselGtk *p; ColorselGtk *p;
p = g_malloc (sizeof (ColorselGtk)); p = g_new (ColorselGtk, 1);
p->selector = gtk_color_selection_new (); p->selector = gtk_color_selection_new ();
p->callback = callback; p->callback = callback;
p->client_data = client_data; p->client_data = data;
colorsel_gtk_setcolor (p, r, g, b, FALSE); colorsel_gtk_setcolor (p, r, g, b, a, FALSE);
gtk_signal_connect (GTK_OBJECT (p->selector), "color_changed", gtk_signal_connect (GTK_OBJECT (p->selector), "color_changed",
(GtkSignalFunc) colorsel_gtk_update, p); GTK_SIGNAL_FUNC (colorsel_gtk_update),
p);
vbox = gtk_vbox_new (TRUE, 0); vbox = gtk_vbox_new (TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), p->selector, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), p->selector, FALSE, FALSE, 0);
@ -135,55 +155,60 @@ colorsel_gtk_new (int r, int g, int b,
hbox = gtk_hbox_new (TRUE, 0); hbox = gtk_hbox_new (TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
(*selector_data) = p; *selector_data = p;
return hbox; return hbox;
} }
static void static void
colorsel_gtk_free (void *data) colorsel_gtk_free (gpointer data)
{ {
ColorselGtk *p = data; ColorselGtk *p = data;
/* don't need to gtk_widget_destroy() the selector, since that's /* don't need to gtk_widget_destroy() the selector, since that's
* done for us. */ * done for us.
*/
g_free (p); g_free (p);
} }
static void static void
colorsel_gtk_setcolor (void *data, colorsel_gtk_setcolor (gpointer data,
int r, int g, int b, int set_current) gint r,
gint g,
gint b,
gint a,
gboolean set_current)
{ {
ColorselGtk *p = data; ColorselGtk *p = data;
double color[3];
gdouble color[4];
color[0] = ((gdouble) r) / 255.999; color[0] = ((gdouble) r) / 255.999;
color[1] = ((gdouble) g) / 255.999; color[1] = ((gdouble) g) / 255.999;
color[2] = ((gdouble) b) / 255.999; color[2] = ((gdouble) b) / 255.999;
color[3] = ((gdouble) a) / 255.999;
gtk_color_selection_set_color (GTK_COLOR_SELECTION (p->selector), color); gtk_color_selection_set_color (GTK_COLOR_SELECTION (p->selector), color);
} }
static void static void
colorsel_gtk_update (GtkWidget *widget, gpointer data) colorsel_gtk_update (GtkWidget *widget,
gpointer data)
{ {
ColorselGtk *p = data; ColorselGtk *p = data;
int r; gint r;
int g; gint g;
int b; gint b;
double color[3]; gint a;
gdouble color[4];
gtk_color_selection_get_color (GTK_COLOR_SELECTION (p->selector), color); gtk_color_selection_get_color (GTK_COLOR_SELECTION (p->selector), color);
r = (int) (color[0] * 255.999); r = (gint) (color[0] * 255.999);
g = (int) (color[1] * 255.999); g = (gint) (color[1] * 255.999);
b = (int) (color[2] * 255.999); b = (gint) (color[2] * 255.999);
a = (gint) (color[3] * 255.999);
p->callback (p->client_data, r, g, b); p->callback (p->client_data, r, g, b, a);
} }
/* End of colorsel_gtk.c */

View File

@ -40,7 +40,9 @@
static GtkWidget * colorsel_triangle_new (gint red, static GtkWidget * colorsel_triangle_new (gint red,
gint green, gint green,
gint blue, gint blue,
GimpColorSelector_Callback callback, gint alpha,
gboolean show_alpha,
GimpColorSelectorCallback callback,
gpointer callback_data, gpointer callback_data,
gpointer *selector_data); gpointer *selector_data);
@ -50,6 +52,7 @@ static void colorsel_triangle_setcolor (gpointer selector_data,
gint red, gint red,
gint green, gint green,
gint blue, gint blue,
gint alpha,
gint set_current); gint set_current);
static void colorsel_triangle_drag_begin (GtkWidget *widget, static void colorsel_triangle_drag_begin (GtkWidget *widget,
@ -86,16 +89,18 @@ static GimpColorSelectorMethods methods =
}; };
static GimpModuleInfo info = { static GimpModuleInfo info =
NULL, {
N_("Painter-style color selector as a pluggable color selector"), NULL,
"Simon Budig <Simon.Budig@unix-ag.org>", N_("Painter-style color selector as a pluggable color selector"),
"v0.02", "Simon Budig <Simon.Budig@unix-ag.org>",
"(c) 1999, released under the GPL", "v0.02",
"17 Jan 1999" "(c) 1999, released under the GPL",
"17 Jan 1999"
}; };
static const GtkTargetEntry targets[] = { static const GtkTargetEntry targets[] =
{
{ "application/x-color", 0 } { "application/x-color", 0 }
}; };
@ -111,30 +116,27 @@ static const GtkTargetEntry targets[] = {
GDK_BUTTON_RELEASE_MASK | \ GDK_BUTTON_RELEASE_MASK | \
GDK_BUTTON_MOTION_MASK GDK_BUTTON_MOTION_MASK
typedef enum { typedef enum
{
HUE = 0, HUE = 0,
SATURATION, SATURATION,
VALUE, VALUE,
RED, RED,
GREEN, GREEN,
BLUE, BLUE,
HUE_SATURATION, ALPHA
HUE_VALUE,
SATURATION_VALUE,
RED_GREEN,
RED_BLUE,
GREEN_BLUE
} ColorSelectFillType; } ColorSelectFillType;
struct _ColorSelect { struct _ColorSelect
gint values[6]; {
gdouble oldsat; gint values[7];
gdouble oldval; gdouble oldsat;
gint mode; gdouble oldval;
GtkWidget *preview; gint mode;
GtkWidget *color_preview; GtkWidget *preview;
GimpColorSelector_Callback callback; GtkWidget *color_preview;
gpointer data; GimpColorSelectorCallback callback;
gpointer data;
}; };
typedef struct _ColorSelect ColorSelect; typedef struct _ColorSelect ColorSelect;
@ -157,31 +159,31 @@ static void color_select_update_hsv_values (ColorSelect *coldata);
/* globaly exported init function */ /* globaly exported init function */
G_MODULE_EXPORT GimpModuleStatus G_MODULE_EXPORT GimpModuleStatus
module_init (GimpModuleInfo **inforet) module_init (GimpModuleInfo **inforet)
{ {
GimpColorSelectorID id; GimpColorSelectorID id;
#ifndef __EMX__ #ifndef __EMX__
id = gimp_color_selector_register (_("Triangle"), "triangle.html", &methods); id = gimp_color_selector_register (_("Triangle"), "triangle.html", &methods);
#else #else
id = mod_color_selector_register (_("Triangle"), "triangle.html", &methods); id = mod_color_selector_register (_("Triangle"), "triangle.html", &methods);
#endif #endif
if (id)
{
info.shutdown_data = id;
*inforet = &info;
return GIMP_MODULE_OK;
}
else
{
return GIMP_MODULE_UNLOAD;
}
}
if (id)
{
info.shutdown_data = id;
*inforet = &info;
return GIMP_MODULE_OK;
}
else
{
return GIMP_MODULE_UNLOAD;
}
}
G_MODULE_EXPORT void G_MODULE_EXPORT void
module_unload (gpointer shutdown_data, module_unload (gpointer shutdown_data,
void (*completed_cb) (gpointer), GimpColorSelectorFinishedCB completed_cb,
gpointer completed_data) gpointer completed_data)
{ {
#ifndef __EMX__ #ifndef __EMX__
gimp_color_selector_unregister (shutdown_data, completed_cb, completed_data); gimp_color_selector_unregister (shutdown_data, completed_cb, completed_data);
@ -190,17 +192,19 @@ module_unload (gpointer shutdown_data,
#endif #endif
} }
/*************************************************************/ /*************************************************************/
/* methods */ /* methods */
static GtkWidget * static GtkWidget *
colorsel_triangle_new (gint red, gint green, gint blue, colorsel_triangle_new (gint red,
GimpColorSelector_Callback callback, gint green,
gpointer callback_data, gint blue,
gint alpha,
gboolean show_alpha,
GimpColorSelectorCallback callback,
gpointer callback_data,
/* RETURNS: */ /* RETURNS: */
gpointer *selector_data) gpointer *selector_data)
{ {
ColorSelect *coldata; ColorSelect *coldata;
GtkWidget *preview; GtkWidget *preview;
@ -209,10 +213,12 @@ colorsel_triangle_new (gint red, gint green, gint blue,
GtkWidget *hbox; GtkWidget *hbox;
GtkWidget *vbox; GtkWidget *vbox;
coldata = g_malloc (sizeof (ColorSelect)); coldata = g_new (ColorSelect, 1);
coldata->values[RED] = red; coldata->values[RED] = red;
coldata->values[GREEN] = green; coldata->values[GREEN] = green;
coldata->values[BLUE] = blue; coldata->values[BLUE] = blue;
coldata->values[ALPHA] = alpha;
color_select_update_hsv_values (coldata); color_select_update_hsv_values (coldata);
coldata->oldsat = 0; coldata->oldsat = 0;
@ -221,7 +227,7 @@ colorsel_triangle_new (gint red, gint green, gint blue,
coldata->mode = 0; coldata->mode = 0;
coldata->callback = callback; coldata->callback = callback;
coldata->data = callback_data; coldata->data = callback_data;
preview = create_preview (coldata); preview = create_preview (coldata);
coldata->preview = preview; coldata->preview = preview;
@ -249,7 +255,6 @@ colorsel_triangle_new (gint red, gint green, gint blue,
return hbox; return hbox;
} }
static void static void
colorsel_triangle_free (gpointer selector_data) colorsel_triangle_free (gpointer selector_data)
{ {
@ -257,33 +262,37 @@ colorsel_triangle_free (gpointer selector_data)
g_free (selector_data); g_free (selector_data);
} }
static void static void
colorsel_triangle_setcolor (gpointer selector_data, colorsel_triangle_setcolor (gpointer selector_data,
gint red, gint green, gint blue, gint red,
gint set_current) gint green,
gint blue,
gint alpha,
gint set_current)
{ {
ColorSelect *coldata; ColorSelect *coldata;
coldata = selector_data; coldata = selector_data;
coldata->values[RED] = red; coldata->values[RED] = red;
coldata->values[GREEN] = green; coldata->values[GREEN] = green;
coldata->values[BLUE] = blue; coldata->values[BLUE] = blue;
coldata->values[ALPHA] = alpha;
color_select_update_hsv_values (coldata); color_select_update_hsv_values (coldata);
update_previews (coldata, TRUE); update_previews (coldata, TRUE);
} }
/*************************************************************/ /*************************************************************/
/* helper functions */ /* helper functions */
static void static void
color_select_update_rgb_values (ColorSelect *csp) color_select_update_rgb_values (ColorSelect *csp)
{ {
csp->values[RED] = RINT (((gdouble) csp->values[HUE]) / 360.0 * 255); csp->values[RED] = RINT (((gdouble) csp->values[HUE]) / 360.0 * 255);
csp->values[GREEN] = RINT (((gdouble) csp->values[SATURATION]) / 100.0 * 255); csp->values[GREEN] = RINT (((gdouble) csp->values[SATURATION]) / 100.0 * 255);
csp->values[BLUE] = RINT (((gdouble) csp->values[VALUE]) / 100.0 * 255); csp->values[BLUE] = RINT (((gdouble) csp->values[VALUE]) / 100.0 * 255);
gimp_hsv_to_rgb_int (&(csp->values[RED]), gimp_hsv_to_rgb_int (&(csp->values[RED]),
&(csp->values[GREEN]), &(csp->values[GREEN]),
@ -295,15 +304,15 @@ color_select_update_hsv_values (ColorSelect *csp)
{ {
gdouble hue, sat, val; gdouble hue, sat, val;
hue = (double) csp->values[RED] / 255; hue = (gdouble) csp->values[RED] / 255;
sat = (double) csp->values[GREEN] / 255; sat = (gdouble) csp->values[GREEN] / 255;
val = (double) csp->values[BLUE] / 255; val = (gdouble) csp->values[BLUE] / 255;
gimp_rgb_to_hsv_double (&hue, &sat, &val); gimp_rgb_to_hsv_double (&hue, &sat, &val);
csp->values[HUE] = RINT (hue * 360); csp->values[HUE] = RINT (hue * 360);
csp->values[SATURATION] = RINT (sat * 100); csp->values[SATURATION] = RINT (sat * 100);
csp->values[VALUE] = RINT (val * 100); csp->values[VALUE] = RINT (val * 100);
} }
@ -312,11 +321,11 @@ update_previews (ColorSelect *coldata,
gint hue_changed) gint hue_changed)
{ {
GtkWidget *preview; GtkWidget *preview;
guchar buf[3*PREVIEWSIZE]; guchar buf[3*PREVIEWSIZE];
gint x, y, k, r2, dx, col; gint x, y, k, r2, dx, col;
gint x0, y0; gint x0, y0;
gdouble hue, sat, val, s, v, atn; gdouble hue, sat, val, s, v, atn;
gint hx,hy, sx,sy, vx,vy; gint hx,hy, sx,sy, vx,vy;
hue = (gdouble) coldata->values[HUE] * G_PI / 180; hue = (gdouble) coldata->values[HUE] * G_PI / 180;
@ -499,10 +508,10 @@ color_selection_callback (GtkWidget *widget,
GdkEvent *event) GdkEvent *event)
{ {
ColorSelect *coldata; ColorSelect *coldata;
gint x,y, angle, mousex, mousey; gint x,y, angle, mousex, mousey;
gdouble r; gdouble r;
gdouble hue, sat, val; gdouble hue, sat, val;
gint hx,hy, sx,sy, vx,vy; gint hx,hy, sx,sy, vx,vy;
coldata = gtk_object_get_user_data (GTK_OBJECT (widget)); coldata = gtk_object_get_user_data (GTK_OBJECT (widget));
@ -534,7 +543,8 @@ color_selection_callback (GtkWidget *widget,
(*coldata->callback) (coldata->data, (*coldata->callback) (coldata->data,
coldata->values[RED], coldata->values[RED],
coldata->values[GREEN], coldata->values[GREEN],
coldata->values[BLUE]); coldata->values[BLUE],
coldata->values[ALPHA]);
return FALSE; return FALSE;
break; break;
@ -621,7 +631,8 @@ color_selection_callback (GtkWidget *widget,
(*coldata->callback) (coldata->data, (*coldata->callback) (coldata->data,
coldata->values[RED], coldata->values[RED],
coldata->values[GREEN], coldata->values[GREEN],
coldata->values[BLUE]); coldata->values[BLUE],
coldata->values[ALPHA]);
return FALSE; return FALSE;
} }
@ -630,8 +641,8 @@ static GtkWidget *
create_preview (ColorSelect *coldata) create_preview (ColorSelect *coldata)
{ {
GtkWidget *preview; GtkWidget *preview;
guchar buf[3 * PREVIEWSIZE]; guchar buf[3 * PREVIEWSIZE];
gint i; gint i;
preview = gtk_preview_new (GTK_PREVIEW_COLOR); preview = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_preview_set_dither (GTK_PREVIEW (preview), GDK_RGB_DITHER_MAX); gtk_preview_set_dither (GTK_PREVIEW (preview), GDK_RGB_DITHER_MAX);
@ -641,16 +652,20 @@ create_preview (ColorSelect *coldata)
gtk_object_set_user_data (GTK_OBJECT (preview), coldata); gtk_object_set_user_data (GTK_OBJECT (preview), coldata);
gtk_signal_connect (GTK_OBJECT (preview), "motion_notify_event", gtk_signal_connect (GTK_OBJECT (preview), "motion_notify_event",
GTK_SIGNAL_FUNC (color_selection_callback), NULL); GTK_SIGNAL_FUNC (color_selection_callback),
NULL);
gtk_signal_connect (GTK_OBJECT (preview), "button_press_event", gtk_signal_connect (GTK_OBJECT (preview), "button_press_event",
GTK_SIGNAL_FUNC (color_selection_callback), NULL); GTK_SIGNAL_FUNC (color_selection_callback),
NULL);
gtk_signal_connect (GTK_OBJECT (preview), "button_release_event", gtk_signal_connect (GTK_OBJECT (preview), "button_release_event",
GTK_SIGNAL_FUNC (color_selection_callback), NULL); GTK_SIGNAL_FUNC (color_selection_callback),
NULL);
for (i=0; i < 3 * PREVIEWSIZE; i += 3) for (i=0; i < 3 * PREVIEWSIZE; i += 3)
buf[i] = buf[i+1] = buf[i+2] = BGCOLOR; buf[i] = buf[i+1] = buf[i+2] = BGCOLOR;
for (i=0; i < PREVIEWSIZE; i++) for (i=0; i < PREVIEWSIZE; i++)
gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, PREVIEWSIZE); gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, i, PREVIEWSIZE);
gtk_widget_draw (preview, NULL); gtk_widget_draw (preview, NULL);
return preview; return preview;
@ -675,22 +690,19 @@ create_color_preview (ColorSelect *coldata)
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK, GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
targets, 1, targets, 1,
GDK_ACTION_COPY | GDK_ACTION_MOVE); GDK_ACTION_COPY | GDK_ACTION_MOVE);
gtk_signal_connect (GTK_OBJECT (preview), gtk_signal_connect (GTK_OBJECT (preview), "drag_begin",
"drag_begin",
GTK_SIGNAL_FUNC (colorsel_triangle_drag_begin), GTK_SIGNAL_FUNC (colorsel_triangle_drag_begin),
coldata); coldata);
gtk_signal_connect (GTK_OBJECT (preview), gtk_signal_connect (GTK_OBJECT (preview), "drag_end",
"drag_end",
GTK_SIGNAL_FUNC (colorsel_triangle_drag_end), GTK_SIGNAL_FUNC (colorsel_triangle_drag_end),
coldata); coldata);
gtk_signal_connect (GTK_OBJECT (preview), gtk_signal_connect (GTK_OBJECT (preview), "drag_data_get",
"drag_data_get",
GTK_SIGNAL_FUNC (colorsel_triangle_drag_handle), GTK_SIGNAL_FUNC (colorsel_triangle_drag_handle),
coldata); coldata);
gtk_signal_connect (GTK_OBJECT (preview), gtk_signal_connect (GTK_OBJECT (preview), "drag_data_received",
"drag_data_received",
GTK_SIGNAL_FUNC (colorsel_triangle_drop_handle), GTK_SIGNAL_FUNC (colorsel_triangle_drop_handle),
coldata); coldata);
return preview; return preview;
} }
@ -700,8 +712,8 @@ colorsel_triangle_drag_begin (GtkWidget *widget,
GdkDragContext *context, GdkDragContext *context,
gpointer data) gpointer data)
{ {
GtkWidget *window; GtkWidget *window;
GdkColor bg; GdkColor bg;
ColorSelect *coldata; ColorSelect *coldata;
coldata = (ColorSelect *) data; coldata = (ColorSelect *) data;
@ -715,9 +727,9 @@ colorsel_triangle_drag_begin (GtkWidget *widget,
window, window,
(GtkDestroyNotify) gtk_widget_destroy); (GtkDestroyNotify) gtk_widget_destroy);
bg.red = 256 * coldata->values[RED]; bg.red = 256 * coldata->values[RED];
bg.green = 256 * coldata->values[GREEN]; bg.green = 256 * coldata->values[GREEN];
bg.blue = 256 * coldata->values[BLUE]; bg.blue = 256 * coldata->values[BLUE];
gdk_color_alloc (gtk_widget_get_colormap (window), &bg); gdk_color_alloc (gtk_widget_get_colormap (window), &bg);
gdk_window_set_background (window->window, &bg); gdk_window_set_background (window->window, &bg);
@ -745,7 +757,7 @@ colorsel_triangle_drop_handle (GtkWidget *widget,
guint time, guint time,
gpointer data) gpointer data)
{ {
guint16 *vals; guint16 *vals;
ColorSelect *coldata; ColorSelect *coldata;
coldata = (ColorSelect *) data; coldata = (ColorSelect *) data;
@ -765,6 +777,7 @@ colorsel_triangle_drop_handle (GtkWidget *widget,
coldata->values[RED] = vals[0] / 256; coldata->values[RED] = vals[0] / 256;
coldata->values[GREEN] = vals[1] / 256; coldata->values[GREEN] = vals[1] / 256;
coldata->values[BLUE] = vals[2] / 256; coldata->values[BLUE] = vals[2] / 256;
coldata->values[ALPHA] = vals[3] / 256;
color_select_update_hsv_values (coldata); color_select_update_hsv_values (coldata);
update_previews (coldata, TRUE); update_previews (coldata, TRUE);
@ -778,7 +791,7 @@ colorsel_triangle_drag_handle (GtkWidget *widget,
guint time, guint time,
gpointer data) gpointer data)
{ {
guint16 vals[4]; guint16 vals[4];
ColorSelect *coldata; ColorSelect *coldata;
coldata = (ColorSelect *) data; coldata = (ColorSelect *) data;
@ -786,7 +799,7 @@ colorsel_triangle_drag_handle (GtkWidget *widget,
vals[0] = coldata->values[RED] * 256; vals[0] = coldata->values[RED] * 256;
vals[1] = coldata->values[GREEN] * 256; vals[1] = coldata->values[GREEN] * 256;
vals[2] = coldata->values[BLUE] * 256; vals[2] = coldata->values[BLUE] * 256;
vals[3] = 0xffff; vals[3] = coldata->values[ALPHA] * 256;
gtk_selection_data_set (selection_data, gtk_selection_data_set (selection_data,
gdk_atom_intern ("application/x-color", FALSE), gdk_atom_intern ("application/x-color", FALSE),

View File

@ -34,13 +34,22 @@
#include <libgimp/gimpintl.h> #include <libgimp/gimpintl.h>
/* prototypes */ /* prototypes */
static GtkWidget * colorsel_water_new (int, int, int, static GtkWidget * colorsel_water_new (gint r,
GimpColorSelector_Callback, gint g,
void *, gint b,
void **); gint a,
static void colorsel_water_free (void *); gboolean show_alpha,
static void colorsel_water_setcolor (void *, int, int, int, int); GimpColorSelectorCallback,
static void colorsel_water_update (); gpointer,
gpointer *);
static void colorsel_water_free (gpointer data);
static void colorsel_water_setcolor (gpointer data,
gint r,
gint g,
gint b,
gint a,
gboolean set_current);
static void colorsel_water_update (void);
static void colorsel_water_drag_begin (GtkWidget *widget, static void colorsel_water_drag_begin (GtkWidget *widget,
GdkDragContext *context, GdkDragContext *context,
gpointer data); gpointer data);
@ -71,17 +80,19 @@ static GimpColorSelectorMethods methods =
}; };
static GimpModuleInfo info = { static GimpModuleInfo info =
NULL, {
N_("Watercolor style color selector as a pluggable module"), NULL,
"Raph Levien <raph@acm.org>, Sven Neumann <sven@gimp.org>", N_("Watercolor style color selector as a pluggable module"),
"v0.3", "Raph Levien <raph@acm.org>, Sven Neumann <sven@gimp.org>",
"(c) 1998-1999, released under the GPL", "v0.3",
"May, 10 1999" "(c) 1998-1999, released under the GPL",
"May, 10 1999"
}; };
static const GtkTargetEntry targets[] = { static const GtkTargetEntry targets[] =
{
{ "application/x-color", 0 } { "application/x-color", 0 }
}; };
@ -97,26 +108,27 @@ module_init (GimpModuleInfo **inforet)
id = gimp_color_selector_register (_("Watercolor"), "watercolor.html", id = gimp_color_selector_register (_("Watercolor"), "watercolor.html",
&methods); &methods);
#else #else
id = mod_color_selector_register (_("Watercolor"), "watercolor.html", id = mod_color_selector_register (_("Watercolor"), "watercolor.html",
&methods); &methods);
#endif #endif
if (id) if (id)
{ {
info.shutdown_data = id; info.shutdown_data = id;
*inforet = &info; *inforet = &info;
return GIMP_MODULE_OK; return GIMP_MODULE_OK;
} }
else else
{ {
return GIMP_MODULE_UNLOAD; return GIMP_MODULE_UNLOAD;
} }
} }
G_MODULE_EXPORT void G_MODULE_EXPORT void
module_unload (void *shutdown_data, module_unload (gpointer shutdown_data,
void (*completed_cb)(void *), GimpColorSelectorFinishedCB completed_cb,
void *completed_data) gpointer completed_data)
{ {
#ifndef __EMX__ #ifndef __EMX__
gimp_color_selector_unregister (shutdown_data, completed_cb, completed_data); gimp_color_selector_unregister (shutdown_data, completed_cb, completed_data);
@ -128,61 +140,70 @@ module_unload (void *shutdown_data,
/* definitions and variables */ /* definitions and variables */
#define N_BUCKETS 10 #define N_BUCKETS 10
#define LAST_BUCKET (N_BUCKETS) /* bucket number 0 is current color */ #define LAST_BUCKET (N_BUCKETS) /* bucket number 0 is current color */
#define IMAGE_SIZE 200 #define IMAGE_SIZE 200
#define BUCKET_SIZE 20 #define BUCKET_SIZE 20
#define PREVIEW_SIZE 40 #define PREVIEW_SIZE 40
typedef struct { typedef struct
GimpColorSelector_Callback callback; {
void *data; GimpColorSelectorCallback callback;
gpointer data;
} ColorselWater; } ColorselWater;
static gdouble bucket[N_BUCKETS + 1][3]; static gdouble bucket[N_BUCKETS + 1][4];
static GtkWidget *color_preview[N_BUCKETS + 1]; static GtkWidget *color_preview[N_BUCKETS + 1];
static gdouble last_x, last_y, last_pressure; static gdouble last_x, last_y, last_pressure;
static gfloat pressure_adjust = 1.0; static gfloat pressure_adjust = 1.0;
static guint32 motion_time; static guint32 motion_time;
static gint button_state; static gint button_state;
static ColorselWater *coldata; static ColorselWater *coldata;
static void static void
set_bucket (gint i, gdouble r, gdouble g, gdouble b) set_bucket (gint i,
gdouble r,
gdouble g,
gdouble b,
gdouble a)
{ {
if (i >= 0 && i <= N_BUCKETS) if (i >= 0 && i <= N_BUCKETS)
{ {
bucket[i][0] = r; bucket[i][0] = r;
bucket[i][1] = g; bucket[i][1] = g;
bucket[i][2] = b; bucket[i][2] = b;
bucket[i][3] = a;
} }
} }
static gdouble static gdouble
calc (gdouble x, gdouble y, gdouble angle) calc (gdouble x,
gdouble y,
gdouble angle)
{ {
gdouble s, c; gdouble s, c;
s = 1.6 * sin (angle * G_PI / 180) * 256.0 / IMAGE_SIZE; s = 1.6 * sin (angle * G_PI / 180) * 256.0 / IMAGE_SIZE;
c = 1.6 * cos (angle * G_PI / 180) * 256.0 / IMAGE_SIZE; c = 1.6 * cos (angle * G_PI / 180) * 256.0 / IMAGE_SIZE;
return 128 + (x - (IMAGE_SIZE >> 1)) * c - (y - (IMAGE_SIZE >> 1)) * s; return 128 + (x - (IMAGE_SIZE >> 1)) * c - (y - (IMAGE_SIZE >> 1)) * s;
} }
static guchar static guchar
bucket_to_byte (gdouble val) bucket_to_byte (gdouble val)
{ {
return CLAMP ((gint)(val * 280 - 25), 0, 255); return CLAMP ((gint) (val * 280 - 25), 0, 255);
} }
static void static void
draw_bucket (gint i) draw_bucket (gint i)
{ {
guchar *buf; guchar *buf;
gint x, y; gint x, y;
gint width; gint width;
gint height; gint height;
guchar r, g, b; guchar r, g, b;
g_return_if_fail (i >= 0 && i <= N_BUCKETS); g_return_if_fail (i >= 0 && i <= N_BUCKETS);
@ -192,11 +213,12 @@ draw_bucket (gint i)
width = (i == 0 ? PREVIEW_SIZE : BUCKET_SIZE); width = (i == 0 ? PREVIEW_SIZE : BUCKET_SIZE);
height = width; height = width;
buf = g_new (guchar, 3*width); buf = g_new (guchar, 3 * width);
r = bucket_to_byte (bucket[i][0]); r = bucket_to_byte (bucket[i][0]);
g = bucket_to_byte (bucket[i][1]); g = bucket_to_byte (bucket[i][1]);
b = bucket_to_byte (bucket[i][2]); b = bucket_to_byte (bucket[i][2]);
for (x = 0; x < width; x++) for (x = 0; x < width; x++)
{ {
buf[x * 3] = r; buf[x * 3] = r;
@ -212,7 +234,7 @@ draw_bucket (gint i)
static void static void
draw_all_buckets () draw_all_buckets (void)
{ {
gint i; gint i;
@ -239,12 +261,13 @@ pick_up_bucket_callback (GtkWidget *widget,
bucket[0][0] = bucket[i][0]; bucket[0][0] = bucket[i][0];
bucket[0][1] = bucket[i][1]; bucket[0][1] = bucket[i][1];
bucket[0][2] = bucket[i][2]; bucket[0][2] = bucket[i][2];
bucket[0][3] = bucket[i][3];
colorsel_water_update (); colorsel_water_update ();
} }
} }
static void static void
shift_buckets () shift_buckets (void)
{ {
gint i; gint i;
@ -257,7 +280,8 @@ shift_buckets ()
{ {
if (bucket[i][0] == bucket[0][0] && if (bucket[i][0] == bucket[0][0] &&
bucket[i][1] == bucket[0][1] && bucket[i][1] == bucket[0][1] &&
bucket[i][2] == bucket[0][2]) bucket[i][2] == bucket[0][2] &&
bucket[i][3] == bucket[0][3])
return; return;
} }
@ -273,6 +297,7 @@ shift_buckets ()
bucket[i][0] = bucket[i-1][0]; bucket[i][0] = bucket[i-1][0];
bucket[i][1] = bucket[i-1][1]; bucket[i][1] = bucket[i-1][1];
bucket[i][2] = bucket[i-1][2]; bucket[i][2] = bucket[i-1][2];
bucket[i][3] = bucket[i-1][3];
} }
} }
@ -280,8 +305,8 @@ shift_buckets ()
static void static void
select_area_draw (GtkWidget *preview) select_area_draw (GtkWidget *preview)
{ {
guchar buf[3 * IMAGE_SIZE]; guchar buf[3 * IMAGE_SIZE];
gint x, y; gint x, y;
gdouble r, g, b; gdouble r, g, b;
gdouble dr, dg, db; gdouble dr, dg, db;
@ -297,24 +322,28 @@ select_area_draw (GtkWidget *preview)
for (x = 0; x < IMAGE_SIZE; x++) for (x = 0; x < IMAGE_SIZE; x++)
{ {
buf[x * 3] = CLAMP ((gint)r, 0, 255); buf[x * 3] = CLAMP ((gint) r, 0, 255);
buf[x * 3 + 1] = CLAMP ((gint)g, 0, 255); buf[x * 3 + 1] = CLAMP ((gint) g, 0, 255);
buf[x * 3 + 2] = CLAMP ((gint)b, 0, 255); buf[x * 3 + 2] = CLAMP ((gint) b, 0, 255);
r += dr; r += dr;
g += dg; g += dg;
b += db; b += db;
} }
gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, y, IMAGE_SIZE); gtk_preview_draw_row (GTK_PREVIEW (preview), buf, 0, y, IMAGE_SIZE);
} }
} }
static void static void
add_pigment (gboolean erase, gdouble x, gdouble y, gdouble much) add_pigment (gboolean erase,
gdouble x,
gdouble y,
gdouble much)
{ {
gdouble r, g, b; gdouble r, g, b;
much *= (gdouble)pressure_adjust; much *= (gdouble) pressure_adjust;
#ifdef VERBOSE #ifdef VERBOSE
g_print ("x: %g, y: %g, much: %g\n", x, y, much); g_print ("x: %g, y: %g, much: %g\n", x, y, much);
@ -349,8 +378,11 @@ add_pigment (gboolean erase, gdouble x, gdouble y, gdouble much)
} }
static void static void
draw_brush (GtkWidget *widget, gboolean erase, draw_brush (GtkWidget *widget,
gdouble x, gdouble y, gdouble pressure) gboolean erase,
gdouble x,
gdouble y,
gdouble pressure)
{ {
gdouble much; /* how much pigment to mix in */ gdouble much; /* how much pigment to mix in */
@ -372,7 +404,8 @@ draw_brush (GtkWidget *widget, gboolean erase,
static gint static gint
button_press_event (GtkWidget *widget, GdkEventButton *event) button_press_event (GtkWidget *widget,
GdkEventButton *event)
{ {
gboolean erase; gboolean erase;
@ -395,7 +428,8 @@ button_press_event (GtkWidget *widget, GdkEventButton *event)
} }
static gint static gint
button_release_event (GtkWidget *widget, GdkEventButton *event) button_release_event (GtkWidget *widget,
GdkEventButton *event)
{ {
button_state &= ~(1 << event->button); button_state &= ~(1 << event->button);
@ -403,14 +437,18 @@ button_release_event (GtkWidget *widget, GdkEventButton *event)
} }
static gint static gint
motion_notify_event (GtkWidget *widget, GdkEventMotion *event) motion_notify_event (GtkWidget *widget,
GdkEventMotion *event)
{ {
GdkTimeCoord *coords; GdkTimeCoord *coords;
int nevents; gint nevents;
int i; gint i;
gboolean erase; gboolean erase;
if (event->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK)) if (event->state & (GDK_BUTTON1_MASK |
GDK_BUTTON2_MASK |
GDK_BUTTON3_MASK |
GDK_BUTTON4_MASK))
{ {
coords = gdk_input_motion_events (event->window, event->deviceid, coords = gdk_input_motion_events (event->window, event->deviceid,
motion_time, event->time, motion_time, event->time,
@ -454,7 +492,8 @@ motion_notify_event (GtkWidget *widget, GdkEventMotion *event)
} }
static gint static gint
proximity_out_event (GtkWidget *widget, GdkEventProximity *event) proximity_out_event (GtkWidget *widget,
GdkEventProximity *event)
{ {
#ifdef VERBOSE #ifdef VERBOSE
g_print ("proximity out\n"); g_print ("proximity out\n");
@ -463,7 +502,8 @@ proximity_out_event (GtkWidget *widget, GdkEventProximity *event)
} }
static void static void
new_color_callback (GtkWidget *widget, gpointer data) new_color_callback (GtkWidget *widget,
gpointer data)
{ {
#ifdef VERBOSE #ifdef VERBOSE
g_print ("new color\n"); g_print ("new color\n");
@ -474,6 +514,7 @@ new_color_callback (GtkWidget *widget, gpointer data)
bucket[0][0] = 1.0; bucket[0][0] = 1.0;
bucket[0][1] = 1.0; bucket[0][1] = 1.0;
bucket[0][2] = 1.0; bucket[0][2] = 1.0;
bucket[0][3] = 1.0;
draw_all_buckets (); draw_all_buckets ();
colorsel_water_update (); colorsel_water_update ();
@ -482,7 +523,8 @@ new_color_callback (GtkWidget *widget, gpointer data)
} }
static void static void
reset_color_callback (GtkWidget *widget, gpointer data) reset_color_callback (GtkWidget *widget,
gpointer data)
{ {
#ifdef VERBOSE #ifdef VERBOSE
g_print ("reset color\n"); g_print ("reset color\n");
@ -492,6 +534,7 @@ reset_color_callback (GtkWidget *widget, gpointer data)
bucket[0][0] = 1.0; bucket[0][0] = 1.0;
bucket[0][1] = 1.0; bucket[0][1] = 1.0;
bucket[0][2] = 1.0; bucket[0][2] = 1.0;
bucket[0][3] = 1.0;
colorsel_water_update (); colorsel_water_update ();
@ -499,7 +542,8 @@ reset_color_callback (GtkWidget *widget, gpointer data)
} }
static void static void
pressure_adjust_update (GtkAdjustment *adj, gpointer data) pressure_adjust_update (GtkAdjustment *adj,
gpointer data)
{ {
pressure_adjust = adj->value / 100; pressure_adjust = adj->value / 100;
} }
@ -510,11 +554,15 @@ pressure_adjust_update (GtkAdjustment *adj, gpointer data)
static GtkWidget* static GtkWidget*
colorsel_water_new (int r, int g, int b, colorsel_water_new (gint r,
GimpColorSelector_Callback callback, gint g,
void *callback_data, gint b,
gint a,
gboolean show_alpha,
GimpColorSelectorCallback callback,
gpointer callback_data,
/* RETURNS: */ /* RETURNS: */
void **selector_data) gpointer *selector_data)
{ {
GtkWidget *preview; GtkWidget *preview;
GtkWidget *event_box; GtkWidget *event_box;
@ -533,10 +581,10 @@ colorsel_water_new (int r, int g, int b,
GtkWidget *scale; GtkWidget *scale;
guint i; guint i;
coldata = g_malloc (sizeof (ColorselWater)); coldata = g_new (ColorselWater, 1);
coldata->callback = callback; coldata->callback = callback;
coldata->data = callback_data; coldata->data = callback_data;
*selector_data = coldata; *selector_data = coldata;
@ -559,24 +607,30 @@ colorsel_water_new (int r, int g, int b,
/* Event signals */ /* Event signals */
gtk_signal_connect (GTK_OBJECT (event_box), "motion_notify_event", gtk_signal_connect (GTK_OBJECT (event_box), "motion_notify_event",
(GtkSignalFunc) motion_notify_event, NULL); GTK_SIGNAL_FUNC (motion_notify_event),
NULL);
gtk_signal_connect (GTK_OBJECT (event_box), "button_press_event", gtk_signal_connect (GTK_OBJECT (event_box), "button_press_event",
(GtkSignalFunc) button_press_event, NULL); GTK_SIGNAL_FUNC (button_press_event),
NULL);
gtk_signal_connect (GTK_OBJECT (event_box), "button_release_event", gtk_signal_connect (GTK_OBJECT (event_box), "button_release_event",
(GtkSignalFunc) button_release_event, NULL); GTK_SIGNAL_FUNC (button_release_event),
NULL);
gtk_signal_connect (GTK_OBJECT (event_box), "proximity_out_event", gtk_signal_connect (GTK_OBJECT (event_box), "proximity_out_event",
(GtkSignalFunc) proximity_out_event, NULL); GTK_SIGNAL_FUNC (proximity_out_event),
NULL);
gtk_widget_set_events (event_box, GDK_EXPOSURE_MASK gtk_widget_set_events (event_box,
| GDK_LEAVE_NOTIFY_MASK GDK_EXPOSURE_MASK |
| GDK_BUTTON_PRESS_MASK GDK_LEAVE_NOTIFY_MASK |
| GDK_KEY_PRESS_MASK GDK_BUTTON_PRESS_MASK |
| GDK_POINTER_MOTION_MASK GDK_KEY_PRESS_MASK |
| GDK_POINTER_MOTION_HINT_MASK GDK_POINTER_MOTION_MASK |
| GDK_PROXIMITY_OUT_MASK); GDK_POINTER_MOTION_HINT_MASK |
GDK_PROXIMITY_OUT_MASK);
/* The following call enables tracking and processing of extension /* The following call enables tracking and processing of extension
events for the drawing area */ * events for the drawing area
*/
gtk_widget_set_extension_events (event_box, GDK_EXTENSION_EVENTS_ALL); gtk_widget_set_extension_events (event_box, GDK_EXTENSION_EVENTS_ALL);
gtk_widget_grab_focus (event_box); gtk_widget_grab_focus (event_box);
@ -605,20 +659,16 @@ colorsel_water_new (int r, int g, int b,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK, GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
targets, 1, targets, 1,
GDK_ACTION_COPY | GDK_ACTION_MOVE); GDK_ACTION_COPY | GDK_ACTION_MOVE);
gtk_signal_connect (GTK_OBJECT (color_preview[0]), gtk_signal_connect (GTK_OBJECT (color_preview[0]), "drag_begin",
"drag_begin",
GTK_SIGNAL_FUNC (colorsel_water_drag_begin), GTK_SIGNAL_FUNC (colorsel_water_drag_begin),
bucket[0]); bucket[0]);
gtk_signal_connect (GTK_OBJECT (color_preview[0]), gtk_signal_connect (GTK_OBJECT (color_preview[0]), "drag_end",
"drag_end",
GTK_SIGNAL_FUNC (colorsel_water_drag_end), GTK_SIGNAL_FUNC (colorsel_water_drag_end),
bucket[0]); bucket[0]);
gtk_signal_connect (GTK_OBJECT (color_preview[0]), gtk_signal_connect (GTK_OBJECT (color_preview[0]), "drag_data_get",
"drag_data_get",
GTK_SIGNAL_FUNC (colorsel_water_drag_handle), GTK_SIGNAL_FUNC (colorsel_water_drag_handle),
bucket[0]); bucket[0]);
gtk_signal_connect (GTK_OBJECT (color_preview[0]), gtk_signal_connect (GTK_OBJECT (color_preview[0]), "drag_data_received",
"drag_data_received",
GTK_SIGNAL_FUNC (colorsel_water_drop_handle), GTK_SIGNAL_FUNC (colorsel_water_drop_handle),
bucket[0]); bucket[0]);
gtk_container_add (GTK_CONTAINER (frame), color_preview[0]); gtk_container_add (GTK_CONTAINER (frame), color_preview[0]);
@ -629,12 +679,12 @@ colorsel_water_new (int r, int g, int b,
button = gtk_button_new_with_label (_("New")); button = gtk_button_new_with_label (_("New"));
gtk_container_add (GTK_CONTAINER (bbox), button); gtk_container_add (GTK_CONTAINER (bbox), button);
gtk_signal_connect (GTK_OBJECT (button), "clicked", gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) new_color_callback, GTK_SIGNAL_FUNC (new_color_callback),
NULL); NULL);
button = gtk_button_new_with_label (_("Reset")); button = gtk_button_new_with_label (_("Reset"));
gtk_container_add (GTK_CONTAINER (bbox), button); gtk_container_add (GTK_CONTAINER (bbox), button);
gtk_signal_connect (GTK_OBJECT (button), "clicked", gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) reset_color_callback, GTK_SIGNAL_FUNC (reset_color_callback),
NULL); NULL);
frame = gtk_frame_new (_("Color History")); frame = gtk_frame_new (_("Color History"));
@ -649,7 +699,7 @@ colorsel_water_new (int r, int g, int b,
button = gtk_button_new (); button = gtk_button_new ();
gtk_signal_connect (GTK_OBJECT (button), "clicked", gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (pick_up_bucket_callback), GTK_SIGNAL_FUNC (pick_up_bucket_callback),
(gpointer) GUINT_TO_POINTER (i+1)); GUINT_TO_POINTER (i + 1));
gtk_drag_dest_set (button, gtk_drag_dest_set (button,
GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_HIGHLIGHT |
GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_MOTION |
@ -660,20 +710,16 @@ colorsel_water_new (int r, int g, int b,
GDK_BUTTON1_MASK | GDK_BUTTON3_MASK, GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
targets, 1, targets, 1,
GDK_ACTION_COPY | GDK_ACTION_MOVE); GDK_ACTION_COPY | GDK_ACTION_MOVE);
gtk_signal_connect (GTK_OBJECT (button), gtk_signal_connect (GTK_OBJECT (button), "drag_begin",
"drag_begin",
GTK_SIGNAL_FUNC (colorsel_water_drag_begin), GTK_SIGNAL_FUNC (colorsel_water_drag_begin),
bucket[i+1]); bucket[i+1]);
gtk_signal_connect (GTK_OBJECT (button), gtk_signal_connect (GTK_OBJECT (button), "drag_end",
"drag_end",
GTK_SIGNAL_FUNC (colorsel_water_drag_end), GTK_SIGNAL_FUNC (colorsel_water_drag_end),
bucket[i+1]); bucket[i+1]);
gtk_signal_connect (GTK_OBJECT (button), gtk_signal_connect (GTK_OBJECT (button), "drag_data_get",
"drag_data_get",
GTK_SIGNAL_FUNC (colorsel_water_drag_handle), GTK_SIGNAL_FUNC (colorsel_water_drag_handle),
bucket[i+1]); bucket[i+1]);
gtk_signal_connect (GTK_OBJECT (button), gtk_signal_connect (GTK_OBJECT (button), "drag_data_received",
"drag_data_received",
GTK_SIGNAL_FUNC (colorsel_water_drop_handle), GTK_SIGNAL_FUNC (colorsel_water_drop_handle),
bucket[i+1]); bucket[i+1]);
gtk_table_attach_defaults (GTK_TABLE (table), gtk_table_attach_defaults (GTK_TABLE (table),
@ -681,9 +727,10 @@ colorsel_water_new (int r, int g, int b,
i % 5, (i % 5) + 1, i % 5, (i % 5) + 1,
i / 5, (i/ 5) + 1); i / 5, (i/ 5) + 1);
color_preview[i+1] = gtk_preview_new (GTK_PREVIEW_COLOR); color_preview[i+1] = gtk_preview_new (GTK_PREVIEW_COLOR);
gtk_preview_size (GTK_PREVIEW (color_preview[i+1]), BUCKET_SIZE, BUCKET_SIZE); gtk_preview_size (GTK_PREVIEW (color_preview[i+1]),
BUCKET_SIZE, BUCKET_SIZE);
gtk_container_add (GTK_CONTAINER (button), color_preview[i+1]); gtk_container_add (GTK_CONTAINER (button), color_preview[i+1]);
set_bucket (i+1, 1.0, 1.0, 1.0); set_bucket (i+1, 1.0, 1.0, 1.0, 1.0);
} }
hbox2 = gtk_hbox_new (FALSE, 0); hbox2 = gtk_hbox_new (FALSE, 0);
@ -700,44 +747,52 @@ colorsel_water_new (int r, int g, int b,
gtk_widget_show_all (hbox); gtk_widget_show_all (hbox);
colorsel_water_setcolor (coldata, r, g, b, 0); colorsel_water_setcolor (coldata, r, g, b, a, 0);
draw_all_buckets (); draw_all_buckets ();
return (vbox); return vbox;
} }
static void static void
colorsel_water_free (void *selector_data) colorsel_water_free (gpointer selector_data)
{ {
g_free (selector_data); g_free (selector_data);
} }
static void static void
colorsel_water_setcolor (void *data, int r, int g, int b, colorsel_water_setcolor (gpointer data,
int set_current) gint r,
gint g,
gint b,
gint a,
gboolean set_current)
{ {
set_bucket (0, set_bucket (0,
((gdouble) r) / 255.999, ((gdouble) r) / 255.999,
((gdouble) g) / 255.999, ((gdouble) g) / 255.999,
((gdouble) b) / 255.999); ((gdouble) b) / 255.999,
((gdouble) a) / 255.999);
draw_bucket (0); draw_bucket (0);
} }
static void static void
colorsel_water_update () colorsel_water_update (void)
{ {
int r; gint r;
int g; gint g;
int b; gint b;
gint a;
r = (int) (bucket[0][0] * 255.999); r = (gint) (bucket[0][0] * 255.999);
g = (int) (bucket[0][1] * 255.999); g = (gint) (bucket[0][1] * 255.999);
b = (int) (bucket[0][2] * 255.999); b = (gint) (bucket[0][2] * 255.999);
a = (gint) (bucket[0][3] * 255.999);
draw_bucket (0); draw_bucket (0);
coldata->callback (coldata->data, r, g, b); coldata->callback (coldata->data, r, g, b, a);
} }
static void static void
@ -746,8 +801,8 @@ colorsel_water_drag_begin (GtkWidget *widget,
gpointer data) gpointer data)
{ {
GtkWidget *window; GtkWidget *window;
gdouble *colors; gdouble *colors;
GdkColor bg; GdkColor bg;
colors = (gdouble *)data; colors = (gdouble *)data;
@ -760,9 +815,9 @@ colorsel_water_drag_begin (GtkWidget *widget,
window, window,
(GtkDestroyNotify) gtk_widget_destroy); (GtkDestroyNotify) gtk_widget_destroy);
bg.red = 0xffff * colors[0]; bg.red = 0xffff * colors[0];
bg.green = 0xffff * colors[1]; bg.green = 0xffff * colors[1];
bg.blue = 0xffff * colors[2]; bg.blue = 0xffff * colors[2];
gdk_color_alloc (gtk_widget_get_colormap (window), &bg); gdk_color_alloc (gtk_widget_get_colormap (window), &bg);
gdk_window_set_background (window->window, &bg); gdk_window_set_background (window->window, &bg);
@ -805,11 +860,12 @@ colorsel_water_drop_handle (GtkWidget *widget,
return; return;
} }
vals = (guint16 *)selection_data->data; vals = (guint16 *) selection_data->data;
colors[0] = (gdouble)vals[0] / 0xffff; colors[0] = (gdouble)vals[0] / 0xffff;
colors[1] = (gdouble)vals[1] / 0xffff; colors[1] = (gdouble)vals[1] / 0xffff;
colors[2] = (gdouble)vals[2] / 0xffff; colors[2] = (gdouble)vals[2] / 0xffff;
colors[3] = (gdouble)vals[3] / 0xffff;
draw_all_buckets (); draw_all_buckets ();
colorsel_water_update (); colorsel_water_update ();
@ -831,16 +887,13 @@ colorsel_water_drag_handle (GtkWidget *widget,
vals[0] = colors[0] * 0xffff; vals[0] = colors[0] * 0xffff;
vals[1] = colors[1] * 0xffff; vals[1] = colors[1] * 0xffff;
vals[2] = colors[2] * 0xffff; vals[2] = colors[2] * 0xffff;
vals[3] = 0xffff; vals[3] = colors[3] * 0xffff;
gtk_selection_data_set (selection_data, gtk_selection_data_set (selection_data,
gdk_atom_intern ("application/x-color", FALSE), gdk_atom_intern ("application/x-color", FALSE),
16, (guchar *)vals, 8); 16, (guchar *)vals, 8);
} }
/* End of colorsel_gtk.c */