changes for GTK+ 1.2 compatibility

This commit is contained in:
Matt Wilson 1999-03-12 02:17:08 +00:00
parent 5e64015efc
commit cdeabf5812
86 changed files with 8600 additions and 7582 deletions

View File

@ -62,15 +62,15 @@
#include "config.h"
#define LOGO_WIDTH_MIN 350
#define LOGO_HEIGHT_MIN 110
#define LOGO_HEIGHT_MIN 110
#define NAME "The GIMP"
#define BROUGHT "brought to you by"
#define AUTHORS "Spencer Kimball and Peter Mattis"
#define AUTHORS "Spencer Kimball and Peter Mattis"
#define SHOW_NEVER 0
#define SHOW_LATER 1
#define SHOW_NOW 2
/* Function prototype for affirmation dialog when exiting application */
static void really_quit_dialog (void);
static Argument* quit_invoker (Argument *args);
@ -252,7 +252,7 @@ splash_text_draw (GtkWidget *widget)
gdk_draw_string (widget->window,
font,
widget->style->fg_gc[GTK_STATE_NORMAL],
((logo_area_width - gdk_string_width (font, NAME)) / 2),
((logo_area_width - gdk_string_width (font, NAME)) / 2),
(0.25 * logo_area_height),
NAME);
@ -260,19 +260,19 @@ splash_text_draw (GtkWidget *widget)
gdk_draw_string (widget->window,
font,
widget->style->fg_gc[GTK_STATE_NORMAL],
((logo_area_width - gdk_string_width (font, GIMP_VERSION)) / 2),
((logo_area_width - gdk_string_width (font, GIMP_VERSION)) / 2),
(0.45 * logo_area_height),
GIMP_VERSION);
gdk_draw_string (widget->window,
font,
widget->style->fg_gc[GTK_STATE_NORMAL],
((logo_area_width - gdk_string_width (font, BROUGHT)) / 2),
((logo_area_width - gdk_string_width (font, BROUGHT)) / 2),
(0.65 * logo_area_height),
BROUGHT);
gdk_draw_string (widget->window,
font,
widget->style->fg_gc[GTK_STATE_NORMAL],
((logo_area_width - gdk_string_width (font, AUTHORS)) / 2),
((logo_area_width - gdk_string_width (font, AUTHORS)) / 2),
(0.80 * logo_area_height),
AUTHORS);
}
@ -282,7 +282,7 @@ splash_logo_draw (GtkWidget *widget)
{
gdk_draw_pixmap (widget->window,
widget->style->black_gc,
logo_pixmap,
logo_pixmap,
0, 0,
((logo_area_width - logo_width) / 2), ((logo_area_height - logo_height) / 2),
logo_width, logo_height);
@ -292,7 +292,7 @@ static void
splash_logo_expose (GtkWidget *widget)
{
switch (show_logo) {
case SHOW_NEVER:
case SHOW_NEVER:
case SHOW_LATER:
splash_text_draw (widget);
break;
@ -339,7 +339,7 @@ make_initialization_status_window(void)
gtk_window_set_title(GTK_WINDOW(win_initstatus),
"GIMP Startup");
if (no_splash_image == FALSE && splash_logo_load_size (win_initstatus))
if (no_splash_image == FALSE && splash_logo_load_size (win_initstatus))
{
show_logo = SHOW_LATER;
}
@ -366,25 +366,25 @@ make_initialization_status_window(void)
gtk_box_pack_start_defaults(GTK_BOX(vbox), label1);
label2 = gtk_label_new("");
gtk_box_pack_start_defaults(GTK_BOX(vbox), label2);
pbar = gtk_progress_bar_new();
gtk_box_pack_start_defaults(GTK_BOX(vbox), pbar);
gtk_widget_show(vbox);
gtk_widget_show (logo_area);
gtk_widget_show(label1);
gtk_widget_show(label2);
gtk_widget_show(pbar);
gtk_window_position(GTK_WINDOW(win_initstatus),
GTK_WIN_POS_CENTER);
gtk_widget_show(win_initstatus);
gtk_window_set_policy (GTK_WINDOW (win_initstatus), FALSE, TRUE, FALSE);
/*
* This is a hack: we try to compute a good guess for the maximum
* number of charcters that will fit into the splash-screen using
* This is a hack: we try to compute a good guess for the maximum
* number of charcters that will fit into the splash-screen using
* the default_font
*/
style = gtk_widget_get_style (win_initstatus);
@ -422,8 +422,11 @@ app_init_update_status(char *label1val,
}
gtk_label_set(GTK_LABEL(label2), label2val);
}
if(pct_progress >= 0
&& GTK_PROGRESS_BAR(pbar)->percentage != pct_progress)
if (pct_progress >= 0.0 && pct_progress <= 1.0 &&
gtk_progress_get_current_percentage(&(GTK_PROGRESS_BAR(pbar)->progress)) != pct_progress)
/*
GTK_PROGRESS_BAR(pbar)->percentage != pct_progress)
*/
{
gtk_progress_bar_update(GTK_PROGRESS_BAR(pbar), pct_progress);
}
@ -459,7 +462,7 @@ app_init (void)
if (no_interface == FALSE && no_splash == FALSE && win_initstatus) {
splash_text_draw (logo_area);
}
/*
* Initialize the procedural database
* We need to do this first because any of the init
@ -614,7 +617,7 @@ really_quit_cancel_callback (GtkWidget *widget,
static gint
really_quit_delete_callback (GtkWidget *widget,
GdkEvent *event,
gpointer client_data)
gpointer client_data)
{
really_quit_cancel_callback (widget, (GtkWidget *) client_data);
@ -640,7 +643,7 @@ really_quit_dialog ()
gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
(GtkSignalFunc) really_quit_delete_callback,
dialog);
button = gtk_button_new_with_label ("Yes");
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",

View File

@ -21,13 +21,13 @@
GtkWidget *
build_menu (MenuItem *items,
GtkAcceleratorTable *table)
GtkAccelGroup *accel_group)
{
GtkWidget *menu;
GtkWidget *menu_item;
menu = gtk_menu_new ();
gtk_menu_set_accelerator_table (GTK_MENU (menu), table);
gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
while (items->label)
{
@ -41,12 +41,13 @@ build_menu (MenuItem *items,
menu_item = gtk_menu_item_new_with_label (items->label);
gtk_container_add (GTK_CONTAINER (menu), menu_item);
if (items->accelerator_key && table)
gtk_widget_install_accelerator (menu_item,
table,
"activate",
items->accelerator_key,
items->accelerator_mods);
if (items->accelerator_key && accel_group)
gtk_widget_add_accelerator (menu_item,
"activate",
accel_group,
items->accelerator_key,
items->accelerator_mods,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
}
if (items->callback)
@ -55,7 +56,7 @@ build_menu (MenuItem *items,
items->user_data);
if (items->subitems)
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), build_menu (items->subitems, table));
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), build_menu (items->subitems, accel_group));
gtk_widget_show (menu_item);
items->widget = menu_item;

View File

@ -42,6 +42,6 @@ struct _MenuItem
/* Function declarations */
GtkWidget * build_menu (MenuItem *, GtkAcceleratorTable *);
GtkWidget * build_menu (MenuItem *, GtkAccelGroup *);
#endif /* BUILDMENU_H */

View File

@ -92,7 +92,7 @@ struct _ChannelsDialog {
GtkWidget *channel_list;
GtkWidget *preview;
GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table;
GtkAccelGroup *accel_group;
int num_components;
int base_type;
@ -204,7 +204,7 @@ channels_dialog_create ()
channelsD->active_channel = NULL;
channelsD->floating_sel = NULL;
channelsD->channel_widgets = NULL;
channelsD->accel_table = gtk_accelerator_table_new ();
channelsD->accel_group = gtk_accel_group_new ();
if (preview_size)
{
@ -217,7 +217,7 @@ channels_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */
channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_table);
channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_group);
/* The channels listbox */
listbox = gtk_scrolled_window_new (NULL, NULL);
@ -233,7 +233,7 @@ channels_dialog_create ()
gtk_container_set_focus_vadjustment (GTK_CONTAINER (channelsD->channel_list),
gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (listbox)));
GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (listbox)->vscrollbar, GTK_CAN_FOCUS);
gtk_widget_show (channelsD->channel_list);
gtk_widget_show (listbox);
@ -584,7 +584,7 @@ channels_dialog_set_channel (ChannelWidget *channel_widget)
/* get the list item data */
state = channel_widget->list_item->state;
if (channel_widget->type == Auxillary)
if (channel_widget->type == Auxillary)
{
/* turn on the specified auxillary channel */
index = gimage_get_channel_index (channel_widget->gimage, channel_widget->channel);
@ -594,8 +594,8 @@ channels_dialog_set_channel (ChannelWidget *channel_widget)
gtk_list_select_item (GTK_LIST (channelsD->channel_list), index + channelsD->num_components);
gtk_object_set_user_data (GTK_OBJECT (channel_widget->list_item), channel_widget);
}
}
else
}
else
{
if (state != GTK_STATE_SELECTED)
{
@ -638,7 +638,7 @@ channels_dialog_unset_channel (ChannelWidget * channel_widget)
/* get the list item data */
state = channel_widget->list_item->state;
if (channel_widget->type == Auxillary)
if (channel_widget->type == Auxillary)
{
/* turn off the specified auxillary channel */
index = gimage_get_channel_index (channel_widget->gimage, channel_widget->channel);
@ -673,7 +673,7 @@ channels_dialog_unset_channel (ChannelWidget * channel_widget)
gtk_object_set_user_data (GTK_OBJECT (channel_widget->list_item), channel_widget);
}
}
suspend_gimage_notify--;
}
@ -694,7 +694,7 @@ channels_dialog_position_channel (ChannelWidget *channel_widget,
list = g_list_append (list, channel_widget->list_item);
gtk_list_remove_items (GTK_LIST (channelsD->channel_list), list);
channelsD->channel_widgets = g_slist_remove (channelsD->channel_widgets, channel_widget);
suspend_gimage_notify--;
/* Add it back at the proper index */
@ -826,24 +826,24 @@ channel_list_events (GtkWidget *widget,
static void
channels_dialog_map_callback (GtkWidget *w,
gpointer client_data)
{
if (!channelsD)
return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell),
channelsD->accel_table);
}
static void
channels_dialog_unmap_callback (GtkWidget *w,
gpointer client_data)
{
if (!channelsD)
return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell),
channelsD->accel_table);
gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_group);
}
static void
channels_dialog_unmap_callback (GtkWidget *w,
gpointer client_data)
{
if (!channelsD)
return;
gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_group);
}
static void
@ -1662,7 +1662,7 @@ channel_widget_channel_flush (GtkWidget *widget,
{
/* select if this is the active channel */
if (channelsD->active_channel == (channel_widget->channel))
channels_dialog_set_channel (channel_widget);
channels_dialog_set_channel (channel_widget);
/* unselect if this is not the active channel */
else
channels_dialog_unset_channel (channel_widget);
@ -1894,13 +1894,13 @@ edit_channel_query_ok_callback (GtkWidget *w,
if (gimage_get_ID (options->gimage_id)) {
/* Set the new channel name */
if (GIMP_DRAWABLE(channel)->name)
g_free (GIMP_DRAWABLE(channel)->name);
GIMP_DRAWABLE(channel)->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (options->name_entry)));
gtk_label_set (GTK_LABEL (options->channel_widget->label), GIMP_DRAWABLE(channel)->name);
if (channel->opacity != opacity)
{
channel->opacity = opacity;
@ -1912,7 +1912,7 @@ edit_channel_query_ok_callback (GtkWidget *w,
channel->col[i] = options->color_panel->color[i];
update = TRUE;
}
if (update)
{
drawable_update (GIMP_DRAWABLE(channel), 0, 0, GIMP_DRAWABLE(channel)->width, GIMP_DRAWABLE(channel)->height);
@ -1969,7 +1969,7 @@ channels_dialog_edit_channel_query (ChannelWidget *channel_widget)
options->channel_widget = channel_widget;
options->gimage_id = channel_widget->gimage->ID;
options->opacity = (double) 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];
options->color_panel = color_panel_new (channel_color, 48, 64);
@ -2038,5 +2038,3 @@ channels_dialog_edit_channel_query (ChannelWidget *channel_widget)
gtk_widget_show (vbox);
gtk_widget_show (options->query_box);
}

View File

@ -218,25 +218,8 @@ get_standard_colormaps ()
info = gtk_preview_get_info ();
g_visual = info->visual;
if (((g_visual->type == GDK_VISUAL_PSEUDO_COLOR) ||
(g_visual->type == GDK_VISUAL_GRAYSCALE)) &&
info->reserved_pixels == NULL) {
g_print("GIMP cannot get enough colormaps to boot.\n");
g_print("Try exiting other color intensive applications.\n");
g_print("Also try enabling the (install-colormap) option in gimprc.\n");
swapping_free ();
brushes_free ();
patterns_free ();
palettes_free ();
gradients_free ();
palette_free ();
procedural_db_free ();
plug_in_kill ();
tile_swap_exit ();
gtk_exit(0);
}
g_cmap = info->cmap;
#if 0
color_pixel_vals = info->color_pixels;
gray_pixel_vals = info->gray_pixels;
reserved_pixels = info->reserved_pixels;
@ -251,6 +234,7 @@ get_standard_colormaps ()
g_lookup_red = info->lookup_red;
g_lookup_green = info->lookup_green;
g_lookup_blue = info->lookup_blue;
#endif
set_app_colors ();
}

View File

@ -56,6 +56,35 @@ static GdkCursorType default_gdisplay_cursor = GDK_TOP_LEFT_ARROW;
#define MAX_TITLE_BUF 4096
/* some useful macros */
/* unpacking the user scale level (char) */
#define SCALESRC(g) (g->scale & 0x00ff)
#define SCALEDEST(g) (g->scale >> 8)
/* finding the effective screen resolution (float) */
#define SCREEN_XRES(g) (g->dot_for_dot? g->gimage->xresolution : monitor_xres)
#define SCREEN_YRES(g) (g->dot_for_dot? g->gimage->yresolution : monitor_yres)
/* calculate scale factors (float) */
#define SCALEFACTOR_X(g) ((SCALEDEST(g) * SCREEN_XRES(g)) / \
(SCALESRC(g) * g->gimage->xresolution))
#define SCALEFACTOR_Y(g) ((SCALEDEST(g) * SCREEN_YRES(g)) / \
(SCALESRC(g) * g->gimage->yresolution))
/* scale values */
#define SCALEX(g,x) ((int)(x * SCALEFACTOR_X(g)))
#define SCALEY(g,y) ((int)(y * SCALEFACTOR_Y(g)))
/* unscale values */
#define UNSCALEX(g,x) ((int)(x / SCALEFACTOR_X(g)))
#define UNSCALEY(g,y) ((int)(y / SCALEFACTOR_Y(g)))
#define LOWPASS(x) ((x>0) ? x : 0)
/* #define HIGHPASS(x,y) ((x>y) ? y : x) */ /* unused - == MIN */
static char *image_type_strs[] =
{
"RGB",
@ -202,7 +231,7 @@ gdisplay_delete (GDisplay *gdisp)
/* free the selection structure */
selection_free (gdisp->select);
if (gdisp->scroll_gc)
gdk_gc_destroy (gdisp->scroll_gc);

View File

@ -31,6 +31,25 @@
#define SCALESRC(g) (g->scale & 0x00ff)
#define SCALEDEST(g) (g->scale >> 8)
/* finding the effective screen resolution (float) */
#define SCREEN_XRES(g) (g->dot_for_dot? g->gimage->xresolution : monitor_xres)
#define SCREEN_YRES(g) (g->dot_for_dot? g->gimage->yresolution : monitor_yres)
/* calculate scale factors (float) */
#define SCALEFACTOR_X(g) ((SCALEDEST(g) * SCREEN_XRES(g)) / \
(SCALESRC(g) * g->gimage->xresolution))
#define SCALEFACTOR_Y(g) ((SCALEDEST(g) * SCREEN_YRES(g)) / \
(SCALESRC(g) * g->gimage->yresolution))
/* scale values */
#define SCALEX(g,x) ((int)(x * SCALEFACTOR_X(g)))
#define SCALEY(g,y) ((int)(y * SCALEFACTOR_Y(g)))
/* unscale values */
#define UNSCALEX(g,x) ((int)(x / SCALEFACTOR_X(g)))
#define UNSCALEY(g,y) ((int)(y / SCALEFACTOR_Y(g)))
#define SCALE(g,x) ((x * SCALEDEST(g)) / SCALESRC(g))
#define UNSCALE(g,x) ((x * SCALESRC(g)) / SCALEDEST(g))
@ -78,6 +97,7 @@ struct _GDisplay
int offset_x, offset_y; /* offset of display image into raw image */
int scale; /* scale factor from original raw image */
int dot_for_dot; /* is monitor resolution being ignored? */
short draw_guides; /* should the guides be drawn? */
short snap_to_guides; /* should the guides be snapped to? */

View File

@ -57,6 +57,8 @@ static void
get_shades (GDisplay *gdisp,
char *buf)
{
sprintf(buf, "Using GdkRgb - we'll get back to you");
#if 0
GtkPreviewInfo *info;
info = gtk_preview_get_info ();
@ -91,6 +93,7 @@ get_shades (GDisplay *gdisp,
sprintf (buf, "%d", gdisp->gimage->num_cols);
break;
}
#endif
}
static void

File diff suppressed because it is too large Load Diff

View File

@ -56,6 +56,35 @@ static GdkCursorType default_gdisplay_cursor = GDK_TOP_LEFT_ARROW;
#define MAX_TITLE_BUF 4096
/* some useful macros */
/* unpacking the user scale level (char) */
#define SCALESRC(g) (g->scale & 0x00ff)
#define SCALEDEST(g) (g->scale >> 8)
/* finding the effective screen resolution (float) */
#define SCREEN_XRES(g) (g->dot_for_dot? g->gimage->xresolution : monitor_xres)
#define SCREEN_YRES(g) (g->dot_for_dot? g->gimage->yresolution : monitor_yres)
/* calculate scale factors (float) */
#define SCALEFACTOR_X(g) ((SCALEDEST(g) * SCREEN_XRES(g)) / \
(SCALESRC(g) * g->gimage->xresolution))
#define SCALEFACTOR_Y(g) ((SCALEDEST(g) * SCREEN_YRES(g)) / \
(SCALESRC(g) * g->gimage->yresolution))
/* scale values */
#define SCALEX(g,x) ((int)(x * SCALEFACTOR_X(g)))
#define SCALEY(g,y) ((int)(y * SCALEFACTOR_Y(g)))
/* unscale values */
#define UNSCALEX(g,x) ((int)(x / SCALEFACTOR_X(g)))
#define UNSCALEY(g,y) ((int)(y / SCALEFACTOR_Y(g)))
#define LOWPASS(x) ((x>0) ? x : 0)
/* #define HIGHPASS(x,y) ((x>y) ? y : x) */ /* unused - == MIN */
static char *image_type_strs[] =
{
"RGB",
@ -202,7 +231,7 @@ gdisplay_delete (GDisplay *gdisp)
/* free the selection structure */
selection_free (gdisp->select);
if (gdisp->scroll_gc)
gdk_gc_destroy (gdisp->scroll_gc);

View File

@ -31,6 +31,25 @@
#define SCALESRC(g) (g->scale & 0x00ff)
#define SCALEDEST(g) (g->scale >> 8)
/* finding the effective screen resolution (float) */
#define SCREEN_XRES(g) (g->dot_for_dot? g->gimage->xresolution : monitor_xres)
#define SCREEN_YRES(g) (g->dot_for_dot? g->gimage->yresolution : monitor_yres)
/* calculate scale factors (float) */
#define SCALEFACTOR_X(g) ((SCALEDEST(g) * SCREEN_XRES(g)) / \
(SCALESRC(g) * g->gimage->xresolution))
#define SCALEFACTOR_Y(g) ((SCALEDEST(g) * SCREEN_YRES(g)) / \
(SCALESRC(g) * g->gimage->yresolution))
/* scale values */
#define SCALEX(g,x) ((int)(x * SCALEFACTOR_X(g)))
#define SCALEY(g,y) ((int)(y * SCALEFACTOR_Y(g)))
/* unscale values */
#define UNSCALEX(g,x) ((int)(x / SCALEFACTOR_X(g)))
#define UNSCALEY(g,y) ((int)(y / SCALEFACTOR_Y(g)))
#define SCALE(g,x) ((x * SCALEDEST(g)) / SCALESRC(g))
#define UNSCALE(g,x) ((x * SCALESRC(g)) / SCALEDEST(g))
@ -78,6 +97,7 @@ struct _GDisplay
int offset_x, offset_y; /* offset of display image into raw image */
int scale; /* scale factor from original raw image */
int dot_for_dot; /* is monitor resolution being ignored? */
short draw_guides; /* should the guides be drawn? */
short snap_to_guides; /* should the guides be snapped to? */

View File

@ -499,7 +499,7 @@ create_toolbox ()
GtkWidget *main_vbox;
GtkWidget *vbox;
GtkWidget *menubar;
GtkAcceleratorTable *table;
GtkAccelGroup *table;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp");
@ -535,7 +535,7 @@ create_toolbox ()
gtk_widget_show (menubar);
/* Install the accelerator table in the main window */
gtk_window_add_accelerator_table (GTK_WINDOW (window), table);
gtk_window_add_accel_group (GTK_WINDOW (window), table);
vbox = gtk_vbox_new (FALSE, 1);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
@ -560,7 +560,7 @@ toolbox_free ()
for (i = 21; i < NUM_TOOLS; i++)
{
gtk_object_sink (GTK_OBJECT (tool_widgets[i]));
}
}
gtk_object_destroy (GTK_OBJECT (tool_tips));
gtk_object_unref (GTK_OBJECT (tool_tips));
}
@ -581,7 +581,7 @@ create_display_shell (int gdisp_id,
int type)
{
static GtkWidget *image_popup_menu = NULL;
static GtkAcceleratorTable *image_accelerator_table = NULL;
static GtkAccelGroup *image_accel_group = NULL;
GDisplay *gdisp;
GtkWidget *table;
int n_width, n_height;
@ -705,13 +705,13 @@ create_display_shell (int gdisp_id,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
if (! image_popup_menu)
menus_get_image_menu (&image_popup_menu, &image_accelerator_table);
menus_get_image_menu (&image_popup_menu, &image_accel_group);
/* the popup menu */
gdisp->popup = image_popup_menu;
/* the accelerator table for images */
gtk_window_add_accelerator_table (GTK_WINDOW (gdisp->shell), image_accelerator_table);
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
gtk_widget_show (gdisp->hsb);
gtk_widget_show (gdisp->vsb);
@ -996,12 +996,16 @@ progress_start ()
tool_label_area->allocation.width,
tool_label_area->allocation.height);
/*
gtk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
*/
gtk_widget_hide (tool_label_area);
gtk_widget_show (progress_area);
/*
gtk_container_enable_resize (GTK_CONTAINER (progress_area->parent));
*/
}
}
@ -1021,7 +1025,8 @@ progress_step ()
if (GTK_WIDGET_VISIBLE (progress_area))
{
val = GTK_PROGRESS_BAR (progress_area)->percentage + 0.01;
val = gtk_progress_get_current_percentage(&(GTK_PROGRESS_BAR(progress_area)->progress))+
0.01;
if (val > 1.0)
val = 0.0;
@ -1034,12 +1039,16 @@ progress_end ()
{
if (GTK_WIDGET_VISIBLE (progress_area))
{
gtk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
/*
tk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
*/
gtk_widget_hide (progress_area);
gtk_widget_show (tool_label_area);
/*
gtk_container_enable_resize (GTK_CONTAINER (progress_area->parent));
*/
gdk_flush ();

File diff suppressed because it is too large Load Diff

View File

@ -499,7 +499,7 @@ create_toolbox ()
GtkWidget *main_vbox;
GtkWidget *vbox;
GtkWidget *menubar;
GtkAcceleratorTable *table;
GtkAccelGroup *table;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp");
@ -535,7 +535,7 @@ create_toolbox ()
gtk_widget_show (menubar);
/* Install the accelerator table in the main window */
gtk_window_add_accelerator_table (GTK_WINDOW (window), table);
gtk_window_add_accel_group (GTK_WINDOW (window), table);
vbox = gtk_vbox_new (FALSE, 1);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
@ -560,7 +560,7 @@ toolbox_free ()
for (i = 21; i < NUM_TOOLS; i++)
{
gtk_object_sink (GTK_OBJECT (tool_widgets[i]));
}
}
gtk_object_destroy (GTK_OBJECT (tool_tips));
gtk_object_unref (GTK_OBJECT (tool_tips));
}
@ -581,7 +581,7 @@ create_display_shell (int gdisp_id,
int type)
{
static GtkWidget *image_popup_menu = NULL;
static GtkAcceleratorTable *image_accelerator_table = NULL;
static GtkAccelGroup *image_accel_group = NULL;
GDisplay *gdisp;
GtkWidget *table;
int n_width, n_height;
@ -705,13 +705,13 @@ create_display_shell (int gdisp_id,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
if (! image_popup_menu)
menus_get_image_menu (&image_popup_menu, &image_accelerator_table);
menus_get_image_menu (&image_popup_menu, &image_accel_group);
/* the popup menu */
gdisp->popup = image_popup_menu;
/* the accelerator table for images */
gtk_window_add_accelerator_table (GTK_WINDOW (gdisp->shell), image_accelerator_table);
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
gtk_widget_show (gdisp->hsb);
gtk_widget_show (gdisp->vsb);
@ -996,12 +996,16 @@ progress_start ()
tool_label_area->allocation.width,
tool_label_area->allocation.height);
/*
gtk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
*/
gtk_widget_hide (tool_label_area);
gtk_widget_show (progress_area);
/*
gtk_container_enable_resize (GTK_CONTAINER (progress_area->parent));
*/
}
}
@ -1021,7 +1025,8 @@ progress_step ()
if (GTK_WIDGET_VISIBLE (progress_area))
{
val = GTK_PROGRESS_BAR (progress_area)->percentage + 0.01;
val = gtk_progress_get_current_percentage(&(GTK_PROGRESS_BAR(progress_area)->progress))+
0.01;
if (val > 1.0)
val = 0.0;
@ -1034,12 +1039,16 @@ progress_end ()
{
if (GTK_WIDGET_VISIBLE (progress_area))
{
gtk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
/*
tk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
*/
gtk_widget_hide (progress_area);
gtk_widget_show (tool_label_area);
/*
gtk_container_enable_resize (GTK_CONTAINER (progress_area->parent));
*/
gdk_flush ();

View File

@ -52,7 +52,7 @@ fatal_error (char *fmt, ...)
printf ("\n");
va_end (args);
g_debug (prog_name);
g_on_error_query (prog_name);
app_exit (1);
}
@ -68,6 +68,6 @@ terminate (char *fmt, ...)
va_end (args);
if (use_debug_handler)
g_debug (prog_name);
g_on_error_query (prog_name);
gdk_exit (1);
}

View File

@ -56,6 +56,35 @@ static GdkCursorType default_gdisplay_cursor = GDK_TOP_LEFT_ARROW;
#define MAX_TITLE_BUF 4096
/* some useful macros */
/* unpacking the user scale level (char) */
#define SCALESRC(g) (g->scale & 0x00ff)
#define SCALEDEST(g) (g->scale >> 8)
/* finding the effective screen resolution (float) */
#define SCREEN_XRES(g) (g->dot_for_dot? g->gimage->xresolution : monitor_xres)
#define SCREEN_YRES(g) (g->dot_for_dot? g->gimage->yresolution : monitor_yres)
/* calculate scale factors (float) */
#define SCALEFACTOR_X(g) ((SCALEDEST(g) * SCREEN_XRES(g)) / \
(SCALESRC(g) * g->gimage->xresolution))
#define SCALEFACTOR_Y(g) ((SCALEDEST(g) * SCREEN_YRES(g)) / \
(SCALESRC(g) * g->gimage->yresolution))
/* scale values */
#define SCALEX(g,x) ((int)(x * SCALEFACTOR_X(g)))
#define SCALEY(g,y) ((int)(y * SCALEFACTOR_Y(g)))
/* unscale values */
#define UNSCALEX(g,x) ((int)(x / SCALEFACTOR_X(g)))
#define UNSCALEY(g,y) ((int)(y / SCALEFACTOR_Y(g)))
#define LOWPASS(x) ((x>0) ? x : 0)
/* #define HIGHPASS(x,y) ((x>y) ? y : x) */ /* unused - == MIN */
static char *image_type_strs[] =
{
"RGB",
@ -202,7 +231,7 @@ gdisplay_delete (GDisplay *gdisp)
/* free the selection structure */
selection_free (gdisp->select);
if (gdisp->scroll_gc)
gdk_gc_destroy (gdisp->scroll_gc);

View File

@ -31,6 +31,25 @@
#define SCALESRC(g) (g->scale & 0x00ff)
#define SCALEDEST(g) (g->scale >> 8)
/* finding the effective screen resolution (float) */
#define SCREEN_XRES(g) (g->dot_for_dot? g->gimage->xresolution : monitor_xres)
#define SCREEN_YRES(g) (g->dot_for_dot? g->gimage->yresolution : monitor_yres)
/* calculate scale factors (float) */
#define SCALEFACTOR_X(g) ((SCALEDEST(g) * SCREEN_XRES(g)) / \
(SCALESRC(g) * g->gimage->xresolution))
#define SCALEFACTOR_Y(g) ((SCALEDEST(g) * SCREEN_YRES(g)) / \
(SCALESRC(g) * g->gimage->yresolution))
/* scale values */
#define SCALEX(g,x) ((int)(x * SCALEFACTOR_X(g)))
#define SCALEY(g,y) ((int)(y * SCALEFACTOR_Y(g)))
/* unscale values */
#define UNSCALEX(g,x) ((int)(x / SCALEFACTOR_X(g)))
#define UNSCALEY(g,y) ((int)(y / SCALEFACTOR_Y(g)))
#define SCALE(g,x) ((x * SCALEDEST(g)) / SCALESRC(g))
#define UNSCALE(g,x) ((x * SCALESRC(g)) / SCALEDEST(g))
@ -78,6 +97,7 @@ struct _GDisplay
int offset_x, offset_y; /* offset of display image into raw image */
int scale; /* scale factor from original raw image */
int dot_for_dot; /* is monitor resolution being ignored? */
short draw_guides; /* should the guides be drawn? */
short snap_to_guides; /* should the guides be snapped to? */

View File

@ -151,6 +151,8 @@ struct _GImage
/* Composite preview */
TempBuf *comp_preview; /* the composite preview */
int comp_preview_valid[3]; /* preview valid-1/channel */
float xresolution; /* image x-res, in dpi */
float yresolution; /* image y-res, in dpi */
};

View File

@ -115,6 +115,9 @@ int default_type = RGB;
int show_tips = TRUE;
int last_tip = -1;
int show_tool_tips = TRUE;
float monitor_xres = 72.0;
float monitor_yres = 72.0;
int using_xserver_resolution = FALSE;
static int get_next_token (void);
static int peek_next_token (void);

View File

@ -63,6 +63,9 @@ extern int default_type;
extern int show_tips;
extern int last_tip;
extern int show_tool_tips;
extern float monitor_xres;
extern float monitor_yres;
extern int using_xserver_resolution;
/* function prototypes */
char * gimp_directory (void);

View File

@ -20,7 +20,7 @@
*/
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
* preview widgetsize constant.
* hof: Hofer Wolfgang, 1997.10.17 Added "Load From FG color"
*/
@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table;
GtkAccelGroup *accel_group;
/* Blending and coloring menus */
@ -636,7 +636,7 @@ grad_get_color_at(double pos, double *r, double *g, double *b, double *a)
double h1, s1, v1;
/* if there is no gradient return a totally transparent black */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
return;
@ -946,10 +946,10 @@ grad_create_gradient_editor(void)
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
gtk_widget_show(button);
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
to keep the preview and controls together */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
@ -962,7 +962,7 @@ grad_create_gradient_editor(void)
gtk_widget_show(frame);
gvbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_widget_show(gvbox);
/* Gradient preview */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL;
g_editor->accel_group = NULL;
for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -1075,9 +1075,9 @@ static void
ed_fetch_foreground(double *fg_r, double *fg_g, double *fg_b, double *fg_a)
{
unsigned char r, g, b;
palette_get_foreground (&r, &g, &b);
*fg_r = (double) r / 255.0;
*fg_g = (double) g / 255.0;
*fg_b = (double) b / 255.0;
@ -1340,7 +1340,7 @@ ed_copy_gradient_callback(GtkWidget *widget, gpointer client_data)
{
char *name;
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
name = g_malloc((strlen(curr_gradient->name) + 6) * sizeof(char));
@ -1605,7 +1605,7 @@ ed_refresh_callback(GtkWidget *widget, gpointer client_data)
ed_set_list_of_gradients();
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
} /* ed_refresh_callback */
/*****/
@ -1802,7 +1802,7 @@ prev_events(GtkWidget *widget, GdkEvent *event)
GdkEventButton *bevent;
/* ignore events when no gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return FALSE;
switch (event->type) {
@ -1934,7 +1934,7 @@ prev_update(int recalculate)
/* We only update if we can draw to the widget and a gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->preview))
return;
@ -1948,13 +1948,13 @@ prev_update(int recalculate)
* The original code allows expansion of the preview
* on window resize events. But once expanded, there is no way to shrink
* the window back to the original size.
* A full Bugfix should change the preview size according to the users
* window resize actions.
* A full Bugfix should change the preview size according to the users
* window resize actions.
*/
width = GRAD_PREVIEW_WIDTH;
height = GRAD_PREVIEW_HEIGHT;
pwidth = GTK_PREVIEW(g_editor->preview)->buffer_width;
pheight = GTK_PREVIEW(g_editor->preview)->buffer_height;
@ -2639,7 +2639,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_l->prev, range_l->prev,
range_l->prev->left, range_l->left);
}
if (!is_last)
{
if (!g_editor->control_compress)
@ -2648,7 +2648,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_r->next, range_r->next,
range_r->right, range_r->next->right);
}
return delta;
} /* control_move */
@ -2664,8 +2664,8 @@ control_update(int recalculate)
/* We only update if we can redraw and a gradient is present */
if (curr_gradient == NULL)
return;
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->control))
return;
@ -2871,16 +2871,16 @@ cpopup_create_main_menu(void)
GtkWidget *menu;
GtkWidget *menuitem;
GtkWidget *label;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new();
acc_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table;
g_editor->accel_group = acc_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
/* Left endpoint */
@ -2891,7 +2891,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2933,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2996,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */
@ -2998,7 +3010,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */
@ -3009,8 +3025,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */
menuitem = cpopup_create_menu_item_with_label("", &g_editor->control_recenter_label);
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */
@ -3175,7 +3202,7 @@ cpopup_adjust_menus(void)
fg_g,
fg_b,
fg_a);
/* Render saved color boxes */
for (i = 0; i < GRAD_NUM_COLORS; i++)
@ -3476,13 +3503,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
int i;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Create items */
@ -3503,18 +3530,27 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
switch (i) {
case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_0, accel_mods_0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_0, accel_mods_0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 1:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_1, accel_mods_1);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_1, accel_mods_1,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 2:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_2, accel_mods_2);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
@ -3886,12 +3922,12 @@ cpopup_create_sel_ops_menu(void)
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Flip */
@ -3901,7 +3937,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */
@ -3911,7 +3951,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */
@ -3926,7 +3970,10 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0);
gtk_widget_add_accelerator(menuitem, "activate",
acc_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3981,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem;
return menu;

View File

@ -20,7 +20,7 @@
*/
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
* preview widgetsize constant.
* hof: Hofer Wolfgang, 1997.10.17 Added "Load From FG color"
*/
@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table;
GtkAccelGroup *accel_group;
/* Blending and coloring menus */
@ -636,7 +636,7 @@ grad_get_color_at(double pos, double *r, double *g, double *b, double *a)
double h1, s1, v1;
/* if there is no gradient return a totally transparent black */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
return;
@ -946,10 +946,10 @@ grad_create_gradient_editor(void)
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
gtk_widget_show(button);
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
to keep the preview and controls together */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
@ -962,7 +962,7 @@ grad_create_gradient_editor(void)
gtk_widget_show(frame);
gvbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_widget_show(gvbox);
/* Gradient preview */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL;
g_editor->accel_group = NULL;
for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -1075,9 +1075,9 @@ static void
ed_fetch_foreground(double *fg_r, double *fg_g, double *fg_b, double *fg_a)
{
unsigned char r, g, b;
palette_get_foreground (&r, &g, &b);
*fg_r = (double) r / 255.0;
*fg_g = (double) g / 255.0;
*fg_b = (double) b / 255.0;
@ -1340,7 +1340,7 @@ ed_copy_gradient_callback(GtkWidget *widget, gpointer client_data)
{
char *name;
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
name = g_malloc((strlen(curr_gradient->name) + 6) * sizeof(char));
@ -1605,7 +1605,7 @@ ed_refresh_callback(GtkWidget *widget, gpointer client_data)
ed_set_list_of_gradients();
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
} /* ed_refresh_callback */
/*****/
@ -1802,7 +1802,7 @@ prev_events(GtkWidget *widget, GdkEvent *event)
GdkEventButton *bevent;
/* ignore events when no gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return FALSE;
switch (event->type) {
@ -1934,7 +1934,7 @@ prev_update(int recalculate)
/* We only update if we can draw to the widget and a gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->preview))
return;
@ -1948,13 +1948,13 @@ prev_update(int recalculate)
* The original code allows expansion of the preview
* on window resize events. But once expanded, there is no way to shrink
* the window back to the original size.
* A full Bugfix should change the preview size according to the users
* window resize actions.
* A full Bugfix should change the preview size according to the users
* window resize actions.
*/
width = GRAD_PREVIEW_WIDTH;
height = GRAD_PREVIEW_HEIGHT;
pwidth = GTK_PREVIEW(g_editor->preview)->buffer_width;
pheight = GTK_PREVIEW(g_editor->preview)->buffer_height;
@ -2639,7 +2639,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_l->prev, range_l->prev,
range_l->prev->left, range_l->left);
}
if (!is_last)
{
if (!g_editor->control_compress)
@ -2648,7 +2648,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_r->next, range_r->next,
range_r->right, range_r->next->right);
}
return delta;
} /* control_move */
@ -2664,8 +2664,8 @@ control_update(int recalculate)
/* We only update if we can redraw and a gradient is present */
if (curr_gradient == NULL)
return;
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->control))
return;
@ -2871,16 +2871,16 @@ cpopup_create_main_menu(void)
GtkWidget *menu;
GtkWidget *menuitem;
GtkWidget *label;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new();
acc_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table;
g_editor->accel_group = acc_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
/* Left endpoint */
@ -2891,7 +2891,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2933,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2996,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */
@ -2998,7 +3010,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */
@ -3009,8 +3025,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */
menuitem = cpopup_create_menu_item_with_label("", &g_editor->control_recenter_label);
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */
@ -3175,7 +3202,7 @@ cpopup_adjust_menus(void)
fg_g,
fg_b,
fg_a);
/* Render saved color boxes */
for (i = 0; i < GRAD_NUM_COLORS; i++)
@ -3476,13 +3503,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
int i;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Create items */
@ -3503,18 +3530,27 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
switch (i) {
case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_0, accel_mods_0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_0, accel_mods_0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 1:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_1, accel_mods_1);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_1, accel_mods_1,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 2:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_2, accel_mods_2);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
@ -3886,12 +3922,12 @@ cpopup_create_sel_ops_menu(void)
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Flip */
@ -3901,7 +3937,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */
@ -3911,7 +3951,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */
@ -3926,7 +3970,10 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0);
gtk_widget_add_accelerator(menuitem, "activate",
acc_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3981,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem;
return menu;

View File

@ -92,7 +92,7 @@ struct _ChannelsDialog {
GtkWidget *channel_list;
GtkWidget *preview;
GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table;
GtkAccelGroup *accel_group;
int num_components;
int base_type;
@ -204,7 +204,7 @@ channels_dialog_create ()
channelsD->active_channel = NULL;
channelsD->floating_sel = NULL;
channelsD->channel_widgets = NULL;
channelsD->accel_table = gtk_accelerator_table_new ();
channelsD->accel_group = gtk_accel_group_new ();
if (preview_size)
{
@ -217,7 +217,7 @@ channels_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */
channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_table);
channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_group);
/* The channels listbox */
listbox = gtk_scrolled_window_new (NULL, NULL);
@ -233,7 +233,7 @@ channels_dialog_create ()
gtk_container_set_focus_vadjustment (GTK_CONTAINER (channelsD->channel_list),
gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (listbox)));
GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (listbox)->vscrollbar, GTK_CAN_FOCUS);
gtk_widget_show (channelsD->channel_list);
gtk_widget_show (listbox);
@ -584,7 +584,7 @@ channels_dialog_set_channel (ChannelWidget *channel_widget)
/* get the list item data */
state = channel_widget->list_item->state;
if (channel_widget->type == Auxillary)
if (channel_widget->type == Auxillary)
{
/* turn on the specified auxillary channel */
index = gimage_get_channel_index (channel_widget->gimage, channel_widget->channel);
@ -594,8 +594,8 @@ channels_dialog_set_channel (ChannelWidget *channel_widget)
gtk_list_select_item (GTK_LIST (channelsD->channel_list), index + channelsD->num_components);
gtk_object_set_user_data (GTK_OBJECT (channel_widget->list_item), channel_widget);
}
}
else
}
else
{
if (state != GTK_STATE_SELECTED)
{
@ -638,7 +638,7 @@ channels_dialog_unset_channel (ChannelWidget * channel_widget)
/* get the list item data */
state = channel_widget->list_item->state;
if (channel_widget->type == Auxillary)
if (channel_widget->type == Auxillary)
{
/* turn off the specified auxillary channel */
index = gimage_get_channel_index (channel_widget->gimage, channel_widget->channel);
@ -673,7 +673,7 @@ channels_dialog_unset_channel (ChannelWidget * channel_widget)
gtk_object_set_user_data (GTK_OBJECT (channel_widget->list_item), channel_widget);
}
}
suspend_gimage_notify--;
}
@ -694,7 +694,7 @@ channels_dialog_position_channel (ChannelWidget *channel_widget,
list = g_list_append (list, channel_widget->list_item);
gtk_list_remove_items (GTK_LIST (channelsD->channel_list), list);
channelsD->channel_widgets = g_slist_remove (channelsD->channel_widgets, channel_widget);
suspend_gimage_notify--;
/* Add it back at the proper index */
@ -826,24 +826,24 @@ channel_list_events (GtkWidget *widget,
static void
channels_dialog_map_callback (GtkWidget *w,
gpointer client_data)
{
if (!channelsD)
return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell),
channelsD->accel_table);
}
static void
channels_dialog_unmap_callback (GtkWidget *w,
gpointer client_data)
{
if (!channelsD)
return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell),
channelsD->accel_table);
gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_group);
}
static void
channels_dialog_unmap_callback (GtkWidget *w,
gpointer client_data)
{
if (!channelsD)
return;
gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_group);
}
static void
@ -1662,7 +1662,7 @@ channel_widget_channel_flush (GtkWidget *widget,
{
/* select if this is the active channel */
if (channelsD->active_channel == (channel_widget->channel))
channels_dialog_set_channel (channel_widget);
channels_dialog_set_channel (channel_widget);
/* unselect if this is not the active channel */
else
channels_dialog_unset_channel (channel_widget);
@ -1894,13 +1894,13 @@ edit_channel_query_ok_callback (GtkWidget *w,
if (gimage_get_ID (options->gimage_id)) {
/* Set the new channel name */
if (GIMP_DRAWABLE(channel)->name)
g_free (GIMP_DRAWABLE(channel)->name);
GIMP_DRAWABLE(channel)->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (options->name_entry)));
gtk_label_set (GTK_LABEL (options->channel_widget->label), GIMP_DRAWABLE(channel)->name);
if (channel->opacity != opacity)
{
channel->opacity = opacity;
@ -1912,7 +1912,7 @@ edit_channel_query_ok_callback (GtkWidget *w,
channel->col[i] = options->color_panel->color[i];
update = TRUE;
}
if (update)
{
drawable_update (GIMP_DRAWABLE(channel), 0, 0, GIMP_DRAWABLE(channel)->width, GIMP_DRAWABLE(channel)->height);
@ -1969,7 +1969,7 @@ channels_dialog_edit_channel_query (ChannelWidget *channel_widget)
options->channel_widget = channel_widget;
options->gimage_id = channel_widget->gimage->ID;
options->opacity = (double) 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];
options->color_panel = color_panel_new (channel_color, 48, 64);
@ -2038,5 +2038,3 @@ channels_dialog_edit_channel_query (ChannelWidget *channel_widget)
gtk_widget_show (vbox);
gtk_widget_show (options->query_box);
}

View File

@ -20,7 +20,7 @@
*/
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
* preview widgetsize constant.
* hof: Hofer Wolfgang, 1997.10.17 Added "Load From FG color"
*/
@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table;
GtkAccelGroup *accel_group;
/* Blending and coloring menus */
@ -636,7 +636,7 @@ grad_get_color_at(double pos, double *r, double *g, double *b, double *a)
double h1, s1, v1;
/* if there is no gradient return a totally transparent black */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
return;
@ -946,10 +946,10 @@ grad_create_gradient_editor(void)
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
gtk_widget_show(button);
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
to keep the preview and controls together */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
@ -962,7 +962,7 @@ grad_create_gradient_editor(void)
gtk_widget_show(frame);
gvbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_widget_show(gvbox);
/* Gradient preview */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL;
g_editor->accel_group = NULL;
for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -1075,9 +1075,9 @@ static void
ed_fetch_foreground(double *fg_r, double *fg_g, double *fg_b, double *fg_a)
{
unsigned char r, g, b;
palette_get_foreground (&r, &g, &b);
*fg_r = (double) r / 255.0;
*fg_g = (double) g / 255.0;
*fg_b = (double) b / 255.0;
@ -1340,7 +1340,7 @@ ed_copy_gradient_callback(GtkWidget *widget, gpointer client_data)
{
char *name;
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
name = g_malloc((strlen(curr_gradient->name) + 6) * sizeof(char));
@ -1605,7 +1605,7 @@ ed_refresh_callback(GtkWidget *widget, gpointer client_data)
ed_set_list_of_gradients();
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
} /* ed_refresh_callback */
/*****/
@ -1802,7 +1802,7 @@ prev_events(GtkWidget *widget, GdkEvent *event)
GdkEventButton *bevent;
/* ignore events when no gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return FALSE;
switch (event->type) {
@ -1934,7 +1934,7 @@ prev_update(int recalculate)
/* We only update if we can draw to the widget and a gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->preview))
return;
@ -1948,13 +1948,13 @@ prev_update(int recalculate)
* The original code allows expansion of the preview
* on window resize events. But once expanded, there is no way to shrink
* the window back to the original size.
* A full Bugfix should change the preview size according to the users
* window resize actions.
* A full Bugfix should change the preview size according to the users
* window resize actions.
*/
width = GRAD_PREVIEW_WIDTH;
height = GRAD_PREVIEW_HEIGHT;
pwidth = GTK_PREVIEW(g_editor->preview)->buffer_width;
pheight = GTK_PREVIEW(g_editor->preview)->buffer_height;
@ -2639,7 +2639,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_l->prev, range_l->prev,
range_l->prev->left, range_l->left);
}
if (!is_last)
{
if (!g_editor->control_compress)
@ -2648,7 +2648,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_r->next, range_r->next,
range_r->right, range_r->next->right);
}
return delta;
} /* control_move */
@ -2664,8 +2664,8 @@ control_update(int recalculate)
/* We only update if we can redraw and a gradient is present */
if (curr_gradient == NULL)
return;
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->control))
return;
@ -2871,16 +2871,16 @@ cpopup_create_main_menu(void)
GtkWidget *menu;
GtkWidget *menuitem;
GtkWidget *label;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new();
acc_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table;
g_editor->accel_group = acc_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
/* Left endpoint */
@ -2891,7 +2891,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2933,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2996,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */
@ -2998,7 +3010,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */
@ -3009,8 +3025,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */
menuitem = cpopup_create_menu_item_with_label("", &g_editor->control_recenter_label);
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */
@ -3175,7 +3202,7 @@ cpopup_adjust_menus(void)
fg_g,
fg_b,
fg_a);
/* Render saved color boxes */
for (i = 0; i < GRAD_NUM_COLORS; i++)
@ -3476,13 +3503,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
int i;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Create items */
@ -3503,18 +3530,27 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
switch (i) {
case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_0, accel_mods_0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_0, accel_mods_0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 1:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_1, accel_mods_1);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_1, accel_mods_1,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 2:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_2, accel_mods_2);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
@ -3886,12 +3922,12 @@ cpopup_create_sel_ops_menu(void)
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Flip */
@ -3901,7 +3937,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */
@ -3911,7 +3951,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */
@ -3926,7 +3970,10 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0);
gtk_widget_add_accelerator(menuitem, "activate",
acc_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3981,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem;
return menu;

View File

@ -57,6 +57,8 @@ static void
get_shades (GDisplay *gdisp,
char *buf)
{
sprintf(buf, "Using GdkRgb - we'll get back to you");
#if 0
GtkPreviewInfo *info;
info = gtk_preview_get_info ();
@ -91,6 +93,7 @@ get_shades (GDisplay *gdisp,
sprintf (buf, "%d", gdisp->gimage->num_cols);
break;
}
#endif
}
static void

View File

@ -87,7 +87,7 @@ struct _LayersDialog {
GtkWidget *mode_box;
GtkWidget *opacity_box;
GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table;
GtkAccelGroup *accel_group;
GtkAdjustment *opacity_data;
GdkGC *red_gc; /* for non-applied layer masks */
GdkGC *green_gc; /* for visible layer masks */
@ -298,12 +298,12 @@ lc_dialog_create (int gimage_id)
if (lc_shell == NULL)
{
lc_shell = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (lc_shell), "Layers & Channels");
gtk_window_set_wmclass (GTK_WINDOW (lc_shell), "layers_and_channels", "Gimp");
gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (lc_shell)->vbox), 2);
gtk_signal_connect (GTK_OBJECT (lc_shell),
"delete_event",
"delete_event",
GTK_SIGNAL_FUNC (lc_dialog_close_callback),
NULL);
gtk_signal_connect (GTK_OBJECT (lc_shell),
@ -383,7 +383,7 @@ lc_dialog_create (int gimage_id)
{
if (!GTK_WIDGET_VISIBLE (lc_shell))
gtk_widget_show (lc_shell);
else
else
gdk_window_raise (lc_shell->window);
layers_dialog_update (gimage_id);
@ -450,7 +450,7 @@ lc_dialog_rebuild (int new_preview_size)
int flag;
gimage_id = -1;
flag = 0;
if (lc_shell)
{
@ -618,7 +618,7 @@ layers_dialog_create ()
GtkWidget *menu;
GtkWidget *slider;
GtkWidget *listbox;
if (!layersD)
{
@ -629,7 +629,7 @@ layers_dialog_create ()
layersD->active_channel = NULL;
layersD->floating_sel = NULL;
layersD->layer_widgets = NULL;
layersD->accel_table = gtk_accelerator_table_new ();
layersD->accel_group = gtk_accel_group_new ();
layersD->green_gc = NULL;
layersD->red_gc = NULL;
@ -644,7 +644,7 @@ layers_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */
layersD->ops_menu = build_menu (layers_ops, layersD->accel_table);
layersD->ops_menu = build_menu (layers_ops, layersD->accel_group);
/* The Mode option menu, and the preserve transparency */
layersD->mode_box = util_box = gtk_hbox_new (FALSE, 1);
@ -703,7 +703,7 @@ layers_dialog_create ()
gtk_container_set_focus_vadjustment (GTK_CONTAINER (layersD->layer_list),
gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (listbox)));
GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (listbox)->vscrollbar, GTK_CAN_FOCUS);
gtk_widget_show (layersD->layer_list);
gtk_widget_show (listbox);
@ -1528,8 +1528,8 @@ layers_dialog_map_callback (GtkWidget *w,
if (!layersD)
return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell),
layersD->accel_table);
gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_group);
}
static void
@ -1539,8 +1539,8 @@ layers_dialog_unmap_callback (GtkWidget *w,
if (!layersD)
return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell),
layersD->accel_table);
gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_group);
}
static void
@ -1563,7 +1563,7 @@ layers_dialog_new_layer_callback (GtkWidget *w,
if ((layer = gimage_floating_sel (gimage)))
{
floating_sel_to_layer (layer);
gdisplays_flush ();
}
else
@ -1849,7 +1849,7 @@ static gint
lc_dialog_close_callback (GtkWidget *w,
gpointer client_data)
{
if (layersD)
if (layersD)
layersD->gimage_id = -1;
gtk_widget_hide (lc_shell);
@ -2017,7 +2017,7 @@ create_layer_widget (GImage *gimage,
gtk_widget_show (hbox);
gtk_widget_show (vbox);
gtk_widget_show (list_item);
gtk_widget_ref (layer_widget->list_item);
return layer_widget;
@ -2105,7 +2105,7 @@ layer_widget_button_events (GtkWidget *widget,
button_down = 1;
click_widget = widget;
gtk_grab_add (click_widget);
if (widget == layer_widget->eye_widget)
{
old_state = GIMP_DRAWABLE(layer_widget->layer)->visible;
@ -2240,7 +2240,7 @@ layer_widget_preview_events (GtkWidget *widget,
case GDK_BUTTON_PRESS:
/* Control-button press disables the application of the mask */
bevent = (GdkEventButton *) event;
if (bevent->button == 3) {
gtk_menu_popup (GTK_MENU (layersD->ops_menu), NULL, NULL, NULL, NULL, 3, bevent->time);
return TRUE;
@ -2927,22 +2927,22 @@ new_layer_query_ok_callback (GtkWidget *w,
layer = layer_new (gimage->ID, options->xsize, options->ysize,
gimage_base_type_with_alpha (gimage),
layer_name, OPAQUE_OPACITY, NORMAL_MODE);
if (layer)
if (layer)
{
drawable_fill (GIMP_DRAWABLE(layer), fill_type);
gimage_add_layer (gimage, layer, -1);
/* Endx the group undo */
undo_push_group_end (gimage);
gdisplays_flush ();
}
else
}
else
{
g_message ("new_layer_query_ok_callback: could not allocate new layer");
}
}
gtk_widget_destroy (options->query_box);
g_free (options);
}
@ -3179,7 +3179,7 @@ edit_layer_query_ok_callback (GtkWidget *w,
{
floating_sel_to_layer (layer);
}
g_free (GIMP_DRAWABLE(layer)->name);
}
GIMP_DRAWABLE(layer)->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (options->name_entry)));
@ -3187,8 +3187,8 @@ edit_layer_query_ok_callback (GtkWidget *w,
gdisplays_flush ();
gtk_widget_destroy (options->query_box);
gtk_widget_destroy (options->query_box);
g_free (options);
}
@ -3838,7 +3838,7 @@ layer_merge_query_delete_callback (GtkWidget *w,
gpointer client_data)
{
layer_merge_query_cancel_callback (w, client_data);
return TRUE;
}

View File

@ -57,7 +57,7 @@ static GtkMenuEntry menu_items[] =
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL},
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
@ -120,7 +120,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
@ -180,7 +180,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
@ -216,54 +216,54 @@ static GHashTable *entry_ht = NULL;
void
menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menubar)
*menubar = subfactories[0]->widget;
if (table)
*table = subfactories[0]->table;
if (accel_group)
*accel_group = subfactories[0]->accel_group;
}
void
menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[1]->widget;
if (table)
*table = subfactories[1]->table;
if (accel_group)
*accel_group = subfactories[1]->accel_group;
}
void
menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[2]->widget;
if (table)
*table = subfactories[2]->table;
if (accel_group)
*accel_group = subfactories[2]->accel_group;
}
void
menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[3]->widget;
if (table)
*table = subfactories[3]->table;
if (accel_group)
*accel_group = subfactories[3]->accel_group;
}
void
@ -290,17 +290,6 @@ menus_create (GtkMenuEntry *entries,
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
}
void
@ -364,22 +353,22 @@ menus_quit ()
char filename[512];
char *gimp_dir;
if (entry_ht)
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize)
{
gtk_menu_factory_destroy (factory);
@ -425,16 +414,16 @@ menus_foreach (gpointer key,
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
@ -488,4 +477,3 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,13 +23,13 @@
void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries,
int nmenu_entries);
void menus_set_sensitive (char *path,

File diff suppressed because it is too large Load Diff

View File

@ -119,7 +119,7 @@ indexed_palette_create (int gimage_id)
GtkWidget *menu_bar;
GtkWidget *menu_bar_item;
GtkWidget *hbox;
GtkAcceleratorTable *table;
GtkAccelGroup *accel_group;
int default_index;
if (!indexedP)
@ -127,14 +127,14 @@ indexed_palette_create (int gimage_id)
indexedP = g_malloc (sizeof (IndexedPalette));
indexedP->gimage_id = -1;
table = gtk_accelerator_table_new ();
accel_group = gtk_accel_group_new ();
/* The shell and main vbox */
indexedP->shell = gtk_dialog_new ();
gtk_window_set_wmclass (GTK_WINDOW (indexedP->shell), "indexed_color_palette", "Gimp");
gtk_window_set_policy (GTK_WINDOW (indexedP->shell), FALSE, FALSE, FALSE);
gtk_window_set_policy (GTK_WINDOW (indexedP->shell), FALSE, FALSE, FALSE);
gtk_window_set_title (GTK_WINDOW (indexedP->shell), "Indexed Color Palette");
gtk_window_add_accelerator_table (GTK_WINDOW (indexedP->shell), table);
gtk_window_add_accel_group (GTK_WINDOW (indexedP->shell), accel_group);
gtk_signal_connect (GTK_OBJECT (indexedP->shell), "delete_event",
GTK_SIGNAL_FUNC (gtk_widget_hide_on_delete),
NULL);
@ -161,7 +161,7 @@ indexed_palette_create (int gimage_id)
gtk_widget_show (label);
/* The indexed palette commands pulldown menu */
ops_menu = build_menu (indexed_color_ops, table);
ops_menu = build_menu (indexed_color_ops, accel_group);
menu_bar = gtk_menu_bar_new ();
gtk_box_pack_start (GTK_BOX (util_box), menu_bar, FALSE, FALSE, 2);
@ -374,7 +374,7 @@ indexed_palette_select_callback (int r,
gimage->cmap[indexedP->col_index * 3 + 0] = r;
gimage->cmap[indexedP->col_index * 3 + 1] = g;
gimage->cmap[indexedP->col_index * 3 + 2] = b;
gdisplays_update_full (gimage->ID);
indexed_palette_draw ();
/* Fallthrough */
@ -410,12 +410,12 @@ indexed_palette_area_events (GtkWidget *widget,
r = gimage->cmap[indexedP->col_index * 3 + 0];
g = gimage->cmap[indexedP->col_index * 3 + 1];
b = gimage->cmap[indexedP->col_index * 3 + 2];
if (active_color == FOREGROUND)
if (active_color == FOREGROUND)
palette_set_foreground (r, g, b);
else if (active_color == BACKGROUND)
palette_set_background (r, g, b);
palette_set_background (r, g, b);
}
if (bevent->button == 3)
{
indexedP->col_index = 16 * ((int)bevent->y / CELL_HEIGHT) + ((int)bevent->x / CELL_WIDTH);
@ -486,7 +486,7 @@ create_image_menu (int *default_id,
if (gimage_base_type (gimage) == INDEXED)
{
id = -1;
/* make sure the default index gets set to _something_, if possible */
if (*default_index == -1)
{

View File

@ -57,6 +57,8 @@ static void
get_shades (GDisplay *gdisp,
char *buf)
{
sprintf(buf, "Using GdkRgb - we'll get back to you");
#if 0
GtkPreviewInfo *info;
info = gtk_preview_get_info ();
@ -91,6 +93,7 @@ get_shades (GDisplay *gdisp,
sprintf (buf, "%d", gdisp->gimage->num_cols);
break;
}
#endif
}
static void

View File

@ -499,7 +499,7 @@ create_toolbox ()
GtkWidget *main_vbox;
GtkWidget *vbox;
GtkWidget *menubar;
GtkAcceleratorTable *table;
GtkAccelGroup *table;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp");
@ -535,7 +535,7 @@ create_toolbox ()
gtk_widget_show (menubar);
/* Install the accelerator table in the main window */
gtk_window_add_accelerator_table (GTK_WINDOW (window), table);
gtk_window_add_accel_group (GTK_WINDOW (window), table);
vbox = gtk_vbox_new (FALSE, 1);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
@ -560,7 +560,7 @@ toolbox_free ()
for (i = 21; i < NUM_TOOLS; i++)
{
gtk_object_sink (GTK_OBJECT (tool_widgets[i]));
}
}
gtk_object_destroy (GTK_OBJECT (tool_tips));
gtk_object_unref (GTK_OBJECT (tool_tips));
}
@ -581,7 +581,7 @@ create_display_shell (int gdisp_id,
int type)
{
static GtkWidget *image_popup_menu = NULL;
static GtkAcceleratorTable *image_accelerator_table = NULL;
static GtkAccelGroup *image_accel_group = NULL;
GDisplay *gdisp;
GtkWidget *table;
int n_width, n_height;
@ -705,13 +705,13 @@ create_display_shell (int gdisp_id,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
if (! image_popup_menu)
menus_get_image_menu (&image_popup_menu, &image_accelerator_table);
menus_get_image_menu (&image_popup_menu, &image_accel_group);
/* the popup menu */
gdisp->popup = image_popup_menu;
/* the accelerator table for images */
gtk_window_add_accelerator_table (GTK_WINDOW (gdisp->shell), image_accelerator_table);
gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
gtk_widget_show (gdisp->hsb);
gtk_widget_show (gdisp->vsb);
@ -996,12 +996,16 @@ progress_start ()
tool_label_area->allocation.width,
tool_label_area->allocation.height);
/*
gtk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
*/
gtk_widget_hide (tool_label_area);
gtk_widget_show (progress_area);
/*
gtk_container_enable_resize (GTK_CONTAINER (progress_area->parent));
*/
}
}
@ -1021,7 +1025,8 @@ progress_step ()
if (GTK_WIDGET_VISIBLE (progress_area))
{
val = GTK_PROGRESS_BAR (progress_area)->percentage + 0.01;
val = gtk_progress_get_current_percentage(&(GTK_PROGRESS_BAR(progress_area)->progress))+
0.01;
if (val > 1.0)
val = 0.0;
@ -1034,12 +1039,16 @@ progress_end ()
{
if (GTK_WIDGET_VISIBLE (progress_area))
{
gtk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
/*
tk_container_disable_resize (GTK_CONTAINER (progress_area->parent));
*/
gtk_widget_hide (progress_area);
gtk_widget_show (tool_label_area);
/*
gtk_container_enable_resize (GTK_CONTAINER (progress_area->parent));
*/
gdk_flush ();

View File

@ -87,7 +87,7 @@ struct _LayersDialog {
GtkWidget *mode_box;
GtkWidget *opacity_box;
GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table;
GtkAccelGroup *accel_group;
GtkAdjustment *opacity_data;
GdkGC *red_gc; /* for non-applied layer masks */
GdkGC *green_gc; /* for visible layer masks */
@ -298,12 +298,12 @@ lc_dialog_create (int gimage_id)
if (lc_shell == NULL)
{
lc_shell = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (lc_shell), "Layers & Channels");
gtk_window_set_wmclass (GTK_WINDOW (lc_shell), "layers_and_channels", "Gimp");
gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (lc_shell)->vbox), 2);
gtk_signal_connect (GTK_OBJECT (lc_shell),
"delete_event",
"delete_event",
GTK_SIGNAL_FUNC (lc_dialog_close_callback),
NULL);
gtk_signal_connect (GTK_OBJECT (lc_shell),
@ -383,7 +383,7 @@ lc_dialog_create (int gimage_id)
{
if (!GTK_WIDGET_VISIBLE (lc_shell))
gtk_widget_show (lc_shell);
else
else
gdk_window_raise (lc_shell->window);
layers_dialog_update (gimage_id);
@ -450,7 +450,7 @@ lc_dialog_rebuild (int new_preview_size)
int flag;
gimage_id = -1;
flag = 0;
if (lc_shell)
{
@ -618,7 +618,7 @@ layers_dialog_create ()
GtkWidget *menu;
GtkWidget *slider;
GtkWidget *listbox;
if (!layersD)
{
@ -629,7 +629,7 @@ layers_dialog_create ()
layersD->active_channel = NULL;
layersD->floating_sel = NULL;
layersD->layer_widgets = NULL;
layersD->accel_table = gtk_accelerator_table_new ();
layersD->accel_group = gtk_accel_group_new ();
layersD->green_gc = NULL;
layersD->red_gc = NULL;
@ -644,7 +644,7 @@ layers_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */
layersD->ops_menu = build_menu (layers_ops, layersD->accel_table);
layersD->ops_menu = build_menu (layers_ops, layersD->accel_group);
/* The Mode option menu, and the preserve transparency */
layersD->mode_box = util_box = gtk_hbox_new (FALSE, 1);
@ -703,7 +703,7 @@ layers_dialog_create ()
gtk_container_set_focus_vadjustment (GTK_CONTAINER (layersD->layer_list),
gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (listbox)));
GTK_WIDGET_UNSET_FLAGS (GTK_SCROLLED_WINDOW (listbox)->vscrollbar, GTK_CAN_FOCUS);
gtk_widget_show (layersD->layer_list);
gtk_widget_show (listbox);
@ -1528,8 +1528,8 @@ layers_dialog_map_callback (GtkWidget *w,
if (!layersD)
return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell),
layersD->accel_table);
gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_group);
}
static void
@ -1539,8 +1539,8 @@ layers_dialog_unmap_callback (GtkWidget *w,
if (!layersD)
return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell),
layersD->accel_table);
gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_group);
}
static void
@ -1563,7 +1563,7 @@ layers_dialog_new_layer_callback (GtkWidget *w,
if ((layer = gimage_floating_sel (gimage)))
{
floating_sel_to_layer (layer);
gdisplays_flush ();
}
else
@ -1849,7 +1849,7 @@ static gint
lc_dialog_close_callback (GtkWidget *w,
gpointer client_data)
{
if (layersD)
if (layersD)
layersD->gimage_id = -1;
gtk_widget_hide (lc_shell);
@ -2017,7 +2017,7 @@ create_layer_widget (GImage *gimage,
gtk_widget_show (hbox);
gtk_widget_show (vbox);
gtk_widget_show (list_item);
gtk_widget_ref (layer_widget->list_item);
return layer_widget;
@ -2105,7 +2105,7 @@ layer_widget_button_events (GtkWidget *widget,
button_down = 1;
click_widget = widget;
gtk_grab_add (click_widget);
if (widget == layer_widget->eye_widget)
{
old_state = GIMP_DRAWABLE(layer_widget->layer)->visible;
@ -2240,7 +2240,7 @@ layer_widget_preview_events (GtkWidget *widget,
case GDK_BUTTON_PRESS:
/* Control-button press disables the application of the mask */
bevent = (GdkEventButton *) event;
if (bevent->button == 3) {
gtk_menu_popup (GTK_MENU (layersD->ops_menu), NULL, NULL, NULL, NULL, 3, bevent->time);
return TRUE;
@ -2927,22 +2927,22 @@ new_layer_query_ok_callback (GtkWidget *w,
layer = layer_new (gimage->ID, options->xsize, options->ysize,
gimage_base_type_with_alpha (gimage),
layer_name, OPAQUE_OPACITY, NORMAL_MODE);
if (layer)
if (layer)
{
drawable_fill (GIMP_DRAWABLE(layer), fill_type);
gimage_add_layer (gimage, layer, -1);
/* Endx the group undo */
undo_push_group_end (gimage);
gdisplays_flush ();
}
else
}
else
{
g_message ("new_layer_query_ok_callback: could not allocate new layer");
}
}
gtk_widget_destroy (options->query_box);
g_free (options);
}
@ -3179,7 +3179,7 @@ edit_layer_query_ok_callback (GtkWidget *w,
{
floating_sel_to_layer (layer);
}
g_free (GIMP_DRAWABLE(layer)->name);
}
GIMP_DRAWABLE(layer)->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (options->name_entry)));
@ -3187,8 +3187,8 @@ edit_layer_query_ok_callback (GtkWidget *w,
gdisplays_flush ();
gtk_widget_destroy (options->query_box);
gtk_widget_destroy (options->query_box);
g_free (options);
}
@ -3838,7 +3838,7 @@ layer_merge_query_delete_callback (GtkWidget *w,
gpointer client_data)
{
layer_merge_query_cancel_callback (w, client_data);
return TRUE;
}

View File

@ -61,7 +61,7 @@ static int gimp_argc;
static char **gimp_argv;
/*
* argv processing:
* argv processing:
* Arguments are either switches, their associated
* values, or image files. As switches and their
* associated values are processed, those slots in
@ -99,9 +99,11 @@ main (int argc, char **argv)
gtk_set_locale ();
setlocale(LC_NUMERIC, "C"); /* must use dot, not comma, as decimal separator */
gtk_init (&argc, &argv);
gtk_accelerator_table_set_mod_mask (NULL, GDK_SHIFT_MASK |
GDK_CONTROL_MASK |
GDK_MOD1_MASK);
#if 0
gtk_accelerator_set_default_mod_mask (GDK_SHIFT_MASK |
GDK_CONTROL_MASK |
GDK_MOD1_MASK);
#endif
#ifdef HAVE_PUTENV
display_name = gdk_get_display ();
@ -262,7 +264,7 @@ main (int argc, char **argv)
/* Main application loop */
if (!app_exit_finish_done ())
gtk_main ();
return 0;
}

View File

@ -57,7 +57,7 @@ static GtkMenuEntry menu_items[] =
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL},
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
@ -120,7 +120,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
@ -180,7 +180,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
@ -216,54 +216,54 @@ static GHashTable *entry_ht = NULL;
void
menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menubar)
*menubar = subfactories[0]->widget;
if (table)
*table = subfactories[0]->table;
if (accel_group)
*accel_group = subfactories[0]->accel_group;
}
void
menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[1]->widget;
if (table)
*table = subfactories[1]->table;
if (accel_group)
*accel_group = subfactories[1]->accel_group;
}
void
menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[2]->widget;
if (table)
*table = subfactories[2]->table;
if (accel_group)
*accel_group = subfactories[2]->accel_group;
}
void
menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[3]->widget;
if (table)
*table = subfactories[3]->table;
if (accel_group)
*accel_group = subfactories[3]->accel_group;
}
void
@ -290,17 +290,6 @@ menus_create (GtkMenuEntry *entries,
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
}
void
@ -364,22 +353,22 @@ menus_quit ()
char filename[512];
char *gimp_dir;
if (entry_ht)
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize)
{
gtk_menu_factory_destroy (factory);
@ -425,16 +414,16 @@ menus_foreach (gpointer key,
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
@ -488,4 +477,3 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,13 +23,13 @@
void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries,
int nmenu_entries);
void menus_set_sensitive (char *path,

View File

@ -57,7 +57,7 @@ static GtkMenuEntry menu_items[] =
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL},
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
@ -120,7 +120,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
@ -180,7 +180,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
@ -216,54 +216,54 @@ static GHashTable *entry_ht = NULL;
void
menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menubar)
*menubar = subfactories[0]->widget;
if (table)
*table = subfactories[0]->table;
if (accel_group)
*accel_group = subfactories[0]->accel_group;
}
void
menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[1]->widget;
if (table)
*table = subfactories[1]->table;
if (accel_group)
*accel_group = subfactories[1]->accel_group;
}
void
menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[2]->widget;
if (table)
*table = subfactories[2]->table;
if (accel_group)
*accel_group = subfactories[2]->accel_group;
}
void
menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[3]->widget;
if (table)
*table = subfactories[3]->table;
if (accel_group)
*accel_group = subfactories[3]->accel_group;
}
void
@ -290,17 +290,6 @@ menus_create (GtkMenuEntry *entries,
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
}
void
@ -364,22 +353,22 @@ menus_quit ()
char filename[512];
char *gimp_dir;
if (entry_ht)
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize)
{
gtk_menu_factory_destroy (factory);
@ -425,16 +414,16 @@ menus_foreach (gpointer key,
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
@ -488,4 +477,3 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,13 +23,13 @@
void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries,
int nmenu_entries);
void menus_set_sensitive (char *path,

View File

@ -119,8 +119,9 @@ static gint tools_options_delete_callback (GtkWidget *, GdkEvent *, gpointer);
static void
active_tool_free (void)
{
/*
gtk_container_disable_resize (GTK_CONTAINER (options_shell));
*/
if (!active_tool)
return;
@ -360,7 +361,9 @@ tools_select (ToolType type)
if (tool_info[(int) active_tool->type].tool_options)
gtk_widget_show (tool_info[(int) active_tool->type].tool_options);
gtk_container_enable_resize (GTK_CONTAINER (options_shell));
/*
gtk_container_enable_resize (GTK_CONTAINER (options_shell));
*/
/* Set the paused count variable to 0
*/
@ -540,7 +543,9 @@ tools_initialize (ToolType type, GDisplay *gdisp_ptr)
if (tool_info[(int) active_tool->type].tool_options)
gtk_widget_show (tool_info[(int) active_tool->type].tool_options);
/*
gtk_container_enable_resize (GTK_CONTAINER (options_shell));
*/
/* Set the paused count variable to 0
*/

View File

@ -119,8 +119,9 @@ static gint tools_options_delete_callback (GtkWidget *, GdkEvent *, gpointer);
static void
active_tool_free (void)
{
/*
gtk_container_disable_resize (GTK_CONTAINER (options_shell));
*/
if (!active_tool)
return;
@ -360,7 +361,9 @@ tools_select (ToolType type)
if (tool_info[(int) active_tool->type].tool_options)
gtk_widget_show (tool_info[(int) active_tool->type].tool_options);
gtk_container_enable_resize (GTK_CONTAINER (options_shell));
/*
gtk_container_enable_resize (GTK_CONTAINER (options_shell));
*/
/* Set the paused count variable to 0
*/
@ -540,7 +543,9 @@ tools_initialize (ToolType type, GDisplay *gdisp_ptr)
if (tool_info[(int) active_tool->type].tool_options)
gtk_widget_show (tool_info[(int) active_tool->type].tool_options);
/*
gtk_container_enable_resize (GTK_CONTAINER (options_shell));
*/
/* Set the paused count variable to 0
*/

View File

@ -20,7 +20,7 @@
*/
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
/* hof: Hofer Wolfgang, 1998.01.27 avoid resize bug by keeping
* preview widgetsize constant.
* hof: Hofer Wolfgang, 1997.10.17 Added "Load From FG color"
*/
@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table;
GtkAccelGroup *accel_group;
/* Blending and coloring menus */
@ -636,7 +636,7 @@ grad_get_color_at(double pos, double *r, double *g, double *b, double *a)
double h1, s1, v1;
/* if there is no gradient return a totally transparent black */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
return;
@ -946,10 +946,10 @@ grad_create_gradient_editor(void)
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
gtk_widget_show(button);
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
/* hbox for that holds the frame for gradient preview and gradient control;
this is only here, because resizing the preview doesn't work (and is disabled)
to keep the preview and controls together */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show(hbox);
@ -962,7 +962,7 @@ grad_create_gradient_editor(void)
gtk_widget_show(frame);
gvbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_container_add(GTK_CONTAINER(frame), gvbox);
gtk_widget_show(gvbox);
/* Gradient preview */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL;
g_editor->accel_group = NULL;
for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -1075,9 +1075,9 @@ static void
ed_fetch_foreground(double *fg_r, double *fg_g, double *fg_b, double *fg_a)
{
unsigned char r, g, b;
palette_get_foreground (&r, &g, &b);
*fg_r = (double) r / 255.0;
*fg_g = (double) g / 255.0;
*fg_b = (double) b / 255.0;
@ -1340,7 +1340,7 @@ ed_copy_gradient_callback(GtkWidget *widget, gpointer client_data)
{
char *name;
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
name = g_malloc((strlen(curr_gradient->name) + 6) * sizeof(char));
@ -1605,7 +1605,7 @@ ed_refresh_callback(GtkWidget *widget, gpointer client_data)
ed_set_list_of_gradients();
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
ed_update_editor(GRAD_UPDATE_PREVIEW | GRAD_RESET_CONTROL);
} /* ed_refresh_callback */
/*****/
@ -1802,7 +1802,7 @@ prev_events(GtkWidget *widget, GdkEvent *event)
GdkEventButton *bevent;
/* ignore events when no gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return FALSE;
switch (event->type) {
@ -1934,7 +1934,7 @@ prev_update(int recalculate)
/* We only update if we can draw to the widget and a gradient is present */
if (curr_gradient == NULL)
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->preview))
return;
@ -1948,13 +1948,13 @@ prev_update(int recalculate)
* The original code allows expansion of the preview
* on window resize events. But once expanded, there is no way to shrink
* the window back to the original size.
* A full Bugfix should change the preview size according to the users
* window resize actions.
* A full Bugfix should change the preview size according to the users
* window resize actions.
*/
width = GRAD_PREVIEW_WIDTH;
height = GRAD_PREVIEW_HEIGHT;
pwidth = GTK_PREVIEW(g_editor->preview)->buffer_width;
pheight = GTK_PREVIEW(g_editor->preview)->buffer_height;
@ -2639,7 +2639,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_l->prev, range_l->prev,
range_l->prev->left, range_l->left);
}
if (!is_last)
{
if (!g_editor->control_compress)
@ -2648,7 +2648,7 @@ control_move(grad_segment_t *range_l, grad_segment_t *range_r, double delta)
control_compress_range(range_r->next, range_r->next,
range_r->right, range_r->next->right);
}
return delta;
} /* control_move */
@ -2664,8 +2664,8 @@ control_update(int recalculate)
/* We only update if we can redraw and a gradient is present */
if (curr_gradient == NULL)
return;
if (curr_gradient == NULL)
return;
if (!GTK_WIDGET_DRAWABLE(g_editor->control))
return;
@ -2871,16 +2871,16 @@ cpopup_create_main_menu(void)
GtkWidget *menu;
GtkWidget *menuitem;
GtkWidget *label;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new();
acc_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table;
g_editor->accel_group = acc_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
gtk_window_add_accel_group(GTK_WINDOW(g_editor->shell), acc_group);
/* Left endpoint */
@ -2891,7 +2891,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2933,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2996,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */
@ -2998,7 +3010,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */
@ -3009,8 +3025,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */
menuitem = cpopup_create_menu_item_with_label("", &g_editor->control_recenter_label);
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */
@ -3175,7 +3202,7 @@ cpopup_adjust_menus(void)
fg_g,
fg_b,
fg_a);
/* Render saved color boxes */
for (i = 0; i < GRAD_NUM_COLORS; i++)
@ -3476,13 +3503,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
int i;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Create items */
@ -3503,18 +3530,27 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
switch (i) {
case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_0, accel_mods_0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_0, accel_mods_0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 1:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_1, accel_mods_1);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_1, accel_mods_1,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
case 2:
gtk_widget_install_accelerator(menuitem, acc_table, "activate",
accel_key_2, accel_mods_2);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
@ -3886,12 +3922,12 @@ cpopup_create_sel_ops_menu(void)
{
GtkWidget *menu;
GtkWidget *menuitem;
GtkAcceleratorTable *acc_table;
GtkAccelGroup *acc_group;
menu = gtk_menu_new();
acc_table = g_editor->accelerator_table;
acc_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table);
gtk_menu_set_accel_group(GTK_MENU(menu), acc_group);
/* Flip */
@ -3901,7 +3937,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */
@ -3911,7 +3951,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */
@ -3926,7 +3970,10 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0);
gtk_widget_add_accelerator(menuitem, "activate",
acc_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3981,11 @@ cpopup_create_sel_ops_menu(void)
NULL);
gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menuitem,
"activate",
acc_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem;
return menu;

View File

@ -57,7 +57,7 @@ static GtkMenuEntry menu_items[] =
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL},
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
@ -120,7 +120,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
@ -180,7 +180,7 @@ static GtkMenuEntry menu_items[] =
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
@ -216,54 +216,54 @@ static GHashTable *entry_ht = NULL;
void
menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menubar)
*menubar = subfactories[0]->widget;
if (table)
*table = subfactories[0]->table;
if (accel_group)
*accel_group = subfactories[0]->accel_group;
}
void
menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[1]->widget;
if (table)
*table = subfactories[1]->table;
if (accel_group)
*accel_group = subfactories[1]->accel_group;
}
void
menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[2]->widget;
if (table)
*table = subfactories[2]->table;
if (accel_group)
*accel_group = subfactories[2]->accel_group;
}
void
menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table)
GtkAccelGroup **accel_group)
{
if (initialize)
menus_init ();
if (menu)
*menu = subfactories[3]->widget;
if (table)
*table = subfactories[3]->table;
if (accel_group)
*accel_group = subfactories[3]->accel_group;
}
void
@ -290,17 +290,6 @@ menus_create (GtkMenuEntry *entries,
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
}
void
@ -364,22 +353,22 @@ menus_quit ()
char filename[512];
char *gimp_dir;
if (entry_ht)
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize)
{
gtk_menu_factory_destroy (factory);
@ -425,16 +414,16 @@ menus_foreach (gpointer key,
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
@ -488,4 +477,3 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,13 +23,13 @@
void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table);
GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries,
int nmenu_entries);
void menus_set_sensitive (char *path,

86
config.guess vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -112,6 +112,9 @@ EOF
amiga:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
exit 0 ;;
arc64:OpenBSD:*:*)
echo mips64el-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
@ -139,7 +142,7 @@ EOF
SR2?01:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
@ -150,6 +153,9 @@ EOF
NILE:*:*:dcosx)
echo pyramid-pyramid-svr4
exit 0 ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
@ -216,6 +222,9 @@ EOF
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
exit 0 ;;
macppc:NetBSD:*:*)
echo powerpc-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
exit 0 ;;
@ -321,7 +330,8 @@ EOF
fi
exit 0 ;;
*:AIX:*:4)
if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
@ -354,12 +364,44 @@ EOF
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
exit 0 ;;
9000/[3478]??:HP-UX:*:*)
9000/[34678]??:HP-UX:*:*)
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
9000/8?? ) HP_ARCH=hppa1.0 ;;
9000/6?? | 9000/7?? | 9000/80[24] | 9000/8?[13679] | 9000/892 )
sed 's/^ //' << EOF >dummy.c
#include <stdlib.h>
#include <unistd.h>
int main ()
{
#if defined(_SC_KERNEL_BITS)
long bits = sysconf(_SC_KERNEL_BITS);
#endif
long cpu = sysconf (_SC_CPU_VERSION);
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
case CPU_PA_RISC2_0:
#if defined(_SC_KERNEL_BITS)
switch (bits)
{
case 64: puts ("hppa2.0w"); break;
case 32: puts ("hppa2.0n"); break;
default: puts ("hppa2.0"); break;
} break;
#else /* !defined(_SC_KERNEL_BITS) */
puts ("hppa2.0"); break;
#endif
default: puts ("hppa1.0"); break;
}
exit (0);
}
EOF
(${CC-cc} dummy.c -o dummy 2>/dev/null ) && HP_ARCH=`./dummy`
rm -f dummy.c dummy
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@ -465,6 +507,9 @@ EOF
hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
i?86:BSD/386:*:* | *:BSD/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
@ -478,10 +523,10 @@ EOF
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
i*:CYGWIN*:*)
echo i386-pc-cygwin32
echo ${UNAME_MACHINE}-pc-cygwin32
exit 0 ;;
i*:MINGW*:*)
echo i386-pc-mingw32
echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin32
@ -493,6 +538,12 @@ EOF
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
# uname on the ARM produces all sorts of strangeness, and we need to
# filter it out.
case "$UNAME_MACHINE" in
arm* | sa110*) UNAME_MACHINE="arm" ;;
esac
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
@ -506,6 +557,7 @@ EOF
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
esac
@ -652,6 +704,13 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
i?86:UnixWare:*:*)
if /bin/uname -X 2>/dev/null >/dev/null ; then
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
fi
echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
exit 0 ;;
pc:*:*:*)
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386.
@ -735,13 +794,22 @@ EOF
news*:NEWS-OS:*:6*)
echo mips-sony-newsos6
exit 0 ;;
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
exit 0 ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit 0 ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
echo powerpc-apple-beos
exit 0 ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2

53
config.sub vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
@ -150,19 +150,19 @@ case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 \
| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
| mipstx39 | mipstx39el \
| mipstx39 | mipstx39el | armv[34][lb] \
| sparc | sparclet | sparclite | sparc64 | v850)
basic_machine=$basic_machine-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
i[3456]86)
i[34567]86)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
@ -171,15 +171,15 @@ case $basic_machine in
exit 1
;;
# Recognize the basic CPU types with company name.
vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | mips64-* | mipsel-* \
| sparc64-* | mips64-* | mipsel-* | armv[34][lb]-*\
| mips64el-* | mips64orion-* | mips64orionel-* \
| mipstx39-* | mipstx39el-* \
| f301-*)
@ -350,19 +350,19 @@ case $basic_machine in
os=-mvs
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i[3456]86v32)
i[34567]86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
i[3456]86v4*)
i[34567]86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
i[3456]86v)
i[34567]86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
i[3456]86sol2)
i[34567]86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
@ -469,25 +469,23 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pentium | p5)
basic_machine=i586-intel
pentium | p5 | k5 | nexen)
basic_machine=i586-pc
;;
pentiumpro | p6)
basic_machine=i686-intel
pentiumpro | p6 | k6 | 6x86)
basic_machine=i686-pc
;;
pentium-* | p5-*)
pentiumii | pentium2)
basic_machine=i786-pc
;;
pentium-* | p5-* | k5-* | nexen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-*)
pentiumpro-* | p6-* | k6-* | 6x86-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
k5)
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
basic_machine=i586-amd
;;
nexen)
# We don't have specific support for Nexgen yet, so just call it a Pentium
basic_machine=i586-nexgen
pentiumii-* | pentium2-*)
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
@ -716,7 +714,7 @@ case $os in
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv*)
| -mingw32* | -linux-gnu* | -uxpv* | -beos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-linux*)
@ -829,6 +827,9 @@ case $basic_machine in
sparc-* | *-sun)
os=-sunos4.1.1
;;
*-be)
os=-beos
;;
*-ibm)
os=-aix
;;

View File

@ -65,9 +65,9 @@ AC_PROG_CPP
AC_GIMP_CHECK
if test "$gtk_config_major_version.$gtk_config_minor_version" != "1.0"; then
AC_MSG_ERROR(The GIMP requires GTK 1.0.x. See the file 'INSTALL' for help.)
fi
#if test "$gtk_config_major_version.$gtk_config_minor_version" != "1.0"; then
# AC_MSG_ERROR(The GIMP requires GTK 1.0.x. See the file 'INSTALL' for help.)
#fi
if eval "test x$GCC = xyes"; then
if echo "$CFLAGS" | grep "\-Wall" > /dev/null 2> /dev/null; then
@ -354,7 +354,7 @@ AC_EGREP_CPP(glib_defines_inline,
AC_MSG_RESULT($have_glib_inline)
if test "$have_glib_inline" = "no"; then
AC_C_INLINE
fi
fi
CPPFLAGS="$gimp_save_CPPFLAGS"
LDFLAGS="$gimp_save_LDFLAGS"

View File

@ -902,7 +902,7 @@ gimp_signal (int signum)
case SIGBUS:
case SIGSEGV:
case SIGFPE:
g_debug (progname);
g_on_error_query (progname);
break;
default:
break;

View File

@ -17,9 +17,9 @@
*/
/*
/*
dbbrowser_utils.c
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
*/
#include "dbbrowser_utils.h"
@ -41,49 +41,50 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GParamDef *selected_return_vals ) )
/* create the dialog box */
/* console_entry != NULL => called from the script-fu-console */
{
dbbrowser_t* dbbrowser;
GtkWidget *button;
GtkWidget *hbox,*searchhbox,*vbox;
GtkWidget *label;
dbbrowser = (gpointer)malloc(sizeof(dbbrowser_t));
dbbrowser->apply_callback = apply_callback;
/* the dialog box */
dbbrowser->dlg = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg), "DB Browser (init)");
gtk_window_position (GTK_WINDOW (dbbrowser->dlg), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (dbbrowser->dlg), "destroy",
(GtkSignalFunc) dialog_close_callback,
dbbrowser);
/* hbox : left=list ; right=description */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
hbox, TRUE, TRUE, 0);
gtk_widget_show (hbox);
/* left = vbox : the list and the search entry */
vbox = gtk_vbox_new( FALSE, 0 );
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
vbox, FALSE, TRUE, 0);
gtk_widget_show(vbox);
/* list : list in a scrolled_win */
dbbrowser->clist = gtk_clist_new(1);
gtk_clist_set_policy (GTK_CLIST (dbbrowser->clist), GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
dbbrowser->scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->scrolled_win),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_clist_set_selection_mode (GTK_CLIST (dbbrowser->clist),
GTK_SELECTION_BROWSE);
@ -91,9 +92,11 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
gtk_signal_connect (GTK_OBJECT (dbbrowser->clist), "select_row",
(GtkSignalFunc) procedure_select_callback,
dbbrowser);
gtk_box_pack_start (GTK_BOX (vbox),
gtk_box_pack_start (GTK_BOX (vbox),
dbbrowser->clist, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (dbbrowser->scrolled_win), dbbrowser->clist);
gtk_widget_show(dbbrowser->clist);
gtk_widget_show(dbbrowser->scrolled_win);
/* search entry */
@ -104,12 +107,12 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
label = gtk_label_new("Search :");
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
label, TRUE, TRUE, 0);
gtk_widget_show(label);
dbbrowser->search_entry = gtk_entry_new();
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
dbbrowser->search_entry, TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->search_entry);
@ -117,10 +120,10 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
dbbrowser->descr_scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->descr_scroll),
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS
);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_box_pack_start (GTK_BOX (hbox),
dbbrowser->descr_scroll, TRUE, TRUE, 0);
gtk_widget_set_usize (dbbrowser->descr_scroll, DBL_WIDTH - DBL_LIST_WIDTH, 0);
gtk_widget_show (dbbrowser->descr_scroll);
@ -133,7 +136,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->name_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->name_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->name_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->name_button);
@ -141,7 +144,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->blurb_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->blurb_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->blurb_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->blurb_button);
@ -150,7 +153,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_apply_callback, dbbrowser );
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
}
@ -159,14 +162,14 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_close_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
/* now build the list */
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->dlg);
/* initialize the "return" value (for "apply") */
@ -194,8 +197,8 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
static gint
procedure_select_callback (GtkWidget *widget,
gint row,
gint column,
gint row,
gint column,
GdkEventButton * bevent,
gpointer data)
{
@ -211,21 +214,21 @@ procedure_select_callback (GtkWidget *widget,
return FALSE;
}
static void
dialog_select (dbbrowser_t *dbbrowser,
static void
dialog_select (dbbrowser_t *dbbrowser,
gchar *proc_name)
/* update the description box (right) */
{
GtkWidget* label, *old_table;
gint i,row=0;
if (dbbrowser->selected_proc_name)
if (dbbrowser->selected_proc_name)
g_free(dbbrowser->selected_proc_name);
dbbrowser->selected_proc_name = g_strdup(proc_name);
if (dbbrowser->selected_scheme_proc_name)
g_free(dbbrowser->selected_scheme_proc_name);
dbbrowser->selected_scheme_proc_name =
dbbrowser->selected_scheme_proc_name =
g_strdup(proc_name);
convert_string(dbbrowser->selected_scheme_proc_name);
@ -237,22 +240,22 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_params) g_free(dbbrowser->selected_params);
if (dbbrowser->selected_return_vals) g_free(dbbrowser->selected_return_vals);
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
&(dbbrowser->selected_proc_author),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_nparams),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_return_vals));
/* save the "old" table */
old_table = dbbrowser->descr_table;
dbbrowser->descr_table = gtk_table_new(
dbbrowser->descr_table = gtk_table_new(
10 + dbbrowser->selected_nparams + dbbrowser->selected_nreturn_vals ,
5 , FALSE );
@ -261,7 +264,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the name */
label = gtk_label_new("Name :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 6);
gtk_widget_show(label);
@ -277,7 +280,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the description */
label = gtk_label_new("Blurb :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -296,19 +299,19 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
/* in parameters */
if (dbbrowser->selected_nparams)
if (dbbrowser->selected_nparams)
{
label = gtk_label_new("In :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nparams),
0, 1, row, row+(dbbrowser->selected_nparams),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nparams);i++)
for (i=0;i<(dbbrowser->selected_nparams);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_params[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -326,12 +329,12 @@ dialog_select (dbbrowser_t *dbbrowser,
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
}
}
if ((dbbrowser->selected_nparams) &&
if ((dbbrowser->selected_nparams) &&
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -345,18 +348,18 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_nreturn_vals)
{
label = gtk_label_new("Out :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1,
1, 2, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -364,15 +367,15 @@ dialog_select (dbbrowser_t *dbbrowser,
label = gtk_label_new(GParamType2char((dbbrowser->selected_return_vals[i]).type));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
2, 3, row, row+1,
2, 3, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
/* description */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).description);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1,
3, 4, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
@ -382,7 +385,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the author & the copyright */
if ((dbbrowser->selected_nparams) ||
if ((dbbrowser->selected_nparams) ||
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -393,9 +396,9 @@ dialog_select (dbbrowser_t *dbbrowser,
}
label = gtk_label_new("Author :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -406,11 +409,11 @@ dialog_select (dbbrowser_t *dbbrowser,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
label = gtk_label_new("Date :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -423,9 +426,9 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
label = gtk_label_new("Copyright :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -439,9 +442,9 @@ dialog_select (dbbrowser_t *dbbrowser,
/*
label = gtk_label_new("Help :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -449,13 +452,13 @@ dialog_select (dbbrowser_t *dbbrowser,
if (old_table) gtk_widget_destroy(old_table);
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
dbbrowser->descr_table );
gtk_widget_show(dbbrowser->descr_table);
}
static void
dialog_close_callback (GtkWidget *widget,
dialog_close_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -472,8 +475,8 @@ dialog_close_callback (GtkWidget *widget,
}
}
static void
dialog_apply_callback (GtkWidget *widget,
static void
dialog_apply_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -493,8 +496,8 @@ dialog_apply_callback (GtkWidget *widget,
dbbrowser->selected_return_vals );
}
static void
dialog_search_callback (GtkWidget *widget,
static void
dialog_search_callback (GtkWidget *widget,
gpointer data)
/* search in the whole db */
{
@ -510,9 +513,9 @@ dialog_search_callback (GtkWidget *widget,
/* search */
if ( widget == (dbbrowser->name_button) )
if ( widget == (dbbrowser->name_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by name - please wait)");
query = g_string_new ("");
@ -529,24 +532,24 @@ dialog_search_callback (GtkWidget *widget,
}
gimp_query_database (query->str,
".*", ".*", ".*", ".*", ".*", ".*",
".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
g_string_free (query, TRUE);
}
else if ( widget == (dbbrowser->blurb_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by blurb - please wait)");
gimp_query_database (".*",
gimp_query_database (".*",
gtk_entry_get_text( GTK_ENTRY(dbbrowser->search_entry) ),
".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
else {
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (please wait)");
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
@ -562,7 +565,7 @@ dialog_search_callback (GtkWidget *widget,
gtk_clist_insert (GTK_CLIST (GTK_CLIST(dbbrowser->clist)), j,
&label);
func_name = g_strdup (proc_list[i]);
gtk_clist_set_row_data_full(GTK_CLIST(dbbrowser->clist), j,
func_name, g_free);
}
@ -576,7 +579,7 @@ dialog_search_callback (GtkWidget *widget,
if (num_procs != 0) {
gchar *insert_name, *label_name;
int i,j,savej;
for (i = 0; i < num_procs ; i++) {
insert_name=g_strdup(proc_list[0]); savej=0;
@ -587,7 +590,7 @@ dialog_search_callback (GtkWidget *widget,
savej=j;
}
}
proc_list[savej][0]='\255';
label_name = g_strdup( insert_name );
@ -600,14 +603,14 @@ dialog_search_callback (GtkWidget *widget,
}
}
*/
if ( dbbrowser->clist ) {
;
}
g_free( proc_list );
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser");
gtk_clist_thaw(GTK_CLIST(dbbrowser->clist));
@ -615,7 +618,7 @@ dialog_search_callback (GtkWidget *widget,
/* utils ... */
static void
static void
convert_string (char *str)
{
while (*str)
@ -625,7 +628,7 @@ convert_string (char *str)
}
}
static char*
static char*
GParamType2char(GParamType t)
{
switch (t) {

View File

@ -17,9 +17,9 @@
*/
/*
/*
dbbrowser_utils.c
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
*/
#include "dbbrowser_utils.h"
@ -41,49 +41,50 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GParamDef *selected_return_vals ) )
/* create the dialog box */
/* console_entry != NULL => called from the script-fu-console */
{
dbbrowser_t* dbbrowser;
GtkWidget *button;
GtkWidget *hbox,*searchhbox,*vbox;
GtkWidget *label;
dbbrowser = (gpointer)malloc(sizeof(dbbrowser_t));
dbbrowser->apply_callback = apply_callback;
/* the dialog box */
dbbrowser->dlg = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg), "DB Browser (init)");
gtk_window_position (GTK_WINDOW (dbbrowser->dlg), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (dbbrowser->dlg), "destroy",
(GtkSignalFunc) dialog_close_callback,
dbbrowser);
/* hbox : left=list ; right=description */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
hbox, TRUE, TRUE, 0);
gtk_widget_show (hbox);
/* left = vbox : the list and the search entry */
vbox = gtk_vbox_new( FALSE, 0 );
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
vbox, FALSE, TRUE, 0);
gtk_widget_show(vbox);
/* list : list in a scrolled_win */
dbbrowser->clist = gtk_clist_new(1);
gtk_clist_set_policy (GTK_CLIST (dbbrowser->clist), GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
dbbrowser->scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->scrolled_win),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_clist_set_selection_mode (GTK_CLIST (dbbrowser->clist),
GTK_SELECTION_BROWSE);
@ -91,9 +92,11 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
gtk_signal_connect (GTK_OBJECT (dbbrowser->clist), "select_row",
(GtkSignalFunc) procedure_select_callback,
dbbrowser);
gtk_box_pack_start (GTK_BOX (vbox),
gtk_box_pack_start (GTK_BOX (vbox),
dbbrowser->clist, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (dbbrowser->scrolled_win), dbbrowser->clist);
gtk_widget_show(dbbrowser->clist);
gtk_widget_show(dbbrowser->scrolled_win);
/* search entry */
@ -104,12 +107,12 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
label = gtk_label_new("Search :");
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
label, TRUE, TRUE, 0);
gtk_widget_show(label);
dbbrowser->search_entry = gtk_entry_new();
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
dbbrowser->search_entry, TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->search_entry);
@ -117,10 +120,10 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
dbbrowser->descr_scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->descr_scroll),
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS
);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_box_pack_start (GTK_BOX (hbox),
dbbrowser->descr_scroll, TRUE, TRUE, 0);
gtk_widget_set_usize (dbbrowser->descr_scroll, DBL_WIDTH - DBL_LIST_WIDTH, 0);
gtk_widget_show (dbbrowser->descr_scroll);
@ -133,7 +136,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->name_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->name_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->name_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->name_button);
@ -141,7 +144,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->blurb_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->blurb_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->blurb_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->blurb_button);
@ -150,7 +153,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_apply_callback, dbbrowser );
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
}
@ -159,14 +162,14 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_close_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
/* now build the list */
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->dlg);
/* initialize the "return" value (for "apply") */
@ -194,8 +197,8 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
static gint
procedure_select_callback (GtkWidget *widget,
gint row,
gint column,
gint row,
gint column,
GdkEventButton * bevent,
gpointer data)
{
@ -211,21 +214,21 @@ procedure_select_callback (GtkWidget *widget,
return FALSE;
}
static void
dialog_select (dbbrowser_t *dbbrowser,
static void
dialog_select (dbbrowser_t *dbbrowser,
gchar *proc_name)
/* update the description box (right) */
{
GtkWidget* label, *old_table;
gint i,row=0;
if (dbbrowser->selected_proc_name)
if (dbbrowser->selected_proc_name)
g_free(dbbrowser->selected_proc_name);
dbbrowser->selected_proc_name = g_strdup(proc_name);
if (dbbrowser->selected_scheme_proc_name)
g_free(dbbrowser->selected_scheme_proc_name);
dbbrowser->selected_scheme_proc_name =
dbbrowser->selected_scheme_proc_name =
g_strdup(proc_name);
convert_string(dbbrowser->selected_scheme_proc_name);
@ -237,22 +240,22 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_params) g_free(dbbrowser->selected_params);
if (dbbrowser->selected_return_vals) g_free(dbbrowser->selected_return_vals);
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
&(dbbrowser->selected_proc_author),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_nparams),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_return_vals));
/* save the "old" table */
old_table = dbbrowser->descr_table;
dbbrowser->descr_table = gtk_table_new(
dbbrowser->descr_table = gtk_table_new(
10 + dbbrowser->selected_nparams + dbbrowser->selected_nreturn_vals ,
5 , FALSE );
@ -261,7 +264,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the name */
label = gtk_label_new("Name :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 6);
gtk_widget_show(label);
@ -277,7 +280,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the description */
label = gtk_label_new("Blurb :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -296,19 +299,19 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
/* in parameters */
if (dbbrowser->selected_nparams)
if (dbbrowser->selected_nparams)
{
label = gtk_label_new("In :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nparams),
0, 1, row, row+(dbbrowser->selected_nparams),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nparams);i++)
for (i=0;i<(dbbrowser->selected_nparams);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_params[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -326,12 +329,12 @@ dialog_select (dbbrowser_t *dbbrowser,
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
}
}
if ((dbbrowser->selected_nparams) &&
if ((dbbrowser->selected_nparams) &&
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -345,18 +348,18 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_nreturn_vals)
{
label = gtk_label_new("Out :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1,
1, 2, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -364,15 +367,15 @@ dialog_select (dbbrowser_t *dbbrowser,
label = gtk_label_new(GParamType2char((dbbrowser->selected_return_vals[i]).type));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
2, 3, row, row+1,
2, 3, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
/* description */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).description);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1,
3, 4, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
@ -382,7 +385,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the author & the copyright */
if ((dbbrowser->selected_nparams) ||
if ((dbbrowser->selected_nparams) ||
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -393,9 +396,9 @@ dialog_select (dbbrowser_t *dbbrowser,
}
label = gtk_label_new("Author :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -406,11 +409,11 @@ dialog_select (dbbrowser_t *dbbrowser,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
label = gtk_label_new("Date :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -423,9 +426,9 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
label = gtk_label_new("Copyright :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -439,9 +442,9 @@ dialog_select (dbbrowser_t *dbbrowser,
/*
label = gtk_label_new("Help :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -449,13 +452,13 @@ dialog_select (dbbrowser_t *dbbrowser,
if (old_table) gtk_widget_destroy(old_table);
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
dbbrowser->descr_table );
gtk_widget_show(dbbrowser->descr_table);
}
static void
dialog_close_callback (GtkWidget *widget,
dialog_close_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -472,8 +475,8 @@ dialog_close_callback (GtkWidget *widget,
}
}
static void
dialog_apply_callback (GtkWidget *widget,
static void
dialog_apply_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -493,8 +496,8 @@ dialog_apply_callback (GtkWidget *widget,
dbbrowser->selected_return_vals );
}
static void
dialog_search_callback (GtkWidget *widget,
static void
dialog_search_callback (GtkWidget *widget,
gpointer data)
/* search in the whole db */
{
@ -510,9 +513,9 @@ dialog_search_callback (GtkWidget *widget,
/* search */
if ( widget == (dbbrowser->name_button) )
if ( widget == (dbbrowser->name_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by name - please wait)");
query = g_string_new ("");
@ -529,24 +532,24 @@ dialog_search_callback (GtkWidget *widget,
}
gimp_query_database (query->str,
".*", ".*", ".*", ".*", ".*", ".*",
".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
g_string_free (query, TRUE);
}
else if ( widget == (dbbrowser->blurb_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by blurb - please wait)");
gimp_query_database (".*",
gimp_query_database (".*",
gtk_entry_get_text( GTK_ENTRY(dbbrowser->search_entry) ),
".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
else {
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (please wait)");
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
@ -562,7 +565,7 @@ dialog_search_callback (GtkWidget *widget,
gtk_clist_insert (GTK_CLIST (GTK_CLIST(dbbrowser->clist)), j,
&label);
func_name = g_strdup (proc_list[i]);
gtk_clist_set_row_data_full(GTK_CLIST(dbbrowser->clist), j,
func_name, g_free);
}
@ -576,7 +579,7 @@ dialog_search_callback (GtkWidget *widget,
if (num_procs != 0) {
gchar *insert_name, *label_name;
int i,j,savej;
for (i = 0; i < num_procs ; i++) {
insert_name=g_strdup(proc_list[0]); savej=0;
@ -587,7 +590,7 @@ dialog_search_callback (GtkWidget *widget,
savej=j;
}
}
proc_list[savej][0]='\255';
label_name = g_strdup( insert_name );
@ -600,14 +603,14 @@ dialog_search_callback (GtkWidget *widget,
}
}
*/
if ( dbbrowser->clist ) {
;
}
g_free( proc_list );
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser");
gtk_clist_thaw(GTK_CLIST(dbbrowser->clist));
@ -615,7 +618,7 @@ dialog_search_callback (GtkWidget *widget,
/* utils ... */
static void
static void
convert_string (char *str)
{
while (*str)
@ -625,7 +628,7 @@ convert_string (char *str)
}
}
static char*
static char*
GParamType2char(GParamType t)
{
switch (t) {

1012
ltconfig

File diff suppressed because it is too large Load Diff

1452
ltmain.sh

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
Makefile.in
Makefile
.deps
_libs
.libs
Lighting

View File

@ -0,0 +1,21 @@
Changes:
========
0.2.2: Fixed a bug in the preview code sometimes causing a SIGSEGV.
Thanks to Prabhanjan <prabham@india.s3.com> for reporting it.
0.2.1: Fixed a bug in the calculation of the normals. Thanks to
Simon Budig <Simon.Budig@unix-ag.org> for pointing this out.
0.2.0: Fixed crashes when rerunning after closing mapping images. Removed
GckNotebook and fixed gtk refcounting problems. Added non-interactive
(scripting) interface. First non-beta release.
0.1.1: Transparent background and RGBA support, various bug fixes and
minor speed ups. First beta version.
0.0.x: Many bug fixes. Moved it to "..filters/Light Effects/Lighting Effects"
0.0.1: First version for 0.99.x

View File

@ -0,0 +1,41 @@
## Process this file with automake to produce Makefile.in
pluginlibdir = $(gimpplugindir)/plug-ins
pluginlib_PROGRAMS = Lighting
Lighting_SOURCES = \
amb1.xpm amb2.xpm diffint1.xpm diffint2.xpm diffref1.xpm diffref2.xpm high1.xpm high2.xpm lighting_apply.c lighting_apply.h lighting_image.c lighting_image.h lighting_main.c lighting_main.h lighting_pixmaps.h lighting_preview.c lighting_preview.h lighting_shade.c lighting_shade.h lighting_ui.c lighting_ui.h specref1.xpm specref2.xpm
INCLUDES = \
-I$(top_srcdir) \
-I$(top_srcdir)/plug-ins/libgck \
-I$(includedir) \
$(X_CFLAGS)
LDADD = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(top_builddir)/plug-ins/libgck/gck/libgck.la \
$(X_LIBS) \
-lc
DEPS = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(top_builddir)/plug-ins/libgck/gck/libgck.la
Lighting_DEPENDENCIES = $(DEPS)
.PHONY: files
files:
@files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \
echo $$p; \
done
@for subdir in $(SUBDIRS); do \
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
for file in $$files; do \
echo $$subdir/$$file; \
done; \
done

39
plug-ins/Lighting/README Normal file
View File

@ -0,0 +1,39 @@
Lighting Effects 0.2.2 -- image filter plug-in for The GIMP program
===================================================================
Copyright (C) 1996-98 Tom Bech
Copyright (C) 1996-98 Federico Mena Quintero
You can reach the author(s) via E-mail:
tomb@gimp.org (Tom) or quartic@gimp.org (Federico).
The GIMP was developed by Peter Mattis and Spencer Kimball.
You can contact them at gimp@xcf.berkeley.edu.
There's more GIMP stuff on our home pages:
http://www.ii.uib.no/~tomb/gimp.html (Tom's page)
http://www.nuclecu.unam.mx/~federico/gimp/index.html (Quartic's page)
Legal stuff
===========
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program (see "COPYING" file); if not, write to the Free Software Foundation,
Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
In other words, you can't sue us for whatever happens while using this ;)
Have fun,
Tom

15
plug-ins/Lighting/TODO Normal file
View File

@ -0,0 +1,15 @@
The lighting plug-in "todo"-list:
=================================
* Supersampling/antialiasing
* Bilinear filtering of enviroment map
* Refraction back in?
* Support for any-sized non-gray bump-maps.
* Support for gray or alpha-channeled env-maps.
* Zooming and scrolling in preview window
* Autoconf/automake stuff
* Put spotlight back in
* Nicer interactive UI
* Presets
* Multiple light sources

View File

@ -0,0 +1,88 @@
/* XPM */
char * amb1_xpm[] = {
"32 32 53 1",
" c None",
". c #861786178617",
"X c #861782078617",
"o c #69A66DB669A6",
"O c #8E388E388E38",
"+ c #B6DAB2CAB6DA",
"@ c #BEFBBAEABEFB",
"# c #AEBAAEBAAEBA",
"$ c #9E799E799E79",
"% c #8E388A288E38",
"& c #618565956185",
"* c #30C234D330C2",
"= c #A699A699A699",
"- c #CF3CCF3CCF3C",
"; c #D75CD34CD75C",
": c #C71BC30BC71B",
"> c #DF7DDF7DDF7D",
", c #D75CD75CD75C",
"< c #CF3CCB2BCF3C",
"1 c #AEBAAAAAAEBA",
"2 c #965896589658",
"3 c #79E779E779E7",
"4 c #514455555144",
"5 c #18611C711861",
"6 c #E79DE38DE79D",
"7 c #E79DE79DE79D",
"8 c #DF7DDB6CDF7D",
"9 c #BEFBBEFBBEFB",
"0 c #9E799A699E79",
"q c #79E77DF779E7",
"w c #618561856185",
"e c #38E338E338E3",
"r c #000004100000",
"t c #EFBEEFBEEFBE",
"y c #FFFFFBEEFFFF",
"u c #410341034103",
"i c #08200C300820",
"p c #FFFFFFFFFFFF",
"a c #B6DAB6DAB6DA",
"s c #965892489658",
"d c #104014511040",
"f c #71C675D671C6",
"g c #596559655965",
"h c #104010401040",
"j c #000000000000",
"k c #514451445144",
"l c #30C230C230C2",
"z c #59655D755965",
"x c #410345144103",
"c c #208124922081",
"v c #49244D344924",
"b c #208120812081",
"n c #082008200820",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .Xo ",
" O+@@#$%&* ",
" =-;;-:+$.&* ",
" =;>>>,<@12345 ",
" O->6778-9#0qwer ",
" +;>7tyt-910X&ui ",
" @;>7ypy-a=sqwud ",
" .@-,8ty6:#$Ofgehj ",
" X#:<---:+=2Xoklij ",
" o$+@99a#=2.fzxcrj ",
" %$1#1=$2.f&v*dj ",
" &.200sOXf&kebrj ",
" *&3qXqfozvecnjj ",
" *4w&wgkx*bnjj ",
" 5euuelcdrjj ",
" ridhirjjj ",
" jjj ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,58 @@
/* XPM */
char * amb2_xpm[] = {
"32 32 23 1",
" c None",
". c #CF3CCF3CCF3C",
"X c #CF3CCB2BCF3C",
"o c #C71BC30BC71B",
"O c #D75CD75CD75C",
"+ c #DF7DDB6CDF7D",
"@ c #C71BC71BC71B",
"# c #AEBAAEBAAEBA",
"$ c #DF7DDF7DDF7D",
"% c #E79DE38DE79D",
"& c #D75CD34CD75C",
"* c #E79DE79DE79D",
"= c #AEBAAAAAAEBA",
"- c #EFBEEBADEFBE",
"; c #BEFBBEFBBEFB",
": c #A699A289A699",
"> c #F7DEF3CEF7DE",
", c #F7DEF7DEF7DE",
"< c #B6DAB2CAB6DA",
"1 c #FFFFFFFFFFFF",
"2 c #FFFFFBEEFFFF",
"3 c #B6DAB6DAB6DA",
"4 c #BEFBBAEABEFB",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ..X ",
" oO+++O.@# ",
" X$%%$$+O&X# ",
" X%%*%%$$+&.@= ",
" o$%**-*%$+O.@;: ",
" O%**>,,%$+O.Xo< ",
" +%%-,12*+O&.Xo3 ",
" .+$%*,2,%+O&.@;3< ",
" .+$$%%*%+O&.X@;3< ",
" XO+$$$++OO&.@o43< ",
" .O+++OO&&.Xo;3< ",
" @&&OO&&..X@;43# ",
" #X.....X@o;43<: ",
" #@@XX@@o;43<: ",
" =;oo;;433<: ",
" :<3333<#: ",
" <<< ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,44 @@
/* XPM */
char * diffint1_xpm[] = {
"32 32 9 1",
" c None",
". c #514455555144",
"X c #514451445144",
"o c #49244D344924",
"O c #596559655965",
"+ c #492449244924",
"@ c #410345144103",
"# c #59655D755965",
"$ c #618561856185",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ..X ",
" o.OO...X+ ",
" XOOOOOO..X+ ",
" XOOOOOOO...X+ ",
" oOOOOOOOOO..Xo@ ",
" .OOO###OO...XX+ ",
" OOOO#$#OO...XXo ",
" .OOOO###OO...XXoo ",
" ..OOOOOOO...XXooo ",
" X.OOOOOO....XXooo ",
" ...O......XXooo ",
" X........XXXoo+ ",
" +X.....XXXXooo@ ",
" +XXXXXXXoooo@ ",
" +oXXXooooo@ ",
" @+ooooo+@ ",
" ooo ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,80 @@
/* XPM */
char * diffint2_xpm[] = {
"32 32 45 1",
" c None",
". c #A699A699A699",
"X c #A699A289A699",
"o c #965896589658",
"O c #BEFBBEFBBEFB",
"+ c #CF3CCB2BCF3C",
"@ c #C71BC71BC71B",
"# c #C71BC30BC71B",
"$ c #B6DAB6DAB6DA",
"% c #8E388E388E38",
"& c #69A669A669A6",
"* c #D75CD75CD75C",
"= c #DF7DDB6CDF7D",
"- c #CF3CCF3CCF3C",
"; c #965892489658",
": c #DF7DDF7DDF7D",
"> c #E79DE38DE79D",
", c #D75CD34CD75C",
"< c #AEBAAEBAAEBA",
"1 c #9E799E799E79",
"2 c #861786178617",
"3 c #596559655965",
"4 c #E79DE79DE79D",
"5 c #B6DAB2CAB6DA",
"6 c #71C671C671C6",
"7 c #492449244924",
"8 c #F7DEF3CEF7DE",
"9 c #F7DEF7DEF7DE",
"0 c #71C675D671C6",
"q c #514455555144",
"w c #FFFFFFFFFFFF",
"e c #FFFFFBEEFFFF",
"r c #BEFBBAEABEFB",
"t c #EFBEEBADEFBE",
"y c #AEBAAAAAAEBA",
"u c #9E799A699E79",
"i c #8E388A288E38",
"p c #49244D344924",
"a c #861782078617",
"s c #69A66DB669A6",
"d c #79E779E779E7",
"f c #618565956185",
"g c #514451445144",
"h c #618561856185",
"j c #410345144103",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .Xo ",
" .O+@#$.%& ",
" $*==*-#$.;& ",
" $=:>:=,+O<123 ",
" .*:444:*+O5X%67 ",
" O=>4898*+O5X%0q ",
" +=:49we=@r<1%03 ",
" .@*=:8et-#$yui03p ",
" X#-,**=-#r<Xoasqp ",
" o$#+++@#r5.uidfgp ",
" .$OOOr$<.1%as3p ",
" %.<55<yXu%a0hg7 ",
" &;1XX1uoia0fgpj ",
" &2%%%iadshgpj ",
" 36000sf3gpj ",
" 7q33qgp7j ",
" ppp ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,46 @@
/* XPM */
char * diffref1_xpm[] = {
"32 32 11 1",
" c None",
". c #49244D344924",
"X c #410345144103",
"o c #492449244924",
"O c #514451445144",
"+ c #596559655965",
"@ c #79E779E779E7",
"# c #69A669A669A6",
"$ c #BEFBBAEABEFB",
"% c #8E388A288E38",
"& c #514455555144",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ... ",
" Xo.....oX ",
" X.........X ",
" X...........X ",
" X....OO.......X ",
" o...+@#O......o ",
" ...O@$%&....... ",
" ....O#%#O........ ",
" .....O&O......... ",
" ................. ",
" ............... ",
" o.............o ",
" X.............X ",
" X...........X ",
" X.........X ",
" Xo.....oX ",
" ... ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,75 @@
/* XPM */
char * diffref2_xpm[] = {
"32 32 40 1",
" c None",
". c #D75CD34CD75C",
"X c #CF3CCF3CCF3C",
"o c #BEFBBAEABEFB",
"O c #F7DEF3CEF7DE",
"+ c #F7DEF7DEF7DE",
"@ c #FFFFFBEEFFFF",
"# c #EFBEEBADEFBE",
"$ c #D75CD75CD75C",
"% c #B6DAB2CAB6DA",
"& c #79E779E779E7",
"* c #E79DE79DE79D",
"= c #FFFFFFFFFFFF",
"- c #EFBEEFBEEFBE",
"; c #E79DE38DE79D",
": c #C71BC71BC71B",
"> c #A699A289A699",
", c #618565956185",
"< c #AEBAAEBAAEBA",
"1 c #861786178617",
"2 c #492449244924",
"3 c #8E388E388E38",
"4 c #596559655965",
"5 c #CF3CCB2BCF3C",
"6 c #618561856185",
"7 c #DF7DDB6CDF7D",
"8 c #C71BC30BC71B",
"9 c #AEBAAAAAAEBA",
"0 c #8E388A288E38",
"q c #49244D344924",
"w c #9E799E799E79",
"e c #79E77DF779E7",
"r c #965892489658",
"t c #71C671C671C6",
"y c #514451445144",
"u c #9E799A699E79",
"i c #861782078617",
"p c #69A66DB669A6",
"a c #514455555144",
"s c #410345144103",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .Xo ",
" .O+@@#$%& ",
" *=====@-$%& ",
" *=======+;:>, ",
" .========+*X<12 ",
" O========+*X%34 ",
" +========O;5<36 ",
" .@=======@#78906q ",
" X@======@O;Xowe4q ",
" o#@====@O*$89rtyq ",
" $-+++O#;$:%ui6q ",
" %$;**;7X8%w0py2 ",
" &%:XX58o9u0taqs ",
" &><%<9wripaqs ",
" ,1330et6yqs ",
" 24664yq2s ",
" qqq ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,75 @@
/* XPM */
char * high1_xpm[] = {
"32 32 40 1",
" c None",
". c #D75CD34CD75C",
"X c #CF3CCF3CCF3C",
"o c #BEFBBAEABEFB",
"O c #F7DEF3CEF7DE",
"+ c #F7DEF7DEF7DE",
"@ c #FFFFFBEEFFFF",
"# c #EFBEEBADEFBE",
"$ c #D75CD75CD75C",
"% c #B6DAB2CAB6DA",
"& c #79E779E779E7",
"* c #E79DE79DE79D",
"= c #FFFFFFFFFFFF",
"- c #EFBEEFBEEFBE",
"; c #E79DE38DE79D",
": c #C71BC71BC71B",
"> c #A699A289A699",
", c #618565956185",
"< c #AEBAAEBAAEBA",
"1 c #861786178617",
"2 c #492449244924",
"3 c #8E388E388E38",
"4 c #596559655965",
"5 c #CF3CCB2BCF3C",
"6 c #618561856185",
"7 c #DF7DDB6CDF7D",
"8 c #C71BC30BC71B",
"9 c #AEBAAAAAAEBA",
"0 c #8E388A288E38",
"q c #49244D344924",
"w c #9E799E799E79",
"e c #79E77DF779E7",
"r c #965892489658",
"t c #71C671C671C6",
"y c #514451445144",
"u c #9E799A699E79",
"i c #861782078617",
"p c #69A66DB669A6",
"a c #514455555144",
"s c #410345144103",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .Xo ",
" .O+@@#$%& ",
" *=====@-$%& ",
" *=======+;:>, ",
" .========+*X<12 ",
" O========+*X%34 ",
" +========O;5<36 ",
" .@=======@#78906q ",
" X@======@O;Xowe4q ",
" o#@====@O*$89rtyq ",
" $-+++O#;$:%ui6q ",
" %$;**;7X8%w0py2 ",
" &%:XX58o9u0taqs ",
" &><%<9wripaqs ",
" ,1330et6yqs ",
" 24664yq2s ",
" qqq ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,78 @@
/* XPM */
char * high2_xpm[] = {
"32 32 43 1",
" c None",
". c #A699A699A699",
"X c #A699A289A699",
"o c #965896589658",
"O c #BEFBBEFBBEFB",
"+ c #CF3CCB2BCF3C",
"@ c #C71BC71BC71B",
"# c #C71BC30BC71B",
"$ c #B6DAB6DAB6DA",
"% c #8E388E388E38",
"& c #69A669A669A6",
"* c #D75CD75CD75C",
"= c #DF7DDB6CDF7D",
"- c #CF3CCF3CCF3C",
"; c #965892489658",
": c #DF7DDF7DDF7D",
"> c #E79DE38DE79D",
", c #D75CD34CD75C",
"< c #AEBAAEBAAEBA",
"1 c #9E799E799E79",
"2 c #861786178617",
"3 c #596559655965",
"4 c #E79DE79DE79D",
"5 c #B6DAB2CAB6DA",
"6 c #71C671C671C6",
"7 c #492449244924",
"8 c #F7DEF7DEF7DE",
"9 c #71C675D671C6",
"0 c #514455555144",
"q c #FFFFFFFFFFFF",
"w c #BEFBBAEABEFB",
"e c #F7DEF3CEF7DE",
"r c #AEBAAAAAAEBA",
"t c #9E799A699E79",
"y c #8E388A288E38",
"u c #49244D344924",
"i c #861782078617",
"p c #69A66DB669A6",
"a c #79E779E779E7",
"s c #618565956185",
"d c #514451445144",
"f c #618561856185",
"g c #410345144103",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .Xo ",
" .O+@#$.%& ",
" $*==*-#$.;& ",
" $=:>:=,+O<123 ",
" .*:>4>=*+O5X%67 ",
" O=>4>8:,+O5X%90 ",
" +=:>8qq-@w<1%93 ",
" .@*==:e=+#$rty93u ",
" X#-,*,*-#w<Xoip0u ",
" o$#+++@#w5.tyasdu ",
" .$OOOw$<.1%ip3u ",
" %.<55<rXt%i9fd7 ",
" &;1XX1toyi9sdug ",
" &2%%%yiapfdug ",
" 36999ps3dug ",
" 70330du7g ",
" uuu ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,147 @@
/******************************************************/
/* Apply mapping and shading on the whole input image */
/******************************************************/
#include "lighting_shade.h"
/*************/
/* Main loop */
/*************/
get_ray_func ray_func;
void init_compute(void)
{
}
void render(gdouble x,gdouble y,GckRGB *col)
{
GckVector3 pos;
pos=int_to_pos(x,y);
*col=(*ray_func)(&pos);
}
void show_progress(gint min,gint max,gint curr)
{
gimp_progress_update((gdouble)curr/(gdouble)max);
}
void compute_image(void)
{
gint xcount,ycount;
GckRGB color;
glong progress_counter=0;
GckVector3 p;
gint32 new_image_id=-1,new_layer_id=-1,index;
guchar *row = NULL, obpp;
gint has_alpha;
init_compute();
if (mapvals.create_new_image==TRUE || (mapvals.transparent_background==TRUE
&& !gimp_drawable_has_alpha(input_drawable->id)))
{
/* Create a new image */
/* ================== */
new_image_id=gimp_image_new(width,height,RGB);
if (mapvals.transparent_background==TRUE)
{
/* Add a layer with an alpha channel */
/* ================================= */
new_layer_id=gimp_layer_new(new_image_id,"Background",
width,height,RGBA_IMAGE,100.0,NORMAL_MODE);
}
else
{
/* Create a "normal" layer */
/* ======================= */
new_layer_id=gimp_layer_new(new_image_id,"Background",
width,height,RGB_IMAGE,100.0,NORMAL_MODE);
}
gimp_image_add_layer(new_image_id,new_layer_id,0);
output_drawable=gimp_drawable_get(new_layer_id);
}
if (mapvals.bump_mapped==TRUE && mapvals.bumpmap_id!=-1)
{
gimp_pixel_rgn_init (&bump_region, gimp_drawable_get(mapvals.bumpmap_id),
0, 0, width, height, FALSE, FALSE);
precompute_init(width,height);
}
if (!mapvals.env_mapped || mapvals.envmap_id==-1)
ray_func = get_ray_color;
else
{
gimp_pixel_rgn_init (&env_region, gimp_drawable_get(mapvals.envmap_id),
0, 0, env_width, env_height, FALSE, FALSE);
ray_func = get_ray_color_ref;
}
gimp_pixel_rgn_init (&dest_region, output_drawable, 0,0, width,height, TRUE,TRUE);
obpp=gimp_drawable_bpp(output_drawable->id);
has_alpha=gimp_drawable_has_alpha(output_drawable->id);
row = (guchar *)malloc(sizeof(guchar)*(size_t)(obpp)*(size_t)(width));
gimp_progress_init("Lighting Effects");
/* if (mapvals.antialiasing==FALSE)
{ */
for (ycount=0;ycount<height;ycount++)
{
if (mapvals.bump_mapped==TRUE && mapvals.bumpmap_id!=-1)
precompute_normals(0,width,ycount);
index=0;
for (xcount=0;xcount<width;xcount++)
{
p=int_to_pos(xcount,ycount);
color=(*ray_func)(&p);
row[index++]=(guchar)(color.r*255.0);
row[index++]=(guchar)(color.g*255.0);
row[index++]=(guchar)(color.b*255.0);
if (has_alpha)
row[index++]=(guchar)(color.a*255.0);
if ((progress_counter++ % width)==0)
gimp_progress_update((gdouble)progress_counter/(gdouble)maxcounter);
}
gimp_pixel_rgn_set_row(&dest_region,row,0,ycount,width);
}
/* }
else
gck_adaptive_supersample_area(0,0,width-1,height-1,(gint)mapvals.max_depth,
mapvals.pixel_treshold,render,poke,show_progress); */
if (row!=NULL)
free(row);
/* Update image */
/* ============ */
gimp_drawable_flush(output_drawable);
gimp_drawable_merge_shadow(output_drawable->id, TRUE);
gimp_drawable_update(output_drawable->id, 0,0, width,height);
if (new_image_id!=-1)
{
gimp_display_new(new_image_id);
gimp_displays_flush();
gimp_drawable_detach(output_drawable);
}
}

View File

@ -0,0 +1,18 @@
#ifndef LIGHTINGAPPLYH
#define LIGHTINGAPPLYH
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
#include <gck/gck.h>
#include "lighting_main.h"
#include "lighting_image.h"
extern void init_compute (void);
extern void compute_image (void);
#endif

View File

@ -0,0 +1,342 @@
/*************************************/
/* GIMP image manipulation routines. */
/*************************************/
#include "lighting_image.h"
GDrawable *input_drawable,*output_drawable;
GPixelRgn source_region, dest_region;
GDrawable *bump_drawable = NULL;
GPixelRgn bump_region;
GDrawable *env_drawable = NULL;
GPixelRgn env_region;
guchar *preview_rgb_data = NULL;
GdkImage *image = NULL;
glong maxcounter;
gint imgtype,width,height,env_width,env_height,in_channels,out_channels;
GckRGB background;
gint border_x1,border_y1,border_x2,border_y2;
guchar sinemap[256],spheremap[256],logmap[256];
/******************/
/* Implementation */
/******************/
guchar peek_map(GPixelRgn *region,gint x,gint y)
{
guchar data;
gimp_pixel_rgn_get_pixel(region,&data,x,y);
return(data);
}
GckRGB peek(gint x,gint y)
{
guchar data[4];
GckRGB color;
gimp_pixel_rgn_get_pixel(&source_region,data,x,y);
color.r=(gdouble)(data[0])/255.0;
color.g=(gdouble)(data[1])/255.0;
color.b=(gdouble)(data[2])/255.0;
if (input_drawable->bpp==4)
{
if (in_channels==4)
color.a=(gdouble)(data[3])/255.0;
else
color.a=1.0;
}
else
color.a=1.0;
return(color);
}
GckRGB peek_env_map(gint x,gint y)
{
guchar data[4];
GckRGB color;
if (x<0)
x=0;
else if (x>=env_width)
x=env_width-1;
if (y<0)
y=0;
else if (y>=env_height)
y=env_height-1;
gimp_pixel_rgn_get_pixel(&env_region,data,x,y);
color.r=(gdouble)(data[0])/255.0;
color.g=(gdouble)(data[1])/255.0;
color.b=(gdouble)(data[2])/255.0;
color.a=1.0;
return(color);
}
void poke(gint x,gint y,GckRGB *color)
{
static guchar data[4];
if (x<0)
x=0;
else if (x>=width)
x=width-1;
if (y<0)
y=0;
else if (y>=height)
y=height-1;
data[0]=(guchar)(color->r*255.0);
data[1]=(guchar)(color->g*255.0);
data[2]=(guchar)(color->b*255.0);
data[3]=(guchar)(color->a*255.0);
gimp_pixel_rgn_set_pixel(&dest_region,data,x,y);
}
gint check_bounds(gint x,gint y)
{
if (x<border_x1 || y<border_y1 || x>=border_x2 || y>=border_y2)
return(FALSE);
else
return(TRUE);
}
GckVector3 int_to_pos(gint x,gint y)
{
GckVector3 pos;
if (width>=height)
{
pos.x=(gdouble)x/(gdouble)width;
pos.y=(gdouble)y/(gdouble)width;
pos.y+=0.5*(1.0-(gdouble)height/(gdouble)width);
}
else
{
pos.x=(gdouble)x/(gdouble)height;
pos.y=(gdouble)y/(gdouble)height;
pos.x+=0.5*(1.0-(gdouble)width/(gdouble)height);
}
pos.z=0.0;
return(pos);
}
GckVector3 int_to_posf(gdouble x,gdouble y)
{
GckVector3 pos;
if (width>=height)
{
pos.x=x/(gdouble)width;
pos.y=y/(gdouble)width;
pos.y+=0.5*(1.0-(gdouble)height/(gdouble)width);
}
else
{
pos.x=x/(gdouble)height;
pos.y=y/(gdouble)height;
pos.x+=0.5*(1.0-(gdouble)width/(gdouble)height);
}
pos.z=0.0;
return(pos);
}
void pos_to_int(gdouble x,gdouble y,gint *scr_x,gint *scr_y)
{
if (width>=height)
{
y-=0.5*(1.0-(gdouble)height/(gdouble)width);
*scr_x=(gint)((x*(gdouble)width)+0.5);
*scr_y=(gint)((y*(gdouble)width)+0.5);
}
else
{
x-=0.5*(1.0-(gdouble)width/(gdouble)height);
*scr_x=(gint)((x*(gdouble)height)+0.5);
*scr_y=(gint)((y*(gdouble)height)+0.5);
}
}
void pos_to_float(gdouble x,gdouble y,gdouble *xf,gdouble *yf)
{
if (width>=height)
{
y-=0.5*(1.0-(gdouble)height/(gdouble)width);
*xf=x*(gdouble)width;
*yf=y*(gdouble)width;
}
else
{
x-=0.5*(1.0-(gdouble)width/(gdouble)height);
*xf=x*(gdouble)height;
*yf=y*(gdouble)height;
}
}
/**********************************************/
/* Compute the image color at pos (u,v) using */
/* Quartics bilinear interpolation stuff. */
/**********************************************/
GckRGB get_image_color(gdouble u,gdouble v,gint *inside)
{
gint x1, y1, x2, y2;
GckRGB p[4];
x1=(gint)(u+0.5);
y1=(gint)(v+0.5);
if (check_bounds(x1,y1)==FALSE)
{
*inside=FALSE;
return(background);
}
x2 = (x1 + 1);
y2 = (y1 + 1);
if (check_bounds(x2,y2)==FALSE)
{
*inside=TRUE;
return(peek(x1,y1));
}
*inside=TRUE;
p[0] = peek(x1, y1);
p[1] = peek(x2, y1);
p[2] = peek(x1, y2);
p[3] = peek(x2, y2);
return(gck_bilinear_rgba(u, v, p));
}
gdouble get_map_value(GPixelRgn *region, gdouble u,gdouble v, gint *inside)
{
gint x1, y1, x2, y2;
gdouble p[4];
x1=(gint)(u+0.5);
y1=(gint)(v+0.5);
x2 = (x1 + 1);
y2 = (y1 + 1);
if (check_bounds(x2,y2)==FALSE)
{
*inside=TRUE;
return((gdouble)peek_map(region, x1,y1));
}
*inside=TRUE;
p[0] = (gdouble)peek_map(region, x1, y1);
p[1] = (gdouble)peek_map(region, x2, y1);
p[2] = (gdouble)peek_map(region, x1, y2);
p[3] = (gdouble)peek_map(region, x2, y2);
return(gck_bilinear(u, v, p));
}
void compute_maps(void)
{
gint x;
gdouble val,c,d;
/* Compute Sine, Log ans Spherical transfer function maps */
/* ====================================================== */
c=1.0/255.0;
d=1.15*255.0;
for (x=0;x<256;x++)
{
sinemap[x]=(guchar)(255.0*(0.5*(sin((M_PI*c*(gdouble)x)-0.5*M_PI)+1.0)));
spheremap[x]=(guchar)(255.0*(sqrt(sin(M_PI*(gdouble)x/512.0))));
val=(d*exp(-1.0/(8.0*c*((gdouble)x+5.0))));
if (val>255.0)
val=255.0;
logmap[x]=(guchar)val;
}
}
/****************************************/
/* Allocate memory for temporary images */
/****************************************/
gint image_setup(GDrawable *drawable,gint interactive)
{
glong numbytes;
compute_maps();
/* Get some useful info on the input drawable */
/* ========================================== */
input_drawable=drawable;
output_drawable=drawable;
gimp_drawable_mask_bounds (drawable->id, &border_x1, &border_y1, &border_x2, &border_y2);
width=input_drawable->width;
height=input_drawable->height;
gimp_pixel_rgn_init (&source_region, input_drawable, 0, 0, width, height, FALSE, FALSE);
maxcounter=(glong)width*(glong)height;
/* Assume at least RGB */
/* =================== */
in_channels=3;
if (gimp_drawable_has_alpha(input_drawable->id)==TRUE)
in_channels++;
if (interactive==TRUE)
{
/* Allocate memory for temp. images */
/* ================================ */
image=gdk_image_new(GDK_IMAGE_FASTEST,appwin->visinfo->visual,PREVIEW_WIDTH,PREVIEW_HEIGHT);
if (image==NULL)
return(FALSE);
numbytes=(glong)PREVIEW_WIDTH*(glong)PREVIEW_HEIGHT*3;
preview_rgb_data=(guchar *)malloc((size_t)numbytes);
if (preview_rgb_data==NULL)
return(FALSE);
memset(preview_rgb_data,0,numbytes);
/* Convert from raw RGB to GdkImage */
/* ================================ */
gck_rgb_to_gdkimage(appwin->visinfo,preview_rgb_data,image,PREVIEW_WIDTH,PREVIEW_HEIGHT);
}
return(TRUE);
}

View File

@ -0,0 +1,49 @@
#ifndef LIGHTINGIMAGEH
#define LIGHTINGIMAGEH
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <glib.h>
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <gck/gck.h>
#include <libgimp/gimp.h>
#include "lighting_main.h"
extern GDrawable *input_drawable,*output_drawable;
extern GPixelRgn source_region, dest_region;
extern GDrawable *bump_drawable;
extern GPixelRgn bump_region;
extern GDrawable *env_drawable;
extern GPixelRgn env_region;
extern guchar *preview_rgb_data;
extern GdkImage *image;
extern glong maxcounter;
extern gint imgtype,width,height,env_width,env_height,in_channels,out_channels;
extern GckRGB background;
extern gint border_x1,border_y1,border_x2,border_y2;
extern guchar sinemap[256],spheremap[256],logmap[256];
guchar peek_map (GPixelRgn *region,gint x,gint y);
GckRGB peek (gint x,gint y);
GckRGB peek_env_map (gint x,gint y);
void poke (gint x,gint y,GckRGB *color);
gint check_bounds (gint x,gint y);
GckVector3 int_to_pos (gint x,gint y);
GckVector3 int_to_posf (gdouble x,gdouble y);
extern void pos_to_int (gdouble x,gdouble y,gint *scr_x,gint *scr_y);
extern void pos_to_float (gdouble x,gdouble y,gdouble *xf,gdouble *yf);
extern GckRGB get_image_color (gdouble u,gdouble v,gint *inside);
extern gdouble get_map_value (GPixelRgn *region, gdouble u,gdouble v, gint *inside);
extern gint image_setup (GDrawable *drawable,gint interactive);
#endif

View File

@ -0,0 +1,333 @@
/*********************************************************************************/
/* Lighting Effects 0.2.2 -- image filter plug-in for The Gimp program */
/* Copyright (C) 1996-98 Tom Bech */
/* Copyright (C) 1996-98 Federico Mena Quintero */
/*===============================================================================*/
/* E-mail: tomb@gimp.org (Tom) or quartic@gimp.org (Federico) */
/* You can contact the original The Gimp authors at gimp@xcf.berkeley.edu */
/*===============================================================================*/
/* This program is free software; you can redistribute it and/or modify it under */
/* the terms of the GNU General Public License as published by the Free Software */
/* Foundation; either version 2 of the License, or (at your option) any later */
/* version. */
/*===============================================================================*/
/* This program is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS */
/* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.*/
/*===============================================================================*/
/* You should have received a copy of the GNU General Public License along with */
/* this program (read the "COPYING" file); if not, write to the Free Software */
/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/*===============================================================================*/
/* In other words, you can't sue us for whatever happens while using this ;) */
/*********************************************************************************/
#include "lighting_main.h"
/* Global variables */
/* ================ */
LightingValues mapvals;
/******************/
/* Implementation */
/******************/
void lighting_interactive (GDrawable *drawable);
void lighting_noninteractive (GDrawable *drawable);
/*************************************/
/* Set parameters to standard values */
/*************************************/
void set_default_settings(void)
{
gck_vector3_set(&mapvals.viewpoint, 0.5, 0.5, 0.25);
gck_vector3_set(&mapvals.planenormal, 0.0, 0.0, 1.0);
gck_vector3_set(&mapvals.lightsource.position, 1.0, 0.0, 1.0);
gck_vector3_set(&mapvals.lightsource.direction, -1.0, -1.0, 1.0);
gck_rgb_set(&mapvals.lightsource.color, 1.0, 1.0, 1.0);
mapvals.lightsource.intensity = 1.0;
mapvals.lightsource.type = POINT_LIGHT;
mapvals.material.ambient_int = 0.3;
mapvals.material.diffuse_int = 1.0;
mapvals.material.diffuse_ref = 0.4;
mapvals.material.specular_ref = 0.6;
mapvals.material.highlight = 27.0;
mapvals.pixel_treshold = 0.25;
mapvals.max_depth = 3.0;
mapvals.preview_zoom_factor = 1.0;
/* mapvals.bumptype=0; */
mapvals.bumpmaptype=0;
mapvals.bumpmin=0.0;
mapvals.bumpmax=0.1;
mapvals.antialiasing = FALSE;
mapvals.create_new_image = FALSE;
mapvals.transparent_background = FALSE;
mapvals.tooltips_enabled = FALSE;
mapvals.bump_mapped=FALSE;
mapvals.env_mapped=FALSE;
mapvals.ref_mapped=FALSE;
mapvals.previewquality=FALSE;
mapvals.bumpmap_id=-1;
mapvals.envmap_id=-1;
}
void check_drawables(void)
{
/* Check that envmap_id and bumpmap_id references legal images (are valid drawables) */
/* ================================================================================= */
if (mapvals.bumpmap_id!=-1 && gimp_drawable_image_id(mapvals.bumpmap_id)==-1)
{
mapvals.bump_mapped=FALSE;
mapvals.bumpmap_id=-1;
}
if (mapvals.envmap_id!=-1 && gimp_drawable_image_id(mapvals.envmap_id)==-1)
{
mapvals.env_mapped=FALSE;
mapvals.envmap_id=-1;
}
if (mapvals.bump_mapped)
{
/* Check if bump-map is grayscale and of the same size as the input drawable */
/* ========================================================================= */
if (!gimp_drawable_gray(mapvals.bumpmap_id) ||
gimp_drawable_width(mapvals.drawable_id)!=gimp_drawable_width(mapvals.bumpmap_id) ||
gimp_drawable_height(mapvals.drawable_id)!=gimp_drawable_height(mapvals.bumpmap_id))
{
/* If not then we silently disable bump mapping */
/* ============================================ */
mapvals.bump_mapped=FALSE;
mapvals.bumpmap_id=-1;
}
}
if (mapvals.env_mapped)
{
/* Check if env-map is grayscale or has alpha */
/* ========================================== */
if (gimp_drawable_gray(mapvals.envmap_id) ||
gimp_drawable_has_alpha(mapvals.envmap_id))
{
/* If it has then we silently disable env mapping */
/* ============================================== */
mapvals.bump_mapped=FALSE;
mapvals.bumpmap_id=-1;
}
}
}
MAIN();
static void query(void)
{
static GParamDef args[] =
{
{ PARAM_INT32, "run_mode", "Interactive (0), non-interactive (1)" },
{ PARAM_IMAGE, "image", "Input image" },
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
{ PARAM_DRAWABLE, "bumpdrawable", "Bumpmap drawable (set to 0 if disabled)" },
{ PARAM_DRAWABLE, "envdrawable", "Environmentmap drawable (set to 0 if disabled)" },
{ PARAM_INT32, "dobumpmap", "Enable bumpmapping (TRUE/FALSE)" },
{ PARAM_INT32, "doenvmap", "Enable envmapping (TRUE/FALSE)" },
{ PARAM_INT32, "bumpmaptype", "Type of mapping (0=linear,1=log, 2=sinusoidal, 3=spherical)" },
{ PARAM_INT32, "lighttype", "Type of lightsource (0=point,1=directional,3=spot,4=none)" },
{ PARAM_COLOR, "lightcolor", "Lightsource color (r,g,b)" },
{ PARAM_FLOAT, "lightposition_x", "Lightsource position (x,y,z)" },
{ PARAM_FLOAT, "lightposition_y", "Lightsource position (x,y,z)" },
{ PARAM_FLOAT, "lightposition_z", "Lightsource position (x,y,z)" },
{ PARAM_FLOAT, "lightdirection_x", "Lightsource direction [x,y,z]" },
{ PARAM_FLOAT, "lightdirection_y", "Lightsource direction [x,y,z]" },
{ PARAM_FLOAT, "lightdirection_z", "Lightsource direction [x,y,z]" },
{ PARAM_FLOAT, "ambient_intensity", "Material ambient intensity (0..1)" },
{ PARAM_FLOAT, "diffuse_intensity", "Material diffuse intensity (0..1)" },
{ PARAM_FLOAT, "diffuse_reflectivity", "Material diffuse reflectivity (0..1)" },
{ PARAM_FLOAT, "specular_reflectivity", "Material specular reflectivity (0..1)" },
{ PARAM_FLOAT, "highlight", "Material highlight (0..->), note: it's expotential" },
{ PARAM_INT32, "antialiasing", "Apply antialiasing (TRUE/FALSE)" },
{ PARAM_INT32, "newimage", "Create a new image (TRUE/FALSE)" },
{ PARAM_INT32, "transparentbackground", "Make background transparent (TRUE/FALSE)" }
};
static GParamDef *return_vals = NULL;
static gint nargs = sizeof (args) / sizeof (args[0]);
static gint nreturn_vals = 0;
gimp_install_procedure ("plug_in_lighting",
"Apply various lighting effects to an image",
"No help yet",
"Tom Bech & Federico Mena Quintero",
"Tom Bech & Federico Mena Quintero",
"Version 0.2.0, March 15 1998",
"<Image>/Filters/Light Effects/Lighting Effects",
"RGB*",
PROC_PLUG_IN,
nargs, nreturn_vals,
args, return_vals);
}
static void run(gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
GDrawable *drawable;
GRunModeType run_mode;
GStatusType status = STATUS_SUCCESS;
run_mode = param[0].data.d_int32;
*nreturn_vals = 1;
*return_vals = values;
values[0].type = PARAM_STATUS;
values[0].data.d_status = status;
/* Set default values */
/* ================== */
set_default_settings();
/* Possibly retrieve data */
/* ====================== */
gimp_get_data ("plug_in_lighting", &mapvals);
/* Get the specified drawable */
/* ========================== */
drawable = gimp_drawable_get (param[2].data.d_drawable);
mapvals.drawable_id=drawable->id;
check_drawables();
if (status == STATUS_SUCCESS)
{
/* Make sure that the drawable is RGBA or RGB color */
/* ================================================ */
if (gimp_drawable_color(drawable->id))
{
/* Set the tile cache size */
/* ======================= */
gimp_tile_cache_ntiles(TILE_CACHE_SIZE);
switch (run_mode)
{
case RUN_INTERACTIVE:
lighting_interactive(drawable);
gimp_set_data("plug_in_lighting", &mapvals, sizeof(LightingValues));
break;
case RUN_WITH_LAST_VALS:
image_setup(drawable,FALSE);
compute_image();
break;
case RUN_NONINTERACTIVE:
if (nparams != 24)
status = STATUS_CALLING_ERROR;
else if (status == STATUS_SUCCESS)
{
mapvals.bumpmap_id = param[3].data.d_drawable;
mapvals.envmap_id = param[4].data.d_drawable;
mapvals.bump_mapped = (gint)param[5].data.d_int32;
mapvals.env_mapped = (gint)param[6].data.d_int32;
mapvals.bumpmaptype = (gint)param[7].data.d_int32;
mapvals.lightsource.type = (LightType)param[8].data.d_int32;
mapvals.lightsource.color.r = param[9].data.d_color.red;
mapvals.lightsource.color.g = param[9].data.d_color.green;
mapvals.lightsource.color.b = param[9].data.d_color.blue;
mapvals.lightsource.position.x = param[10].data.d_float;
mapvals.lightsource.position.y = param[11].data.d_float;
mapvals.lightsource.position.z = param[12].data.d_float;
mapvals.lightsource.direction.x = param[13].data.d_float;
mapvals.lightsource.direction.y = param[14].data.d_float;
mapvals.lightsource.direction.z = param[15].data.d_float;
mapvals.material.ambient_int = param[16].data.d_float;
mapvals.material.diffuse_int = param[17].data.d_float;
mapvals.material.diffuse_ref = param[18].data.d_float;
mapvals.material.specular_ref = param[19].data.d_float;
mapvals.material.highlight = param[20].data.d_float;
mapvals.antialiasing = (gint)param[21].data.d_int32;
mapvals.create_new_image = (gint)param[22].data.d_int32;
mapvals.transparent_background = (gint)param[23].data.d_int32;
check_drawables();
image_setup(drawable, FALSE);
compute_image();
}
default:
break;
}
}
else
status = STATUS_EXECUTION_ERROR;
}
values[0].data.d_status = status;
gimp_drawable_detach (drawable);
}
GPlugInInfo PLUG_IN_INFO =
{
NULL, /* init_proc */
NULL, /* quit_proc */
query, /* query_proc */
run, /* run_proc */
};
void lighting_interactive(GDrawable *drawable)
{
gchar **argv;
gint argc;
argc = 1;
argv = g_new (gchar *, 1);
argv[0] = g_strdup ("lighting");
gdk_set_show_events(0);
gdk_set_use_xshm(gimp_use_xshm());
gtk_init (&argc, &argv);
gtk_rc_parse (gimp_gtkrc ());
/* Create application window */
/* ========================= */
create_main_dialog();
/* Prepare images */
/* ============== */
image_setup(drawable,TRUE);
/* Gtk main event loop */
/* =================== */
gtk_main();
gdk_flush();
}
void lighting_noninteractive(GDrawable *drawable)
{
printf("Noninteractive not yet implemented! Sorry.\n");
}

View File

@ -0,0 +1,106 @@
#ifndef LIGHTINGMAINH
#define LIGHTINGMAINH
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <gck/gck.h>
#include <libgimp/gimp.h>
#include "lighting_ui.h"
#include "lighting_image.h"
#include "lighting_apply.h"
#include "lighting_preview.h"
/* Defines and stuff */
/* ================= */
#define TILE_CACHE_SIZE 16
/* Typedefs */
/* ======== */
typedef enum {
POINT_LIGHT,
DIRECTIONAL_LIGHT,
SPOT_LIGHT,
NO_LIGHT
} LightType;
enum {
IMAGE_BUMP,
WAVES_BUMP
};
typedef struct
{
gdouble ambient_int;
gdouble diffuse_int;
gdouble diffuse_ref;
gdouble specular_ref;
gdouble highlight;
GckRGB color;
} MaterialSettings;
typedef struct
{
LightType type;
GckVector3 position;
GckVector3 direction;
GckRGB color;
gdouble intensity;
} LightSettings;
typedef struct {
gint32 drawable_id;
gint32 bumpmap_id;
gint32 envmap_id;
/* Render variables */
/* ================ */
GckVector3 viewpoint;
GckVector3 planenormal;
LightSettings lightsource;
MaterialSettings material;
MaterialSettings ref_material;
gdouble pixel_treshold;
gdouble bumpmax,bumpmin;
/* gdouble wave_cx,wave_cy;
gdouble wave_lx,wave_ly;
gdouble wave_amp,wave_ph; */
gint max_depth;
gint bumpmaptype;
/* gint bumptype; */
/* Flags */
/* ===== */
gint antialiasing;
gint create_new_image;
gint transparent_background;
gint tooltips_enabled;
gint bump_mapped;
gint env_mapped;
gint ref_mapped;
gint bumpstretch;
gint previewquality;
/* Misc */
/* ==== */
gdouble preview_zoom_factor;
} LightingValues;
/* Externally visible variables */
/* ============================ */
extern LightingValues mapvals;
extern GckRGB background;
#endif

View File

@ -0,0 +1,26 @@
#ifndef LIGHTINGPIXMAPSH
#define LIGHTINGPIXMAPSH
#include "amb1.xpm"
#include "amb2.xpm"
#include "diffint1.xpm"
#include "diffint2.xpm"
#include "diffref1.xpm"
#include "diffref2.xpm"
#include "specref1.xpm"
#include "specref2.xpm"
#include "high1.xpm"
#include "high2.xpm"
extern char *amb1_xpm[];
extern char *amb2_xpm[];
extern char *diffint1_xpm[];
extern char *diffint2_xpm[];
extern char *diffref1_xpm[];
extern char *diffref2_xpm[];
extern char *specref1_xpm[];
extern char *specref2_xpm[];
extern char *high1_xpm[];
extern char *high2_xpm[];
#endif

View File

@ -0,0 +1,404 @@
/*************************************************/
/* Compute a preview image and preview wireframe */
/*************************************************/
#include "lighting_preview.h"
gint lightx,lighty;
BackBuffer backbuf={0,0,0,0,NULL};
gdouble *xpostab=NULL,*ypostab=NULL;
/* Protos */
/* ====== */
void draw_preview_image (gint recompute);
void update_light (gint xpos,gint ypos);
void draw_light_marker (gint xpos,gint ypos);
void clear_light_marker (void);
void compute_preview (gint startx,gint starty,gint w,gint h)
{
gint xcnt,ycnt,f1,f2;
gdouble imagex,imagey;
gint32 index=0;
GckRGB color,darkcheck,lightcheck,temp;
GckVector3 pos;
get_ray_func ray_func;
xpostab = (gdouble *)malloc(sizeof(gdouble)*w);
ypostab = (gdouble *)malloc(sizeof(gdouble)*h);
for (xcnt=0;xcnt<w;xcnt++)
xpostab[xcnt]=(gdouble)width*((gdouble)xcnt/(gdouble)w);
for (ycnt=0;ycnt<h;ycnt++)
ypostab[ycnt]=(gdouble)height*((gdouble)ycnt/(gdouble)h);
init_compute();
precompute_init(width,height);
gck_rgb_set(&lightcheck,0.75,0.75,0.75);
gck_rgb_set(&darkcheck, 0.50,0.50,0.50);
gck_rgb_set(&color,0.3,0.7,1.0);
if (mapvals.bump_mapped==TRUE && mapvals.bumpmap_id!=-1)
{
gimp_pixel_rgn_init (&bump_region, gimp_drawable_get(mapvals.bumpmap_id),
0, 0, width, height, FALSE, FALSE);
}
imagey=0;
if (mapvals.previewquality)
ray_func = get_ray_color;
else
ray_func = get_ray_color_no_bilinear;
if (mapvals.env_mapped==TRUE && mapvals.envmap_id!=-1)
{
env_width = gimp_drawable_width(mapvals.envmap_id);
env_height = gimp_drawable_height(mapvals.envmap_id);
gimp_pixel_rgn_init (&env_region, gimp_drawable_get(mapvals.envmap_id),
0, 0, env_width, env_height, FALSE, FALSE);
if (mapvals.previewquality)
ray_func = get_ray_color_ref;
else
ray_func = get_ray_color_no_bilinear_ref;
}
for (ycnt=0;ycnt<PREVIEW_HEIGHT;ycnt++)
{
for (xcnt=0;xcnt<PREVIEW_WIDTH;xcnt++)
{
if ((ycnt>=starty && ycnt<(starty+h)) &&
(xcnt>=startx && xcnt<(startx+w)))
{
imagex=xpostab[xcnt-startx];
imagey=ypostab[ycnt-starty];
pos=int_to_posf(imagex,imagey);
if (mapvals.bump_mapped==TRUE && mapvals.bumpmap_id!=-1 && xcnt==startx)
{
pos_to_float(pos.x,pos.y,&imagex,&imagey);
precompute_normals(0,width,(gint)(imagey+0.5));
}
color=(*ray_func)(&pos);
if (color.a<1.0)
{
f1=((xcnt % 32)<16);
f2=((ycnt % 32)<16);
f1=f1^f2;
if (f1)
{
if (color.a==0.0)
color=lightcheck;
else
{
gck_rgb_mul(&color,color.a);
temp=lightcheck;
gck_rgb_mul(&temp,1.0-color.a);
gck_rgb_add(&color,&temp);
}
}
else
{
if (color.a==0.0)
color=darkcheck;
else
{
gck_rgb_mul(&color,color.a);
temp=darkcheck;
gck_rgb_mul(&temp,1.0-color.a);
gck_rgb_add(&color,&temp);
}
}
}
preview_rgb_data[index++]=(guchar)(255.0*color.r);
preview_rgb_data[index++]=(guchar)(255.0*color.g);
preview_rgb_data[index++]=(guchar)(255.0*color.b);
imagex++;
}
else
{
preview_rgb_data[index++]=200;
preview_rgb_data[index++]=200;
preview_rgb_data[index++]=200;
}
}
}
gck_rgb_to_gdkimage(appwin->visinfo, preview_rgb_data, image, PREVIEW_WIDTH, PREVIEW_HEIGHT);
}
void blah()
{
/* First, compute the linear mapping (x,y,x+w,y+h) to (0,0,pw,ph) */
/* ============================================================== */
/* realw=(p2.x-p1.x);
realh=(p2.y-p1.y);
for (xcnt=0;xcnt<pw;xcnt++)
xpostab[xcnt]=p1.x+realw*((double)xcnt/(double)pw);
for (ycnt=0;ycnt<ph;ycnt++)
ypostab[ycnt]=p1.y+realh*((double)ycnt/(double)ph); */
/* Compute preview using the offset tables */
/* ======================================= */
/* if (mapvals.transparent_background==TRUE)
gck_rgba_set(&background,0.0,0.0,0.0,0.0);
else
{
gimp_palette_get_background(&r,&g,&b);
background.r=(gdouble)r/255.0;
background.g=(gdouble)g/255.0;
background.b=(gdouble)b/255.0;
background.a=1.0;
}
gck_rgb_set(&lightcheck,0.75,0.75,0.75);
gck_rgb_set(&darkcheck, 0.50,0.50,0.50);
gck_vector3_set(&p2,-1.0,-1.0,0.0);
for (ycnt=0;ycnt<ph;ycnt++)
{
for (xcnt=0;xcnt<pw;xcnt++)
{
p1.x=xpostab[xcnt];
p1.y=ypostab[ycnt]; */
/* If oldpos = newpos => same color, so skip shading */
/* ================================================= */
/* p2=p1;
color=get_ray_color(&p1);
if (color.a<1.0)
{
f1=((xcnt % 32)<16);
f2=((ycnt % 32)<16);
f1=f1^f2;
if (f1)
{
if (color.a==0.0)
color=lightcheck;
else
{
gck_rgb_mul(&color,color.a);
temp=lightcheck;
gck_rgb_mul(&temp,1.0-color.a);
gck_rgb_add(&color,&temp);
}
}
else
{
if (color.a==0.0)
color=darkcheck;
else
{
gck_rgb_mul(&color,color.a);
temp=darkcheck;
gck_rgb_mul(&temp,1.0-color.a);
gck_rgb_add(&color,&temp);
}
}
}
preview_rgb_data[index++]=(guchar)(color.r*255.0);
preview_rgb_data[index++]=(guchar)(color.g*255.0);
preview_rgb_data[index++]=(guchar)(color.b*255.0);
}
} */
/* Convert to visual type */
/* ====================== */
/* gck_rgb_to_gdkimage(appwin->visinfo,preview_rgb_data,image,pw,ph); */
}
/*************************************************/
/* Check if the given position is within the */
/* light marker. Return TRUE if so, FALSE if not */
/*************************************************/
gint check_light_hit(gint xpos,gint ypos)
{
/* gdouble dx,dy,r;
if (mapvals.lightsource.type==POINT_LIGHT)
{
dx=(gdouble)lightx-xpos;
dy=(gdouble)lighty-ypos;
r=sqrt(dx*dx+dy*dy)+0.5;
if ((gint)r>7)
return(FALSE);
else
return(TRUE);
}
*/
return(FALSE);
}
/****************************************/
/* Draw a marker to show light position */
/****************************************/
void draw_light_marker(gint xpos,gint ypos)
{
/* gck_gc_set_foreground(appwin->visinfo,gc,0,50,255);
gck_gc_set_background(appwin->visinfo,gc,0,0,0);
gdk_gc_set_function(gc,GDK_COPY);
if (mapvals.lightsource.type==POINT_LIGHT)
{
lightx=xpos;
lighty=ypos; */
/* Save background */
/* =============== */
/* backbuf.x=lightx-7;
backbuf.y=lighty-7;
backbuf.w=14;
backbuf.h=14; */
/* X doesn't like images that's outside a window, make sure */
/* we get the backbuffer image from within the boundaries */
/* ======================================================== */
/* if (backbuf.x<0)
backbuf.x=0;
else if ((backbuf.x+backbuf.w)>PREVIEW_WIDTH)
backbuf.w=(PREVIEW_WIDTH-backbuf.x);
if (backbuf.y<0)
backbuf.y=0;
else if ((backbuf.y+backbuf.h)>PREVIEW_HEIGHT)
backbuf.h=(PREVIEW_WIDTH-backbuf.y);
backbuf.image=gdk_image_get(previewarea->window,backbuf.x,backbuf.y,backbuf.w,backbuf.h);
gdk_draw_arc(previewarea->window,gc,TRUE,lightx-7,lighty-7,14,14,0,360*64);
} */
}
void clear_light_marker(void)
{
/* Restore background if it has been saved */
/* ======================================= */
/* if (backbuf.image!=NULL)
{
gck_gc_set_foreground(appwin->visinfo,gc,255,255,255);
gck_gc_set_background(appwin->visinfo,gc,0,0,0);
gdk_gc_set_function(gc,GDK_COPY);
gdk_draw_image(previewarea->window,gc,backbuf.image,0,0,backbuf.x,backbuf.y,
backbuf.w,backbuf.h);
gdk_image_destroy(backbuf.image);
backbuf.image=NULL;
} */
}
void draw_lights(void)
{
/* gdouble dxpos,dypos;
gint xpos,ypos;
clear_light_marker();
gck_3d_to_2d(startx,starty,pw,ph,&dxpos,&dypos,&mapvals.viewpoint,
&mapvals.lightsource.position);
xpos=(gint)(dxpos+0.5);
ypos=(gint)(dypos+0.5);
if (xpos>=0 && xpos<=PREVIEW_WIDTH && ypos>=0 && ypos<=PREVIEW_HEIGHT)
draw_light_marker(xpos,ypos); */
}
/*************************************************/
/* Update light position given new screen coords */
/*************************************************/
void update_light(gint xpos,gint ypos)
{
/* gint startx,starty,pw,ph;
pw=PREVIEW_WIDTH >> mapvals.preview_zoom_factor;
ph=PREVIEW_HEIGHT >> mapvals.preview_zoom_factor;
startx=(PREVIEW_WIDTH-pw)>>1;
starty=(PREVIEW_HEIGHT-ph)>>1;
gck_2d_to_3d(startx,starty,pw,ph,xpos,ypos,&mapvals.viewpoint,
&mapvals.lightsource.position);
draw_lights(startx,starty,pw,ph); */
}
void compute_preview_rectangle(gint *xp,gint *yp,gint *wid,gint *heig)
{
gdouble x,y,w,h;
if (width>=height)
{
w=(PREVIEW_WIDTH-50.0);
h=(gdouble)height*(w/(gdouble)width);
x=(PREVIEW_WIDTH-w)/2.0;
y=(PREVIEW_HEIGHT-h)/2.0;
}
else
{
h=(PREVIEW_HEIGHT-50.0);
w=(gdouble)width*(h/(gdouble)height);
x=(PREVIEW_WIDTH-w)/2.0;
y=(PREVIEW_HEIGHT-h)/2.0;
}
*xp=(gint)(x+0.5);
*yp=(gint)(y+0.5);
*wid=(gint)(w+0.5);
*heig=(gint)(h+0.5);
}
/******************************************************************/
/* Draw preview image. if DoCompute is TRUE then recompute image. */
/******************************************************************/
void draw_preview_image(gint recompute)
{
gint startx,starty,pw,ph;
gck_gc_set_foreground(appwin->visinfo,gc,255,255,255);
gck_gc_set_background(appwin->visinfo,gc,0,0,0);
gdk_gc_set_function(gc,GDK_COPY);
compute_preview_rectangle(&startx,&starty,&pw,&ph);
if (recompute==TRUE)
{
gck_cursor_set(previewarea->window,GDK_WATCH);
compute_preview(startx,starty,pw,ph);
gck_cursor_set(previewarea->window,GDK_HAND2);
clear_light_marker();
}
/* if (pw!=PREVIEW_WIDTH)
gdk_window_clear(previewarea->window); */
gdk_draw_image(previewarea->window,gc,image,0,0,0,0,PREVIEW_WIDTH,PREVIEW_HEIGHT);
/* draw_lights(); */
}

View File

@ -0,0 +1,41 @@
#ifndef LIGHTINGPREVIEWH
#define LIGHTINGPREVIEWH
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <gck/gck.h>
#include <libgimp/gimp.h>
#include "lighting_main.h"
#include "lighting_ui.h"
#include "lighting_image.h"
#include "lighting_apply.h"
#include "lighting_shade.h"
#define PREVIEW_WIDTH 300
#define PREVIEW_HEIGHT 300
typedef struct
{
gint x,y,w,h;
GdkImage *image;
} BackBuffer;
/* Externally visible variables */
/* ============================ */
extern gint lightx,lighty;
extern BackBuffer backbuf;
extern gdouble *xpostab,*ypostab;
/* Externally visible functions */
/* ============================ */
extern void draw_preview_image (gint recompute);
extern gint check_light_hit (gint xpos,gint ypos);
extern void update_light (gint xpos,gint ypos);
#endif

View File

@ -0,0 +1,634 @@
/*****************/
/* Shading stuff */
/*****************/
#include "lighting_shade.h"
GckVector3 *triangle_normals[2] = { NULL, NULL };
GckVector3 *vertex_normals[3] = { NULL, NULL, NULL };
gdouble *heights[3] = { NULL, NULL, NULL };
gdouble xstep,ystep;
guchar *bumprow=NULL;
gint pre_w=-1;
gint pre_h=-1;
/*****************/
/* Phong shading */
/*****************/
GckRGB phong_shade(GckVector3 *position,GckVector3 *viewpoint,
GckVector3 *normal,GckVector3 *lightposition,
GckRGB *diff_col,GckRGB *spec_col,
LightType light_type)
{
GckRGB ambient_color,diffuse_color,specular_color;
gdouble nl,rv,dist;
GckVector3 l,nn,v,n;
/* Compute ambient intensity */
/* ========================= */
n=*normal;
ambient_color=*diff_col;
gck_rgb_mul(&ambient_color,mapvals.material.ambient_int);
/* Compute (N*L) term of Phong's equation */
/* ====================================== */
if (light_type==POINT_LIGHT)
gck_vector3_sub(&l,lightposition,position);
else
l=*lightposition;
dist=gck_vector3_length(&l);
if (dist!=0.0)
gck_vector3_mul(&l,1.0/dist);
nl=2.0*gck_vector3_inner_product(&n,&l);
if (nl>=0.0)
{
/* Compute (R*V)^alpha term of Phong's equation */
/* ============================================ */
gck_vector3_sub(&v,viewpoint,position);
gck_vector3_normalize(&v);
gck_vector3_mul(&n,nl);
gck_vector3_sub(&nn,&n,&l);
rv=gck_vector3_inner_product(&nn,&v);
rv=pow(rv,mapvals.material.highlight);
/* Compute diffuse and specular intensity contribution */
/* =================================================== */
diffuse_color=*diff_col;
gck_rgb_mul(&diffuse_color,mapvals.material.diffuse_ref);
gck_rgb_mul(&diffuse_color,nl);
specular_color=*spec_col;
gck_rgb_mul(&specular_color,mapvals.material.specular_ref);
gck_rgb_mul(&specular_color,rv);
gck_rgb_add(&diffuse_color,&specular_color);
gck_rgb_mul(&diffuse_color,mapvals.material.diffuse_int);
gck_rgb_clamp(&diffuse_color);
gck_rgb_add(&ambient_color,&diffuse_color);
}
gck_rgb_clamp(&ambient_color);
return(ambient_color);
}
void get_normal(gdouble xf,gdouble yf,GckVector3 *normal)
{
GckVector3 v1,v2,n;
gint numvecs=0,x,y,f;
gdouble val,val1=-1.0,val2=-1.0,val3=-1.0,val4=-1.0, xstep,ystep;
x=(gint)(xf+0.5);
y=(gint)(yf+0.5);
xstep=1.0/(gdouble)width;
ystep=1.0/(gdouble)height;
val=mapvals.bumpmax*get_map_value(&bump_region, xf,yf, &f)/255.0;
if (check_bounds(x-1,y)) val1=mapvals.bumpmax*get_map_value(&bump_region, xf-1.0,yf, &f)/255.0 - val;
if (check_bounds(x,y-1)) val2=mapvals.bumpmax*get_map_value(&bump_region, xf,yf-1.0, &f)/255.0 - val;
if (check_bounds(x+1,y)) val3=mapvals.bumpmax*get_map_value(&bump_region, xf+1.0,yf, &f)/255.0 - val;
if (check_bounds(x,y+1)) val4=mapvals.bumpmax*get_map_value(&bump_region, xf,yf+1.0, &f)/255.0 - val;
gck_vector3_set(normal, 0.0,0.0,0.0);
if (val1!=-1.0 && val4!=-1.0)
{
v1.x=-xstep; v1.y=0.0; v1.z=val1;
v2.x=0.0; v2.y=ystep; v2.z=val4;
n=gck_vector3_cross_product(&v1,&v2);
gck_vector3_normalize(&n);
if (n.z<0.0)
n.z=-n.z;
gck_vector3_add(normal,normal,&n);
numvecs++;
}
if (val1!=-1.0 && val2!=-1.0)
{
v1.x=-xstep; v1.y=0.0; v1.z=val1;
v2.x=0.0; v2.y=-ystep; v2.z=val2;
n=gck_vector3_cross_product(&v1,&v2);
gck_vector3_normalize(&n);
if (n.z<0.0)
n.z=-n.z;
gck_vector3_add(normal,normal,&n);
numvecs++;
}
if (val2!=-1.0 && val3!=-1.0)
{
v1.x=0.0; v1.y=-ystep; v1.z=val2;
v2.x=xstep; v2.y=0.0; v2.z=val3;
n=gck_vector3_cross_product(&v1,&v2);
gck_vector3_normalize(&n);
if (n.z<0.0)
n.z=-n.z;
gck_vector3_add(normal,normal,&n);
numvecs++;
}
if (val3!=-1.0 && val4!=-1.0)
{
v1.x=xstep; v1.y=0.0; v1.z=val3;
v2.x=0.0; v2.y=ystep; v2.z=val4;
n=gck_vector3_cross_product(&v1,&v2);
gck_vector3_normalize(&n);
if (n.z<0.0)
n.z=-n.z;
gck_vector3_add(normal,normal,&n);
numvecs++;
}
gck_vector3_mul(normal,1.0/(gdouble)numvecs);
gck_vector3_normalize(normal);
}
void precompute_init(gint w,gint h)
{
gint n;
xstep=1.0/(gdouble)width;
ystep=1.0/(gdouble)height;
pre_w=w;
pre_h=h;
for (n=0;n<3;n++)
{
if (vertex_normals[n]!=NULL)
free(vertex_normals[n]);
if (heights[n]!=NULL)
free(heights[n]);
heights[n]=(gdouble *)malloc(sizeof(gdouble)*(size_t)w);
vertex_normals[n]=(GckVector3 *)malloc(sizeof(GckVector3)*(size_t)w);
}
for (n=0;n<2;n++)
if (triangle_normals[n]!=NULL)
free(triangle_normals[n]);
if (bumprow!=NULL)
{
free(bumprow);
bumprow=NULL;
}
bumprow=(guchar *)malloc(sizeof(guchar)*(size_t)w);
triangle_normals[0]=(GckVector3 *)malloc(sizeof(GckVector3)*(size_t)((w<<1)+2));
triangle_normals[1]=(GckVector3 *)malloc(sizeof(GckVector3)*(size_t)((w<<1)+2));
for (n=0;n<(w<<1)+1;n++)
{
gck_vector3_set(&triangle_normals[0][n],0.0,0.0,1.0);
gck_vector3_set(&triangle_normals[1][n],0.0,0.0,1.0);
}
for (n=0;n<w;n++)
{
gck_vector3_set(&vertex_normals[0][n],0.0,0.0,1.0);
gck_vector3_set(&vertex_normals[1][n],0.0,0.0,1.0);
gck_vector3_set(&vertex_normals[2][n],0.0,0.0,1.0);
heights[0][n]=0.0;
heights[1][n]=0.0;
heights[2][n]=0.0;
}
}
/********************************************/
/* Compute triangle and then vertex normals */
/********************************************/
void precompute_normals(gint x1,gint x2,gint y)
{
GckVector3 *tmpv,p1,p2,p3,normal;
gdouble *tmpd;
gint n,i,nv;
guchar *map=NULL;
/* First, compute the heights */
/* ========================== */
tmpv=triangle_normals[0];
triangle_normals[0]=triangle_normals[1];
triangle_normals[1]=tmpv;
tmpv=vertex_normals[0];
vertex_normals[0]=vertex_normals[1];
vertex_normals[1]=vertex_normals[2];
vertex_normals[2]=tmpv;
tmpd=heights[0];
heights[0]=heights[1];
heights[1]=heights[2];
heights[2]=tmpd;
/* printf("Get row (%d,%d,%d) to %p\n",x1,y,x2-x1,bumprow); */
gimp_pixel_rgn_get_row(&bump_region,bumprow,x1,y,x2-x1);
if (mapvals.bumpmaptype>0)
{
switch (mapvals.bumpmaptype)
{
case 1:
map=logmap;
break;
case 2:
map=sinemap;
break;
default:
map=spheremap;
break;
}
for (n=0;n<(x2-x1);n++)
heights[2][n]=(gdouble)mapvals.bumpmax*(gdouble)map[bumprow[n]]/255.0;
}
else for (n=0;n<(x2-x1);n++)
heights[2][n]=(gdouble)mapvals.bumpmax*(gdouble)bumprow[n]/255.0;
/* Compute triangle normals */
/* ======================== */
i=0;
for (n=0;n<(x2-x1-1);n++)
{
p1.x=0.0;
p1.y=ystep;
p1.z=heights[2][n]-heights[1][n];
p2.x=xstep;
p2.y=ystep;
p2.z=heights[2][n+1]-heights[1][n];
p3.x=xstep;
p3.y=0.0;
p3.z=heights[1][n+1]-heights[1][n];
triangle_normals[1][i]=gck_vector3_cross_product(&p2,&p1);
triangle_normals[1][i+1]=gck_vector3_cross_product(&p3,&p2);
gck_vector3_normalize(&triangle_normals[1][i]);
gck_vector3_normalize(&triangle_normals[1][i+1]);
i+=2;
}
/* Compute vertex normals */
/* ====================== */
i=0;
gck_vector3_set(&normal, 0.0,0.0,0.0);
for (n=0;n<(x2-x1-1);n++)
{
nv=0;
if (n>0)
{
if (y>0)
{
gck_vector3_add(&normal, &normal, &triangle_normals[0][i-1]);
gck_vector3_add(&normal, &normal, &triangle_normals[0][i-2]);
nv+=2;
}
if (y<pre_h)
{
gck_vector3_add(&normal, &normal, &triangle_normals[1][i-1]);
nv++;
}
}
if (n<pre_w)
{
if (y>0)
{
gck_vector3_add(&normal, &normal, &triangle_normals[0][i]);
gck_vector3_add(&normal, &normal, &triangle_normals[0][i+1]);
nv+=2;
}
if (y<pre_h)
{
gck_vector3_add(&normal, &normal, &triangle_normals[1][i]);
gck_vector3_add(&normal, &normal, &triangle_normals[1][i+1]);
nv+=2;
}
}
gck_vector3_mul(&normal, 1.0/(gdouble)nv);
gck_vector3_normalize(&normal);
vertex_normals[1][n]=normal;
i+=2;
}
}
/***********************************************************************/
/* Compute the reflected ray given the normalized normal and ins. vec. */
/***********************************************************************/
GckVector3 compute_reflected_ray(GckVector3 *normal,GckVector3 *view)
{
GckVector3 ref;
gdouble nl;
nl = 2.0*gck_vector3_inner_product(normal,view);
ref = *normal;
gck_vector3_mul(&ref,nl);
gck_vector3_sub(&ref,&ref,view);
return(ref);
}
/************************************************************************/
/* Given the NorthPole, Equator and a third vector (normal) compute */
/* the conversion from spherical coordinates to image space coordinates */
/************************************************************************/
void sphere_to_image(GckVector3 *normal,gdouble *u,gdouble *v)
{
static gdouble alpha,fac;
static GckVector3 cross_prod;
static GckVector3 firstaxis = { 1.0, 0.0, 0.0 };
static GckVector3 secondaxis = { 0.0, 1.0, 0.0 };
alpha=acos(-gck_vector3_inner_product(&secondaxis,normal));
*v=alpha/M_PI;
if (*v==0.0 || *v==1.0) *u=0.0;
else
{
fac=gck_vector3_inner_product(&firstaxis,normal)/sin(alpha);
/* Make sure that we map to -1.0..1.0 (take care of rounding errors) */
/* ================================================================= */
if (fac>1.0)
fac=1.0;
else if (fac<-1.0)
fac=-1.0;
*u=acos(fac)/(2.0*M_PI);
cross_prod=gck_vector3_cross_product(&secondaxis,&firstaxis);
if (gck_vector3_inner_product(&cross_prod,normal)<0.0)
*u=1.0-*u;
}
}
/*********************************************************************/
/* These routines computes the color of the surface at a given point */
/*********************************************************************/
GckRGB get_ray_color(GckVector3 *position)
{
GckRGB color;
gint x,f;
gdouble xf,yf;
GckVector3 normal,*p;
pos_to_float(position->x,position->y,&xf,&yf);
x = (gint)(xf+0.5);
if (mapvals.transparent_background && heights[1][x]==0)
color.a=0.0;
else
{
color=get_image_color(xf,yf,&f);
if (mapvals.lightsource.type==POINT_LIGHT)
p=&mapvals.lightsource.position;
else
p=&mapvals.lightsource.direction;
if (mapvals.bump_mapped==FALSE || mapvals.bumpmap_id==-1)
color=phong_shade(position,
&mapvals.viewpoint,
&mapvals.planenormal,
p,
&color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
else
{
normal=vertex_normals[1][(gint)(xf+0.5)];
color=phong_shade(position,
&mapvals.viewpoint,
&normal,
p,
&color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
}
}
return(color);
}
GckRGB get_ray_color_ref(GckVector3 *position)
{
GckRGB color,env_color;
gint x,f;
gdouble xf,yf;
GckVector3 normal,*p,v,r;
pos_to_float(position->x,position->y,&xf,&yf);
x = (gint)(xf+0.5);
if (mapvals.transparent_background && heights[1][x]==0)
color.a=0.0;
else
{
color=get_image_color(xf,yf,&f);
if (mapvals.lightsource.type==POINT_LIGHT)
p=&mapvals.lightsource.position;
else
p=&mapvals.lightsource.direction;
if (mapvals.bump_mapped==FALSE || mapvals.bumpmap_id==-1)
color=phong_shade(position,
&mapvals.viewpoint,
&mapvals.planenormal,
p,
&color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
else
{
normal=vertex_normals[1][(gint)(xf+0.5)];
gck_vector3_sub(&v,&mapvals.viewpoint,position);
gck_vector3_normalize(&v);
r = compute_reflected_ray(&normal,&v);
/* Get color in the direction of r */
/* =============================== */
sphere_to_image(&r,&xf,&yf);
env_color = peek_env_map((gint)(env_width*xf+0.5),(gint)(env_height*yf+0.5));
color=phong_shade(position,
&mapvals.viewpoint,
&normal,
p,
&env_color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
}
}
return(color);
}
GckRGB get_ray_color_no_bilinear(GckVector3 *position)
{
GckRGB color;
gint x;
gdouble xf,yf;
GckVector3 normal,*p;
pos_to_float(position->x,position->y,&xf,&yf);
x = (gint)(xf+0.5);
if (mapvals.transparent_background && heights[1][x]==0)
color.a=0.0;
else
{
color=peek(x,(gint)(yf+0.5));
if (mapvals.lightsource.type==POINT_LIGHT)
p=&mapvals.lightsource.position;
else
p=&mapvals.lightsource.direction;
if (mapvals.bump_mapped==FALSE || mapvals.bumpmap_id==-1)
color=phong_shade(position,
&mapvals.viewpoint,
&mapvals.planenormal,
p,
&color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
else
{
normal=vertex_normals[1][x];
color=phong_shade(position,
&mapvals.viewpoint,
&normal,
p,
&color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
}
}
return(color);
}
GckRGB get_ray_color_no_bilinear_ref(GckVector3 *position)
{
GckRGB color,env_color;
gint x;
gdouble xf,yf;
GckVector3 normal,*p,v,r;
pos_to_float(position->x,position->y,&xf,&yf);
x = (gint)(xf+0.5);
if (mapvals.transparent_background && heights[1][x]==0)
color.a=0.0;
else
{
color=peek((gint)(xf+0.5),(gint)(yf+0.5));
if (mapvals.lightsource.type==POINT_LIGHT)
p=&mapvals.lightsource.position;
else
p=&mapvals.lightsource.direction;
if (mapvals.bump_mapped==FALSE || mapvals.bumpmap_id==-1)
{
pos_to_float(position->x,position->y,&xf,&yf);
color=peek((gint)(xf+0.5),(gint)(yf+0.5));
gck_vector3_sub(&v,&mapvals.viewpoint,position);
gck_vector3_normalize(&v);
r = compute_reflected_ray(&mapvals.planenormal,&v);
/* Get color in the direction of r */
/* =============================== */
sphere_to_image(&r,&xf,&yf);
env_color = peek_env_map((gint)(env_width*xf+0.5),(gint)(env_height*yf+0.5));
color=phong_shade(position,
&mapvals.viewpoint,
&mapvals.planenormal,
p,
&env_color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
}
else
{
normal=vertex_normals[1][(gint)(xf+0.5)];
pos_to_float(position->x,position->y,&xf,&yf);
color=peek((gint)(xf+0.5),(gint)(yf+0.5));
gck_vector3_sub(&v,&mapvals.viewpoint,position);
gck_vector3_normalize(&v);
r = compute_reflected_ray(&normal,&v);
/* Get color in the direction of r */
/* =============================== */
sphere_to_image(&r,&xf,&yf);
env_color = peek_env_map((gint)(env_width*xf+0.5),(gint)(env_height*yf+0.5));
color=phong_shade(position,
&mapvals.viewpoint,
&normal,
p,
&env_color,
&mapvals.lightsource.color,
mapvals.lightsource.type);
}
}
return(color);
}

View File

@ -0,0 +1,23 @@
#ifndef LIGHTINGSHADEH
#define LIGHTINGSHADEH
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <gdk/gdk.h>
#include <gck/gck.h>
#include "lighting_main.h"
#include "lighting_image.h"
typedef GckRGB (*get_ray_func) (GckVector3 *);
extern GckRGB get_ray_color (GckVector3 *position);
extern GckRGB get_ray_color_no_bilinear (GckVector3 *position);
extern GckRGB get_ray_color_ref (GckVector3 *position);
extern GckRGB get_ray_color_no_bilinear_ref (GckVector3 *position);
extern void precompute_init (gint w,gint h);
extern void precompute_normals (gint x1,gint x2,gint y);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
#ifndef LIGHTINGUIH
#define LIGHTINGUIH
#include <stdlib.h>
#include <stdio.h>
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <gck/gck.h>
#include <libgimp/gimp.h>
#include <libgimp/gimpmenu.h>
#include "lighting_main.h"
#include "lighting_image.h"
#include "lighting_apply.h"
#include "lighting_preview.h"
/* Externally visible variables */
/* ============================ */
extern GckApplicationWindow *appwin;
extern GdkGC *gc;
extern GtkWidget *previewarea;
/* Externally visible functions */
/* ============================ */
extern void create_main_dialog (void);
#endif

View File

@ -0,0 +1,75 @@
/* XPM */
char * specref1_xpm[] = {
"32 32 40 1",
" c None",
". c #A699A699A699",
"X c #A699A289A699",
"o c #965896589658",
"O c #BEFBBEFBBEFB",
"+ c #CF3CCB2BCF3C",
"@ c #C71BC71BC71B",
"# c #C71BC30BC71B",
"$ c #B6DAB6DAB6DA",
"% c #8E388E388E38",
"& c #69A669A669A6",
"* c #D75CD75CD75C",
"= c #DF7DDB6CDF7D",
"- c #CF3CCF3CCF3C",
"; c #965892489658",
": c #DF7DDF7DDF7D",
"> c #E79DE38DE79D",
", c #D75CD34CD75C",
"< c #AEBAAEBAAEBA",
"1 c #9E799E799E79",
"2 c #861786178617",
"3 c #596559655965",
"4 c #E79DE79DE79D",
"5 c #B6DAB2CAB6DA",
"6 c #71C671C671C6",
"7 c #492449244924",
"8 c #71C675D671C6",
"9 c #514455555144",
"0 c #BEFBBAEABEFB",
"q c #AEBAAAAAAEBA",
"w c #9E799A699E79",
"e c #8E388A288E38",
"r c #49244D344924",
"t c #861782078617",
"y c #69A66DB669A6",
"u c #79E779E779E7",
"i c #618565956185",
"p c #514451445144",
"a c #618561856185",
"s c #410345144103",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .Xo ",
" .O+@#$.%& ",
" $*==*-#$.;& ",
" $=:>:=,+O<123 ",
" .*:>4>=*+O5X%67 ",
" O=>4>>=,+O5X%89 ",
" +=:>>:*-@0<1%83 ",
" .@*===*,+#$qwe83r ",
" X#-,*,-+#0<Xoty9r ",
" o$#+++@#05.weuipr ",
" .$OOO0$<.1%ty3r ",
" %.<55<qXw%t8ap7 ",
" &;1XX1woet8iprs ",
" &2%%%etuyaprs ",
" 36888yi3prs ",
" 79339pr7s ",
" rrr ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -0,0 +1,79 @@
/* XPM */
char * specref2_xpm[] = {
"32 32 44 1",
" c None",
". c #A699A699A699",
"X c #A699A289A699",
"o c #965896589658",
"O c #BEFBBEFBBEFB",
"+ c #CF3CCB2BCF3C",
"@ c #C71BC71BC71B",
"# c #C71BC30BC71B",
"$ c #B6DAB6DAB6DA",
"% c #8E388E388E38",
"& c #69A669A669A6",
"* c #D75CD75CD75C",
"= c #DF7DDB6CDF7D",
"- c #CF3CCF3CCF3C",
"; c #965892489658",
": c #DF7DDF7DDF7D",
"> c #E79DE38DE79D",
", c #D75CD34CD75C",
"< c #AEBAAEBAAEBA",
"1 c #9E799E799E79",
"2 c #861786178617",
"3 c #596559655965",
"4 c #E79DE79DE79D",
"5 c #EFBEEFBEEFBE",
"6 c #B6DAB2CAB6DA",
"7 c #71C671C671C6",
"8 c #492449244924",
"9 c #FFFFFBEEFFFF",
"0 c #FFFFFFFFFFFF",
"q c #71C675D671C6",
"w c #514455555144",
"e c #EFBEEBADEFBE",
"r c #BEFBBAEABEFB",
"t c #AEBAAAAAAEBA",
"y c #9E799A699E79",
"u c #8E388A288E38",
"i c #49244D344924",
"p c #861782078617",
"a c #69A66DB669A6",
"s c #79E779E779E7",
"d c #618565956185",
"f c #514451445144",
"g c #618561856185",
"h c #410345144103",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .Xo ",
" .O+@#$.%& ",
" $*==*-#$.;& ",
" $=:>:=,+O<123 ",
" .*:4454*+O6X%78 ",
" O=>4900>+O6X%qw ",
" +=:5000e+r<1%q3 ",
" .@*=4009=#$tyuq3i ",
" X#-,*>e=@r<Xopawi ",
" o$#++++#r6.yusdfi ",
" .$OOOr$<.1%pa3i ",
" %.<66<tXy%pqgf8 ",
" &;1XX1youpqdfih ",
" &2%%%upsagfih ",
" 37qqqad3fih ",
" 8w33wfi8h ",
" iii ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

View File

@ -17,9 +17,9 @@
*/
/*
/*
dbbrowser_utils.c
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
*/
#include "dbbrowser_utils.h"
@ -41,49 +41,50 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GParamDef *selected_return_vals ) )
/* create the dialog box */
/* console_entry != NULL => called from the script-fu-console */
{
dbbrowser_t* dbbrowser;
GtkWidget *button;
GtkWidget *hbox,*searchhbox,*vbox;
GtkWidget *label;
dbbrowser = (gpointer)malloc(sizeof(dbbrowser_t));
dbbrowser->apply_callback = apply_callback;
/* the dialog box */
dbbrowser->dlg = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg), "DB Browser (init)");
gtk_window_position (GTK_WINDOW (dbbrowser->dlg), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (dbbrowser->dlg), "destroy",
(GtkSignalFunc) dialog_close_callback,
dbbrowser);
/* hbox : left=list ; right=description */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
hbox, TRUE, TRUE, 0);
gtk_widget_show (hbox);
/* left = vbox : the list and the search entry */
vbox = gtk_vbox_new( FALSE, 0 );
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
vbox, FALSE, TRUE, 0);
gtk_widget_show(vbox);
/* list : list in a scrolled_win */
dbbrowser->clist = gtk_clist_new(1);
gtk_clist_set_policy (GTK_CLIST (dbbrowser->clist), GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
dbbrowser->scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->scrolled_win),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_clist_set_selection_mode (GTK_CLIST (dbbrowser->clist),
GTK_SELECTION_BROWSE);
@ -91,9 +92,11 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
gtk_signal_connect (GTK_OBJECT (dbbrowser->clist), "select_row",
(GtkSignalFunc) procedure_select_callback,
dbbrowser);
gtk_box_pack_start (GTK_BOX (vbox),
gtk_box_pack_start (GTK_BOX (vbox),
dbbrowser->clist, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (dbbrowser->scrolled_win), dbbrowser->clist);
gtk_widget_show(dbbrowser->clist);
gtk_widget_show(dbbrowser->scrolled_win);
/* search entry */
@ -104,12 +107,12 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
label = gtk_label_new("Search :");
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
label, TRUE, TRUE, 0);
gtk_widget_show(label);
dbbrowser->search_entry = gtk_entry_new();
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
dbbrowser->search_entry, TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->search_entry);
@ -117,10 +120,10 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
dbbrowser->descr_scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->descr_scroll),
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS
);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_box_pack_start (GTK_BOX (hbox),
dbbrowser->descr_scroll, TRUE, TRUE, 0);
gtk_widget_set_usize (dbbrowser->descr_scroll, DBL_WIDTH - DBL_LIST_WIDTH, 0);
gtk_widget_show (dbbrowser->descr_scroll);
@ -133,7 +136,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->name_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->name_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->name_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->name_button);
@ -141,7 +144,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->blurb_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->blurb_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->blurb_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->blurb_button);
@ -150,7 +153,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_apply_callback, dbbrowser );
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
}
@ -159,14 +162,14 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_close_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
/* now build the list */
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->dlg);
/* initialize the "return" value (for "apply") */
@ -194,8 +197,8 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
static gint
procedure_select_callback (GtkWidget *widget,
gint row,
gint column,
gint row,
gint column,
GdkEventButton * bevent,
gpointer data)
{
@ -211,21 +214,21 @@ procedure_select_callback (GtkWidget *widget,
return FALSE;
}
static void
dialog_select (dbbrowser_t *dbbrowser,
static void
dialog_select (dbbrowser_t *dbbrowser,
gchar *proc_name)
/* update the description box (right) */
{
GtkWidget* label, *old_table;
gint i,row=0;
if (dbbrowser->selected_proc_name)
if (dbbrowser->selected_proc_name)
g_free(dbbrowser->selected_proc_name);
dbbrowser->selected_proc_name = g_strdup(proc_name);
if (dbbrowser->selected_scheme_proc_name)
g_free(dbbrowser->selected_scheme_proc_name);
dbbrowser->selected_scheme_proc_name =
dbbrowser->selected_scheme_proc_name =
g_strdup(proc_name);
convert_string(dbbrowser->selected_scheme_proc_name);
@ -237,22 +240,22 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_params) g_free(dbbrowser->selected_params);
if (dbbrowser->selected_return_vals) g_free(dbbrowser->selected_return_vals);
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
&(dbbrowser->selected_proc_author),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_nparams),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_return_vals));
/* save the "old" table */
old_table = dbbrowser->descr_table;
dbbrowser->descr_table = gtk_table_new(
dbbrowser->descr_table = gtk_table_new(
10 + dbbrowser->selected_nparams + dbbrowser->selected_nreturn_vals ,
5 , FALSE );
@ -261,7 +264,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the name */
label = gtk_label_new("Name :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 6);
gtk_widget_show(label);
@ -277,7 +280,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the description */
label = gtk_label_new("Blurb :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -296,19 +299,19 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
/* in parameters */
if (dbbrowser->selected_nparams)
if (dbbrowser->selected_nparams)
{
label = gtk_label_new("In :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nparams),
0, 1, row, row+(dbbrowser->selected_nparams),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nparams);i++)
for (i=0;i<(dbbrowser->selected_nparams);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_params[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -326,12 +329,12 @@ dialog_select (dbbrowser_t *dbbrowser,
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
}
}
if ((dbbrowser->selected_nparams) &&
if ((dbbrowser->selected_nparams) &&
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -345,18 +348,18 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_nreturn_vals)
{
label = gtk_label_new("Out :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1,
1, 2, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -364,15 +367,15 @@ dialog_select (dbbrowser_t *dbbrowser,
label = gtk_label_new(GParamType2char((dbbrowser->selected_return_vals[i]).type));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
2, 3, row, row+1,
2, 3, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
/* description */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).description);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1,
3, 4, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
@ -382,7 +385,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the author & the copyright */
if ((dbbrowser->selected_nparams) ||
if ((dbbrowser->selected_nparams) ||
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -393,9 +396,9 @@ dialog_select (dbbrowser_t *dbbrowser,
}
label = gtk_label_new("Author :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -406,11 +409,11 @@ dialog_select (dbbrowser_t *dbbrowser,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
label = gtk_label_new("Date :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -423,9 +426,9 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
label = gtk_label_new("Copyright :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -439,9 +442,9 @@ dialog_select (dbbrowser_t *dbbrowser,
/*
label = gtk_label_new("Help :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -449,13 +452,13 @@ dialog_select (dbbrowser_t *dbbrowser,
if (old_table) gtk_widget_destroy(old_table);
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
dbbrowser->descr_table );
gtk_widget_show(dbbrowser->descr_table);
}
static void
dialog_close_callback (GtkWidget *widget,
dialog_close_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -472,8 +475,8 @@ dialog_close_callback (GtkWidget *widget,
}
}
static void
dialog_apply_callback (GtkWidget *widget,
static void
dialog_apply_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -493,8 +496,8 @@ dialog_apply_callback (GtkWidget *widget,
dbbrowser->selected_return_vals );
}
static void
dialog_search_callback (GtkWidget *widget,
static void
dialog_search_callback (GtkWidget *widget,
gpointer data)
/* search in the whole db */
{
@ -510,9 +513,9 @@ dialog_search_callback (GtkWidget *widget,
/* search */
if ( widget == (dbbrowser->name_button) )
if ( widget == (dbbrowser->name_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by name - please wait)");
query = g_string_new ("");
@ -529,24 +532,24 @@ dialog_search_callback (GtkWidget *widget,
}
gimp_query_database (query->str,
".*", ".*", ".*", ".*", ".*", ".*",
".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
g_string_free (query, TRUE);
}
else if ( widget == (dbbrowser->blurb_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by blurb - please wait)");
gimp_query_database (".*",
gimp_query_database (".*",
gtk_entry_get_text( GTK_ENTRY(dbbrowser->search_entry) ),
".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
else {
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (please wait)");
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
@ -562,7 +565,7 @@ dialog_search_callback (GtkWidget *widget,
gtk_clist_insert (GTK_CLIST (GTK_CLIST(dbbrowser->clist)), j,
&label);
func_name = g_strdup (proc_list[i]);
gtk_clist_set_row_data_full(GTK_CLIST(dbbrowser->clist), j,
func_name, g_free);
}
@ -576,7 +579,7 @@ dialog_search_callback (GtkWidget *widget,
if (num_procs != 0) {
gchar *insert_name, *label_name;
int i,j,savej;
for (i = 0; i < num_procs ; i++) {
insert_name=g_strdup(proc_list[0]); savej=0;
@ -587,7 +590,7 @@ dialog_search_callback (GtkWidget *widget,
savej=j;
}
}
proc_list[savej][0]='\255';
label_name = g_strdup( insert_name );
@ -600,14 +603,14 @@ dialog_search_callback (GtkWidget *widget,
}
}
*/
if ( dbbrowser->clist ) {
;
}
g_free( proc_list );
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser");
gtk_clist_thaw(GTK_CLIST(dbbrowser->clist));
@ -615,7 +618,7 @@ dialog_search_callback (GtkWidget *widget,
/* utils ... */
static void
static void
convert_string (char *str)
{
while (*str)
@ -625,7 +628,7 @@ convert_string (char *str)
}
}
static char*
static char*
GParamType2char(GParamType t)
{
switch (t) {

View File

@ -17,9 +17,9 @@
*/
/*
/*
dbbrowser_utils.h
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
*/
/* configuration */
@ -51,6 +51,7 @@ typedef struct {
GtkWidget* descr_table;
GtkWidget* clist;
GtkWidget* scrolled_win;
/* the currently selected procedure */
gchar *selected_proc_name;
@ -64,7 +65,7 @@ typedef struct {
int selected_nparams;
int selected_nreturn_vals;
GParamDef *selected_params;
GParamDef *selected_return_vals;
GParamDef *selected_return_vals;
void (*apply_callback) ( gchar *selected_proc_name,
gchar *selected_scheme_proc_name,
@ -88,27 +89,26 @@ dialog_apply_callback(GtkWidget *, gpointer );
static gint
procedure_select_callback (GtkWidget *widget,
gint row,
gint column,
gint row,
gint column,
GdkEventButton * bevent,
gpointer data);
static void
dialog_search_callback(GtkWidget *,
dialog_search_callback(GtkWidget *,
gpointer);
static void
dialog_select(dbbrowser_t *dbbrowser,
dialog_select(dbbrowser_t *dbbrowser,
gchar *proc_name);
static void
dialog_close_callback(GtkWidget *,
dialog_close_callback(GtkWidget *,
gpointer);
static void
static void
convert_string (gchar *str);
static gchar*
static gchar*
GParamType2char(GParamType t);

View File

@ -17,9 +17,9 @@
*/
/*
/*
dbbrowser_utils.c
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
*/
#include "dbbrowser_utils.h"
@ -41,49 +41,50 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GParamDef *selected_return_vals ) )
/* create the dialog box */
/* console_entry != NULL => called from the script-fu-console */
{
dbbrowser_t* dbbrowser;
GtkWidget *button;
GtkWidget *hbox,*searchhbox,*vbox;
GtkWidget *label;
dbbrowser = (gpointer)malloc(sizeof(dbbrowser_t));
dbbrowser->apply_callback = apply_callback;
/* the dialog box */
dbbrowser->dlg = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg), "DB Browser (init)");
gtk_window_position (GTK_WINDOW (dbbrowser->dlg), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (dbbrowser->dlg), "destroy",
(GtkSignalFunc) dialog_close_callback,
dbbrowser);
/* hbox : left=list ; right=description */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
hbox, TRUE, TRUE, 0);
gtk_widget_show (hbox);
/* left = vbox : the list and the search entry */
vbox = gtk_vbox_new( FALSE, 0 );
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
vbox, FALSE, TRUE, 0);
gtk_widget_show(vbox);
/* list : list in a scrolled_win */
dbbrowser->clist = gtk_clist_new(1);
gtk_clist_set_policy (GTK_CLIST (dbbrowser->clist), GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
dbbrowser->scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->scrolled_win),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_clist_set_selection_mode (GTK_CLIST (dbbrowser->clist),
GTK_SELECTION_BROWSE);
@ -91,9 +92,11 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
gtk_signal_connect (GTK_OBJECT (dbbrowser->clist), "select_row",
(GtkSignalFunc) procedure_select_callback,
dbbrowser);
gtk_box_pack_start (GTK_BOX (vbox),
gtk_box_pack_start (GTK_BOX (vbox),
dbbrowser->clist, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (dbbrowser->scrolled_win), dbbrowser->clist);
gtk_widget_show(dbbrowser->clist);
gtk_widget_show(dbbrowser->scrolled_win);
/* search entry */
@ -104,12 +107,12 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
label = gtk_label_new("Search :");
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
label, TRUE, TRUE, 0);
gtk_widget_show(label);
dbbrowser->search_entry = gtk_entry_new();
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
dbbrowser->search_entry, TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->search_entry);
@ -117,10 +120,10 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
dbbrowser->descr_scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->descr_scroll),
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS
);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_box_pack_start (GTK_BOX (hbox),
dbbrowser->descr_scroll, TRUE, TRUE, 0);
gtk_widget_set_usize (dbbrowser->descr_scroll, DBL_WIDTH - DBL_LIST_WIDTH, 0);
gtk_widget_show (dbbrowser->descr_scroll);
@ -133,7 +136,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->name_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->name_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->name_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->name_button);
@ -141,7 +144,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->blurb_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->blurb_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->blurb_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->blurb_button);
@ -150,7 +153,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_apply_callback, dbbrowser );
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
}
@ -159,14 +162,14 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_close_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
/* now build the list */
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->dlg);
/* initialize the "return" value (for "apply") */
@ -194,8 +197,8 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
static gint
procedure_select_callback (GtkWidget *widget,
gint row,
gint column,
gint row,
gint column,
GdkEventButton * bevent,
gpointer data)
{
@ -211,21 +214,21 @@ procedure_select_callback (GtkWidget *widget,
return FALSE;
}
static void
dialog_select (dbbrowser_t *dbbrowser,
static void
dialog_select (dbbrowser_t *dbbrowser,
gchar *proc_name)
/* update the description box (right) */
{
GtkWidget* label, *old_table;
gint i,row=0;
if (dbbrowser->selected_proc_name)
if (dbbrowser->selected_proc_name)
g_free(dbbrowser->selected_proc_name);
dbbrowser->selected_proc_name = g_strdup(proc_name);
if (dbbrowser->selected_scheme_proc_name)
g_free(dbbrowser->selected_scheme_proc_name);
dbbrowser->selected_scheme_proc_name =
dbbrowser->selected_scheme_proc_name =
g_strdup(proc_name);
convert_string(dbbrowser->selected_scheme_proc_name);
@ -237,22 +240,22 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_params) g_free(dbbrowser->selected_params);
if (dbbrowser->selected_return_vals) g_free(dbbrowser->selected_return_vals);
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
&(dbbrowser->selected_proc_author),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_nparams),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_return_vals));
/* save the "old" table */
old_table = dbbrowser->descr_table;
dbbrowser->descr_table = gtk_table_new(
dbbrowser->descr_table = gtk_table_new(
10 + dbbrowser->selected_nparams + dbbrowser->selected_nreturn_vals ,
5 , FALSE );
@ -261,7 +264,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the name */
label = gtk_label_new("Name :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 6);
gtk_widget_show(label);
@ -277,7 +280,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the description */
label = gtk_label_new("Blurb :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -296,19 +299,19 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
/* in parameters */
if (dbbrowser->selected_nparams)
if (dbbrowser->selected_nparams)
{
label = gtk_label_new("In :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nparams),
0, 1, row, row+(dbbrowser->selected_nparams),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nparams);i++)
for (i=0;i<(dbbrowser->selected_nparams);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_params[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -326,12 +329,12 @@ dialog_select (dbbrowser_t *dbbrowser,
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
}
}
if ((dbbrowser->selected_nparams) &&
if ((dbbrowser->selected_nparams) &&
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -345,18 +348,18 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_nreturn_vals)
{
label = gtk_label_new("Out :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1,
1, 2, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -364,15 +367,15 @@ dialog_select (dbbrowser_t *dbbrowser,
label = gtk_label_new(GParamType2char((dbbrowser->selected_return_vals[i]).type));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
2, 3, row, row+1,
2, 3, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
/* description */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).description);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1,
3, 4, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
@ -382,7 +385,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the author & the copyright */
if ((dbbrowser->selected_nparams) ||
if ((dbbrowser->selected_nparams) ||
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -393,9 +396,9 @@ dialog_select (dbbrowser_t *dbbrowser,
}
label = gtk_label_new("Author :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -406,11 +409,11 @@ dialog_select (dbbrowser_t *dbbrowser,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
label = gtk_label_new("Date :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -423,9 +426,9 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
label = gtk_label_new("Copyright :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -439,9 +442,9 @@ dialog_select (dbbrowser_t *dbbrowser,
/*
label = gtk_label_new("Help :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -449,13 +452,13 @@ dialog_select (dbbrowser_t *dbbrowser,
if (old_table) gtk_widget_destroy(old_table);
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
dbbrowser->descr_table );
gtk_widget_show(dbbrowser->descr_table);
}
static void
dialog_close_callback (GtkWidget *widget,
dialog_close_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -472,8 +475,8 @@ dialog_close_callback (GtkWidget *widget,
}
}
static void
dialog_apply_callback (GtkWidget *widget,
static void
dialog_apply_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -493,8 +496,8 @@ dialog_apply_callback (GtkWidget *widget,
dbbrowser->selected_return_vals );
}
static void
dialog_search_callback (GtkWidget *widget,
static void
dialog_search_callback (GtkWidget *widget,
gpointer data)
/* search in the whole db */
{
@ -510,9 +513,9 @@ dialog_search_callback (GtkWidget *widget,
/* search */
if ( widget == (dbbrowser->name_button) )
if ( widget == (dbbrowser->name_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by name - please wait)");
query = g_string_new ("");
@ -529,24 +532,24 @@ dialog_search_callback (GtkWidget *widget,
}
gimp_query_database (query->str,
".*", ".*", ".*", ".*", ".*", ".*",
".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
g_string_free (query, TRUE);
}
else if ( widget == (dbbrowser->blurb_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by blurb - please wait)");
gimp_query_database (".*",
gimp_query_database (".*",
gtk_entry_get_text( GTK_ENTRY(dbbrowser->search_entry) ),
".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
else {
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (please wait)");
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
@ -562,7 +565,7 @@ dialog_search_callback (GtkWidget *widget,
gtk_clist_insert (GTK_CLIST (GTK_CLIST(dbbrowser->clist)), j,
&label);
func_name = g_strdup (proc_list[i]);
gtk_clist_set_row_data_full(GTK_CLIST(dbbrowser->clist), j,
func_name, g_free);
}
@ -576,7 +579,7 @@ dialog_search_callback (GtkWidget *widget,
if (num_procs != 0) {
gchar *insert_name, *label_name;
int i,j,savej;
for (i = 0; i < num_procs ; i++) {
insert_name=g_strdup(proc_list[0]); savej=0;
@ -587,7 +590,7 @@ dialog_search_callback (GtkWidget *widget,
savej=j;
}
}
proc_list[savej][0]='\255';
label_name = g_strdup( insert_name );
@ -600,14 +603,14 @@ dialog_search_callback (GtkWidget *widget,
}
}
*/
if ( dbbrowser->clist ) {
;
}
g_free( proc_list );
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser");
gtk_clist_thaw(GTK_CLIST(dbbrowser->clist));
@ -615,7 +618,7 @@ dialog_search_callback (GtkWidget *widget,
/* utils ... */
static void
static void
convert_string (char *str)
{
while (*str)
@ -625,7 +628,7 @@ convert_string (char *str)
}
}
static char*
static char*
GParamType2char(GParamType t)
{
switch (t) {

View File

@ -17,9 +17,9 @@
*/
/*
/*
dbbrowser_utils.h
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
*/
/* configuration */
@ -51,6 +51,7 @@ typedef struct {
GtkWidget* descr_table;
GtkWidget* clist;
GtkWidget* scrolled_win;
/* the currently selected procedure */
gchar *selected_proc_name;
@ -64,7 +65,7 @@ typedef struct {
int selected_nparams;
int selected_nreturn_vals;
GParamDef *selected_params;
GParamDef *selected_return_vals;
GParamDef *selected_return_vals;
void (*apply_callback) ( gchar *selected_proc_name,
gchar *selected_scheme_proc_name,
@ -88,27 +89,26 @@ dialog_apply_callback(GtkWidget *, gpointer );
static gint
procedure_select_callback (GtkWidget *widget,
gint row,
gint column,
gint row,
gint column,
GdkEventButton * bevent,
gpointer data);
static void
dialog_search_callback(GtkWidget *,
dialog_search_callback(GtkWidget *,
gpointer);
static void
dialog_select(dbbrowser_t *dbbrowser,
dialog_select(dbbrowser_t *dbbrowser,
gchar *proc_name);
static void
dialog_close_callback(GtkWidget *,
dialog_close_callback(GtkWidget *,
gpointer);
static void
static void
convert_string (gchar *str);
static gchar*
static gchar*
GParamType2char(GParamType t);

View File

@ -17,9 +17,9 @@
*/
/*
/*
dbbrowser_utils.c
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
0.08 26th sept 97 by Thomas NOEL <thomas@minet.net>
*/
#include "dbbrowser_utils.h"
@ -41,49 +41,50 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GParamDef *selected_return_vals ) )
/* create the dialog box */
/* console_entry != NULL => called from the script-fu-console */
{
dbbrowser_t* dbbrowser;
GtkWidget *button;
GtkWidget *hbox,*searchhbox,*vbox;
GtkWidget *label;
dbbrowser = (gpointer)malloc(sizeof(dbbrowser_t));
dbbrowser->apply_callback = apply_callback;
/* the dialog box */
dbbrowser->dlg = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg), "DB Browser (init)");
gtk_window_position (GTK_WINDOW (dbbrowser->dlg), GTK_WIN_POS_MOUSE);
gtk_signal_connect (GTK_OBJECT (dbbrowser->dlg), "destroy",
(GtkSignalFunc) dialog_close_callback,
dbbrowser);
/* hbox : left=list ; right=description */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->vbox),
hbox, TRUE, TRUE, 0);
gtk_widget_show (hbox);
/* left = vbox : the list and the search entry */
vbox = gtk_vbox_new( FALSE, 0 );
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_container_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_pack_start (GTK_BOX (hbox),
vbox, FALSE, TRUE, 0);
gtk_widget_show(vbox);
/* list : list in a scrolled_win */
dbbrowser->clist = gtk_clist_new(1);
gtk_clist_set_policy (GTK_CLIST (dbbrowser->clist), GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
dbbrowser->scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->scrolled_win),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_clist_set_selection_mode (GTK_CLIST (dbbrowser->clist),
GTK_SELECTION_BROWSE);
@ -91,9 +92,11 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
gtk_signal_connect (GTK_OBJECT (dbbrowser->clist), "select_row",
(GtkSignalFunc) procedure_select_callback,
dbbrowser);
gtk_box_pack_start (GTK_BOX (vbox),
gtk_box_pack_start (GTK_BOX (vbox),
dbbrowser->clist, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (dbbrowser->scrolled_win), dbbrowser->clist);
gtk_widget_show(dbbrowser->clist);
gtk_widget_show(dbbrowser->scrolled_win);
/* search entry */
@ -104,12 +107,12 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
label = gtk_label_new("Search :");
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
label, TRUE, TRUE, 0);
gtk_widget_show(label);
dbbrowser->search_entry = gtk_entry_new();
gtk_box_pack_start (GTK_BOX (searchhbox),
gtk_box_pack_start (GTK_BOX (searchhbox),
dbbrowser->search_entry, TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->search_entry);
@ -117,10 +120,10 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
dbbrowser->descr_scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dbbrowser->descr_scroll),
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS
);
gtk_box_pack_start (GTK_BOX (hbox),
gtk_box_pack_start (GTK_BOX (hbox),
dbbrowser->descr_scroll, TRUE, TRUE, 0);
gtk_widget_set_usize (dbbrowser->descr_scroll, DBL_WIDTH - DBL_LIST_WIDTH, 0);
gtk_widget_show (dbbrowser->descr_scroll);
@ -133,7 +136,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->name_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->name_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->name_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->name_button);
@ -141,7 +144,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (dbbrowser->blurb_button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (dbbrowser->blurb_button), "clicked",
(GtkSignalFunc) dialog_search_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
dbbrowser->blurb_button , TRUE, TRUE, 0);
gtk_widget_show(dbbrowser->blurb_button);
@ -150,7 +153,7 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_apply_callback, dbbrowser );
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
}
@ -159,14 +162,14 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) dialog_close_callback, dbbrowser);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dbbrowser->dlg)->action_area),
button, TRUE, TRUE, 0);
gtk_widget_show (button);
/* now build the list */
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->clist);
gtk_widget_show (dbbrowser->dlg);
/* initialize the "return" value (for "apply") */
@ -194,8 +197,8 @@ gimp_db_browser(void (* apply_callback) ( gchar *selected_proc_name,
static gint
procedure_select_callback (GtkWidget *widget,
gint row,
gint column,
gint row,
gint column,
GdkEventButton * bevent,
gpointer data)
{
@ -211,21 +214,21 @@ procedure_select_callback (GtkWidget *widget,
return FALSE;
}
static void
dialog_select (dbbrowser_t *dbbrowser,
static void
dialog_select (dbbrowser_t *dbbrowser,
gchar *proc_name)
/* update the description box (right) */
{
GtkWidget* label, *old_table;
gint i,row=0;
if (dbbrowser->selected_proc_name)
if (dbbrowser->selected_proc_name)
g_free(dbbrowser->selected_proc_name);
dbbrowser->selected_proc_name = g_strdup(proc_name);
if (dbbrowser->selected_scheme_proc_name)
g_free(dbbrowser->selected_scheme_proc_name);
dbbrowser->selected_scheme_proc_name =
dbbrowser->selected_scheme_proc_name =
g_strdup(proc_name);
convert_string(dbbrowser->selected_scheme_proc_name);
@ -237,22 +240,22 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_params) g_free(dbbrowser->selected_params);
if (dbbrowser->selected_return_vals) g_free(dbbrowser->selected_return_vals);
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
gimp_query_procedure (proc_name,
&(dbbrowser->selected_proc_blurb),
&(dbbrowser->selected_proc_help),
&(dbbrowser->selected_proc_author),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_proc_copyright),
&(dbbrowser->selected_proc_date),
&(dbbrowser->selected_proc_type),
&(dbbrowser->selected_nparams),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_nreturn_vals),
&(dbbrowser->selected_params),
&(dbbrowser->selected_return_vals));
/* save the "old" table */
old_table = dbbrowser->descr_table;
dbbrowser->descr_table = gtk_table_new(
dbbrowser->descr_table = gtk_table_new(
10 + dbbrowser->selected_nparams + dbbrowser->selected_nreturn_vals ,
5 , FALSE );
@ -261,7 +264,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the name */
label = gtk_label_new("Name :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 6);
gtk_widget_show(label);
@ -277,7 +280,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the description */
label = gtk_label_new("Blurb :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1, GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -296,19 +299,19 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
/* in parameters */
if (dbbrowser->selected_nparams)
if (dbbrowser->selected_nparams)
{
label = gtk_label_new("In :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nparams),
0, 1, row, row+(dbbrowser->selected_nparams),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nparams);i++)
for (i=0;i<(dbbrowser->selected_nparams);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_params[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -326,12 +329,12 @@ dialog_select (dbbrowser_t *dbbrowser,
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
}
}
if ((dbbrowser->selected_nparams) &&
if ((dbbrowser->selected_nparams) &&
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -345,18 +348,18 @@ dialog_select (dbbrowser_t *dbbrowser,
if (dbbrowser->selected_nreturn_vals)
{
label = gtk_label_new("Out :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
0, 1, row, row+(dbbrowser->selected_nreturn_vals),
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
for (i=0;i<(dbbrowser->selected_nreturn_vals);i++)
{
/* name */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).name);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
1, 2, row, row+1,
1, 2, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
@ -364,15 +367,15 @@ dialog_select (dbbrowser_t *dbbrowser,
label = gtk_label_new(GParamType2char((dbbrowser->selected_return_vals[i]).type));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
2, 3, row, row+1,
2, 3, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
/* description */
label = gtk_label_new((dbbrowser->selected_return_vals[i]).description);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
3, 4, row, row+1,
3, 4, row, row+1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
@ -382,7 +385,7 @@ dialog_select (dbbrowser_t *dbbrowser,
/* show the author & the copyright */
if ((dbbrowser->selected_nparams) ||
if ((dbbrowser->selected_nparams) ||
(dbbrowser->selected_nreturn_vals)) {
label = gtk_hseparator_new(); /* ok, not really a label ... :) */
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
@ -393,9 +396,9 @@ dialog_select (dbbrowser_t *dbbrowser,
}
label = gtk_label_new("Author :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -406,11 +409,11 @@ dialog_select (dbbrowser_t *dbbrowser,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
row++;
label = gtk_label_new("Date :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -423,9 +426,9 @@ dialog_select (dbbrowser_t *dbbrowser,
row++;
label = gtk_label_new("Copyright :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -439,9 +442,9 @@ dialog_select (dbbrowser_t *dbbrowser,
/*
label = gtk_label_new("Help :");
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (dbbrowser->descr_table), label,
0, 1, row, row+1,
0, 1, row, row+1,
GTK_FILL, GTK_FILL, 3, 0);
gtk_widget_show(label);
@ -449,13 +452,13 @@ dialog_select (dbbrowser_t *dbbrowser,
if (old_table) gtk_widget_destroy(old_table);
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
gtk_container_add (GTK_CONTAINER (dbbrowser->descr_scroll),
dbbrowser->descr_table );
gtk_widget_show(dbbrowser->descr_table);
}
static void
dialog_close_callback (GtkWidget *widget,
dialog_close_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -472,8 +475,8 @@ dialog_close_callback (GtkWidget *widget,
}
}
static void
dialog_apply_callback (GtkWidget *widget,
static void
dialog_apply_callback (GtkWidget *widget,
gpointer data)
/* end of the dialog */
{
@ -493,8 +496,8 @@ dialog_apply_callback (GtkWidget *widget,
dbbrowser->selected_return_vals );
}
static void
dialog_search_callback (GtkWidget *widget,
static void
dialog_search_callback (GtkWidget *widget,
gpointer data)
/* search in the whole db */
{
@ -510,9 +513,9 @@ dialog_search_callback (GtkWidget *widget,
/* search */
if ( widget == (dbbrowser->name_button) )
if ( widget == (dbbrowser->name_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by name - please wait)");
query = g_string_new ("");
@ -529,24 +532,24 @@ dialog_search_callback (GtkWidget *widget,
}
gimp_query_database (query->str,
".*", ".*", ".*", ".*", ".*", ".*",
".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
g_string_free (query, TRUE);
}
else if ( widget == (dbbrowser->blurb_button) )
{
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (by blurb - please wait)");
gimp_query_database (".*",
gimp_query_database (".*",
gtk_entry_get_text( GTK_ENTRY(dbbrowser->search_entry) ),
".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
else {
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser (please wait)");
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
gimp_query_database (".*", ".*", ".*", ".*", ".*", ".*", ".*",
&num_procs, &proc_list);
}
@ -562,7 +565,7 @@ dialog_search_callback (GtkWidget *widget,
gtk_clist_insert (GTK_CLIST (GTK_CLIST(dbbrowser->clist)), j,
&label);
func_name = g_strdup (proc_list[i]);
gtk_clist_set_row_data_full(GTK_CLIST(dbbrowser->clist), j,
func_name, g_free);
}
@ -576,7 +579,7 @@ dialog_search_callback (GtkWidget *widget,
if (num_procs != 0) {
gchar *insert_name, *label_name;
int i,j,savej;
for (i = 0; i < num_procs ; i++) {
insert_name=g_strdup(proc_list[0]); savej=0;
@ -587,7 +590,7 @@ dialog_search_callback (GtkWidget *widget,
savej=j;
}
}
proc_list[savej][0]='\255';
label_name = g_strdup( insert_name );
@ -600,14 +603,14 @@ dialog_search_callback (GtkWidget *widget,
}
}
*/
if ( dbbrowser->clist ) {
;
}
g_free( proc_list );
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
gtk_window_set_title (GTK_WINDOW (dbbrowser->dlg),
"DB Browser");
gtk_clist_thaw(GTK_CLIST(dbbrowser->clist));
@ -615,7 +618,7 @@ dialog_search_callback (GtkWidget *widget,
/* utils ... */
static void
static void
convert_string (char *str)
{
while (*str)
@ -625,7 +628,7 @@ convert_string (char *str)
}
}
static char*
static char*
GParamType2char(GParamType t)
{
switch (t) {

View File

@ -521,7 +521,7 @@ ifs_compose_trans_page ()
GTK_FILL, GTK_FILL, 4, 0);
gtk_widget_show(label);
ifsD->scale_pair = value_pair_create(&ifsD->current_vals.scale, 0.0,1.0,
ifsD->scale_pair = value_pair_create(&ifsD->current_vals.scale, 0.0,1.0,
FALSE, VALUE_PAIR_DOUBLE);
gtk_table_attach(GTK_TABLE(table), ifsD->scale_pair->entry,3,4,0,1,
GTK_FILL,GTK_FILL,4,0);
@ -1052,7 +1052,7 @@ ifs_compose_dialog (GDrawable *drawable)
gtk_main ();
gtk_object_unref (GTK_OBJECT (ifsDesign->op_menu));
if (dlg)
gtk_widget_destroy (dlg);
@ -1104,16 +1104,15 @@ static void
design_op_menu_create(GtkWidget *window)
{
GtkWidget *menu_item;
GtkAcceleratorTable *accelerator_table;
GtkAccelGroup *accel_group;
ifsDesign->op_menu = gtk_menu_new();
gtk_object_ref (GTK_OBJECT (ifsDesign->op_menu));
gtk_object_sink (GTK_OBJECT (ifsDesign->op_menu));
accelerator_table = gtk_accelerator_table_new();
gtk_menu_set_accelerator_table(GTK_MENU(ifsDesign->op_menu),
accelerator_table);
gtk_window_add_accelerator_table(GTK_WINDOW(window),accelerator_table);
accel_group = gtk_accel_group_new();
gtk_menu_set_accel_group(GTK_MENU(ifsDesign->op_menu), accel_group);
gtk_window_add_accel_group(GTK_WINDOW(window),accel_group);
menu_item = gtk_menu_item_new_with_label("Move");
gtk_menu_append(GTK_MENU(ifsDesign->op_menu),menu_item);
@ -1121,9 +1120,11 @@ design_op_menu_create(GtkWidget *window)
gtk_signal_connect(GTK_OBJECT(menu_item),"activate",
(GtkSignalFunc)design_op_update_callback,
(gpointer)((long)OP_TRANSLATE));
gtk_widget_install_accelerator(menu_item,
accelerator_table,
"activate",'M',0);
gtk_widget_add_accelerator(menu_item,
"activate",
accel_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menu_item = gtk_menu_item_new_with_label("Rotate/Scale");
gtk_menu_append(GTK_MENU(ifsDesign->op_menu),menu_item);
@ -1131,9 +1132,11 @@ design_op_menu_create(GtkWidget *window)
gtk_signal_connect(GTK_OBJECT(menu_item),"activate",
(GtkSignalFunc)design_op_update_callback,
(gpointer)((long)OP_ROTATE));
gtk_widget_install_accelerator(menu_item,
accelerator_table,
"activate",'R',0);
gtk_widget_add_accelerator(menu_item,
"activate",
accel_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menu_item = gtk_menu_item_new_with_label("Stretch");
gtk_menu_append(GTK_MENU(ifsDesign->op_menu),menu_item);
@ -1141,10 +1144,11 @@ design_op_menu_create(GtkWidget *window)
gtk_signal_connect(GTK_OBJECT(menu_item),"activate",
(GtkSignalFunc)design_op_update_callback,
(gpointer)((long)OP_STRETCH));
gtk_widget_install_accelerator(menu_item,
accelerator_table,
"activate",'S',0);
gtk_widget_add_accelerator(menu_item,
"activate",
accel_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* A separator */
menu_item = gtk_menu_item_new();
gtk_menu_append(GTK_MENU(ifsDesign->op_menu),menu_item);
@ -1156,9 +1160,11 @@ design_op_menu_create(GtkWidget *window)
gtk_signal_connect(GTK_OBJECT(menu_item),"activate",
(GtkSignalFunc)design_area_select_all_callback,
NULL);
gtk_widget_install_accelerator(menu_item,
accelerator_table,
"activate",'A',GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menu_item,
"activate",
accel_group,
'A', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menu_item = gtk_menu_item_new_with_label("Recompute Center");
gtk_menu_append(GTK_MENU(ifsDesign->op_menu),menu_item);
@ -1166,9 +1172,11 @@ design_op_menu_create(GtkWidget *window)
gtk_signal_connect(GTK_OBJECT(menu_item),"activate",
(GtkSignalFunc)recompute_center_cb,
NULL);
gtk_widget_install_accelerator(menu_item,
accelerator_table,
"activate",'R',GDK_MOD1_MASK);
gtk_widget_add_accelerator(menu_item,
"activate",
accel_group,
'R', GDK_MOD1_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menu_item = gtk_menu_item_new_with_label("Undo");
gtk_menu_append(GTK_MENU(ifsDesign->op_menu),menu_item);
@ -1176,9 +1184,11 @@ design_op_menu_create(GtkWidget *window)
gtk_signal_connect(GTK_OBJECT(menu_item),"activate",
(GtkSignalFunc)undo,
NULL);
gtk_widget_install_accelerator(menu_item,
accelerator_table,
"activate",'Z',GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menu_item,
"activate",
accel_group,
'Z', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menu_item = gtk_menu_item_new_with_label("Redo");
gtk_menu_append(GTK_MENU(ifsDesign->op_menu),menu_item);
@ -1186,9 +1196,11 @@ design_op_menu_create(GtkWidget *window)
gtk_signal_connect(GTK_OBJECT(menu_item),"activate",
(GtkSignalFunc)redo,
NULL);
gtk_widget_install_accelerator(menu_item,
accelerator_table,
"activate",'R',GDK_CONTROL_MASK);
gtk_widget_add_accelerator(menu_item,
"activate",
accel_group,
'R', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
}
static void
@ -1845,7 +1857,7 @@ undo_update(gint el)
{
AffElement *elem;
/* initialize */
elem = NULL;
if (!undo_ring[(undo_start+undo_cur)%UNDO_LEVELS].elements[el])
@ -2343,7 +2355,7 @@ value_pair_destroy_callback (GtkWidget *widget,
gtk_object_unref (GTK_OBJECT (value_pair->scale));
gtk_object_unref (value_pair->adjustment);
}
static void
design_op_callback (GtkWidget *widget, gpointer data)
{

View File

@ -511,14 +511,12 @@ clientname_hash (gpointer key)
static void
server_log (gchar *format, ...)
{
va_list args, args2;
va_list args;
char *buf;
va_start (args, format);
va_start (args2, format);
buf = g_vsprintf (format, &args, &args2);
buf = g_strdup_vprintf (format, args);
va_end (args);
va_end (args2);
fputs (buf, server_log_file);
if (server_log_file != stdout)