diff --git a/ChangeLog b/ChangeLog index 8f87c91fc7..7a1f472097 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,63 @@ +2000-01-25 Michael Natterer + + * configure.in + * po-plug-ins/POTFILES.in + * plug-ins/common/Makefile.am + * plug-ins/common/plugin-defs.pl + * plug-ins/megawidget/*: removed. (There were only 3 functions + left which were used by ~5 plugins, so I moved the resp. functions + to the plugins). More preview stuff to come... + + * app/airbrush_blob.c + * modules/colorsel_triangle.c + * modules/colorsel_water.c: use G_PI instead of M_PI. + + * app/procedural_db.h + * libgimp/gimpenums.h + * plug-ins/script-fu/script-fu-constants.c + * tools/pdbgen/enums.pl: new PDB return value STATUS_CANCEL which + indicates that "Cancel" was pressed in a plugin dialog. (Useful + only for file load/save plugins). + + * app/fileops.[ch] + * app/menus.c: changes to handle STATUS_CANCEL correctly. Did some + code cleanup in fileops.[ch]. Pop up a warning if File->Save + failed. + + * app/plug_in.c: return_val[0] is of type PDB_STATUS, not + PDB_INT32. + + * libgimp/gimpmath.h: new constant G_MAXRAND which equals to + RAND_MAX if it exists or to G_MAXINT otherwise. + + * libgimp/gimpwidgets.[ch]: new function gimp_random_seed_new() + which creates a spinbutton and a "Time" toggle. + Call the function which does the "set_sensitive" magic from the + radio button callback. + + * plug-ins/[75 plugins]: + + - Return STATUS_CANCEL in all file load/save dialogs if "Cancel" + was pressed. + - Standardized the file plugins' "run" functions. + - Use G_PI and G_MAXRAND everywhere. + - Added tons of scales and spinbuttons instead of text entries. + - Applied uniform packing/spacings all over the place. + - Reorganized some UIs (stuff like moving the preview to the top + left corner of the dialog). + - Removed many ui helper functions and callbacks and use the stuff + from libgimp instead. + - I tried not to restrict the range of possible values when I + replaced entries with spinbuttons/scales but may have failed, + though in some cases. Please test ;-) + - #include where appropriate and use it's + constants. + - Indentation, s/int/gint/ et.al., code cleanup. + + RFC: The plugins are definitely not useable with GIMP 1.0 any + more, so shouldn't we remove all the remaining compatibility + stuff ??? (like "#ifdef GIMP_HAVE_PARASITES") + Tue Jan 25 15:10:14 CET 2000 Stanislav Brabec * plug-ins/common/color_enhance.c: On request of @@ -5,7 +65,7 @@ Tue Jan 25 15:10:14 CET 2000 Stanislav Brabec gdouble, gint). Mon Jan 24 22:28:00 CET 2000 Seth Burgess - + * app/gdisplay_ops.c: Added a minimum width for shrink wrap; without it, it would map improperly and create a mess for small images. Its not a very shrunk wrap since the statusbar is so diff --git a/app/actions/plug-in-commands.c b/app/actions/plug-in-commands.c index f365b2e797..91392139e9 100644 --- a/app/actions/plug-in-commands.c +++ b/app/actions/plug-in-commands.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/airbrush_blob.c b/app/airbrush_blob.c index ef7d78cbc9..dc66c775ea 100644 --- a/app/airbrush_blob.c +++ b/app/airbrush_blob.c @@ -21,25 +21,19 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "airbrush_blob.h" #include -#include #include #include #include +#include + +#include "airbrush_blob.h" + #define ROUND(A) floor((A)+0.5) -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif /* M_PI */ - -#ifndef M_PI_H -#define M_PI_H 3.14159265358979323846/2 -#endif - #define SUBSAMPLE 8.0 #define SU 8.0 @@ -529,7 +523,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yt/xr); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -554,7 +548,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yt/xl); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -579,7 +573,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yb/xl); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -605,7 +599,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yb/xr); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -636,7 +630,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do { trig_initialized = 1; for (i=0; i<256; i++) - trig_table[i] = 0.5 + sin(i * (M_PI / 128.)) * (1 << TABLE_SHIFT); + trig_table[i] = 0.5 + sin(i * (G_PI / 128.0)) * (1 << TABLE_SHIFT); } @@ -977,7 +971,7 @@ create_air_blob (double xc, air_blob->minorcross_line.size = yt * 2; air_blob->minorcross_line.dist = 0.0; - air_blob->direction = M_PI_H; + air_blob->direction = G_PI_2; } else if (xr == xl) @@ -1105,7 +1099,7 @@ create_air_blob (double xc, ma_ang1 = atan(yt/xr); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1144,7 +1138,7 @@ create_air_blob (double xc, ma_ang1 = atan(yt/xl); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1178,7 +1172,7 @@ create_air_blob (double xc, ma_ang1 = atan(yb/xl); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1216,7 +1210,7 @@ create_air_blob (double xc, ma_ang1 = atan(yb/xr); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1292,12 +1286,12 @@ create_air_line(AirBlob *airblob) printf("Mi.size: %f\n",airblob->minor_line.size); */ - if (direction == M_PI_H || direction == M_PI) + if (direction == G_PI_2 || direction == G_PI) { direction = direction - 0.001; } - if (direction == -M_PI_H || direction == -M_PI) + if (direction == -G_PI_2 || direction == -G_PI) { direction = direction + 0.001; } @@ -1326,7 +1320,7 @@ create_air_line(AirBlob *airblob) } - else if(direction == M_PI_H) + else if(direction == G_PI_2) { @@ -1346,12 +1340,12 @@ create_air_line(AirBlob *airblob) airline->line[5].y = (ycenter + airblob->minorcross_line.size/2)/SUBSAMPLE; airline->nlines = 6; - printf("Hmm bummer M_PI_H\n"); + printf("Hmm bummer G_PI_2\n"); } - else if(direction == M_PI) + else if(direction == G_PI) { airline->line[0].x = (xcenter - airblob->maincross_line.dist)/SUBSAMPLE; @@ -1371,12 +1365,12 @@ create_air_line(AirBlob *airblob) airline->nlines = 6; - printf("Hmm bummer M_PI\n"); + printf("Hmm bummer G_PI\n"); } - else if(direction == -M_PI_H) + else if(direction == -G_PI_2) { airline->line[0].x = (xcenter - airblob->maincross_line.dist)/SUBSAMPLE; @@ -1396,14 +1390,14 @@ create_air_line(AirBlob *airblob) airline->nlines = 6; - printf("Hmm bummer -M_PI_H\n"); + printf("Hmm bummer -G_PI_2\n"); } - else if(direction == -M_PI) + else if(direction == -G_PI) { airline->line[0].x = (xcenter - airblob->maincross_line.dist)/SUBSAMPLE; @@ -1423,13 +1417,13 @@ create_air_line(AirBlob *airblob) airline->nlines = 6; - printf("Hmm bummer -M_PI\n"); + printf("Hmm bummer -G_PI\n"); } - else if ((direction < M_PI) && (direction > M_PI_H)) + else if ((direction < G_PI) && (direction > G_PI_2)) { @@ -1440,7 +1434,7 @@ create_air_line(AirBlob *airblob) ma_angsupport = atan(airblob->maincross_line.size/2/airblob->maincross_line.dist); mi_angsupport = atan(airblob->minorcross_line.size/2/airblob->minorcross_line.dist); - iang = airblob->direction_abs - M_PI_H; + iang = airblob->direction_abs - G_PI_2; airline->line[0].x = (xcenter - sin(iang + ma_angsupport) * masupport)/SUBSAMPLE; airline->line[0].y = (ycenter - cos(iang + ma_angsupport) * masupport)/SUBSAMPLE; @@ -1477,7 +1471,7 @@ create_air_line(AirBlob *airblob) } - else if ((direction < M_PI_H) && (direction > 0.0)) + else if ((direction < G_PI_2) && (direction > 0.0)) { @@ -1535,7 +1529,7 @@ create_air_line(AirBlob *airblob) } - else if ((direction < 0.0) && (direction > -M_PI_H)) + else if ((direction < 0.0) && (direction > -G_PI_2)) { @@ -1568,7 +1562,7 @@ create_air_line(AirBlob *airblob) } - else if ((direction < -M_PI_H) && (direction > -M_PI)) + else if ((direction < -G_PI_2) && (direction > -G_PI)) { @@ -1579,7 +1573,7 @@ create_air_line(AirBlob *airblob) ma_angsupport = atan(airblob->maincross_line.size/2/airblob->maincross_line.dist); mi_angsupport = atan(airblob->minorcross_line.size/2/airblob->minorcross_line.dist); - iang = fabs(airblob->direction_abs) - M_PI_H; + iang = fabs(airblob->direction_abs) - G_PI_2; airline->line[0].x = (xcenter - sin(iang + ma_angsupport) * masupport)/SUBSAMPLE; airline->line[0].y = (ycenter + cos(iang + ma_angsupport) * masupport)/SUBSAMPLE; @@ -1675,13 +1669,13 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int trans_airblob = airblob_new(1); - direction_last_abs = airblob_last->direction_abs + M_PI; - direction_present_abs = airblob_present->direction_abs + M_PI; + direction_last_abs = airblob_last->direction_abs + G_PI; + direction_present_abs = airblob_present->direction_abs + G_PI; idirection_abs = direction_present_abs - direction_last_abs; - direction_last = airblob_last->direction + M_PI_H; - direction_present = airblob_present->direction + M_PI_H; + direction_last = airblob_last->direction + G_PI_2; + direction_present = airblob_present->direction + G_PI_2; idirection = direction_present - direction_last; @@ -1709,7 +1703,7 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int Well we can't know if the users is painting up/down or if she is painting a circle at high speed. As you may notice it be so that the last airblob has - a direction more or less M_PI rad differernt from the + a direction more or less G_PI rad differernt from the present airblob. But we can't know if she tured the airbrush quickly (so that there was no mouse capture during the turn) or if she paints just up and down the @@ -1721,40 +1715,40 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int */ - if ((fabs(idirection_abs) > (M_PI - 0.1571)) && (fabs(idirection_abs) < (M_PI + 0.1571))) + if ((fabs(idirection_abs) > (G_PI - 0.1571)) && (fabs(idirection_abs) < (G_PI + 0.1571))) { /* We asume that the artist meant to paint in a "strait line" by just tilting the airbrush*/ - idirection_abs = idirection_abs - M_PI; + idirection_abs = idirection_abs - G_PI; if ((idirection_abs * dist) > (idirection_abs/2)) { - if ((direction_present_abs - idirection_abs * dist) > 2 * M_PI) + if ((direction_present_abs - idirection_abs * dist) > 2 * G_PI) { - trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - 2 * G_PI - G_PI; } else if ((direction_present_abs - idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - G_PI; } } else { - if ((direction_present_abs + idirection_abs * dist) > 2 * M_PI) + if ((direction_present_abs + idirection_abs * dist) > 2 * G_PI) { - trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - 2 * G_PI - G_PI; } else if ((direction_present_abs + idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - G_PI; } } @@ -1769,19 +1763,19 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int } - else if (fabs(idirection_abs) < (M_PI - 0.1571)) + else if (fabs(idirection_abs) < (G_PI - 0.1571)) { - if ((direction_last_abs + idirection_abs * dist) > 2*M_PI) + if ((direction_last_abs + idirection_abs * dist) > 2*G_PI) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * G_PI - G_PI; } else if((direction_last_abs + idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - G_PI; } trans_airblob->main_line.size = main_line_last + ((main_line_present - main_line_last) * dist); @@ -1798,19 +1792,19 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int /* We asume that the artist always travels the shortest way around the "clock" */ - idirection_abs = idirection_abs - M_PI; + idirection_abs = idirection_abs - G_PI; - if ((direction_last_abs + idirection_abs * dist) > 2*M_PI) + if ((direction_last_abs + idirection_abs * dist) > 2*G_PI) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * G_PI - G_PI; } else if((direction_last_abs + idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - G_PI; } trans_airblob->main_line.size = main_line_last + ((main_line_present - main_line_last) * dist); diff --git a/app/fileops.c b/app/fileops.c index 677fc96248..4dc890cdf9 100644 --- a/app/fileops.c +++ b/app/fileops.c @@ -71,47 +71,59 @@ struct _OverwriteBox gchar *raw_filename; }; -static void file_overwrite (char *filename, - char *raw_filename); -static void file_overwrite_yes_callback (GtkWidget *, gpointer); -static void file_overwrite_no_callback (GtkWidget *, gpointer); +static void file_overwrite (gchar *filename, + gchar *raw_filename); +static void file_overwrite_yes_callback (GtkWidget *widget, + gpointer data); +static void file_overwrite_no_callback (GtkWidget *widget, + gpointer data); -static GimpImage * file_open_image (char *filename, - char *raw_filename, - RunModeType runmode); +static GimpImage * file_open_image (gchar *filename, + gchar *raw_filename, + RunModeType runmode, + gint *status); -static void genbutton_callback (GtkWidget *, gpointer); +static void file_open_genbutton_callback (GtkWidget *widget, + gpointer data); -static void file_open_clistrow_callback (GtkWidget *, gint); -static void file_open_ok_callback (GtkWidget *, gpointer); -static void file_save_ok_callback (GtkWidget *, gpointer); +static void file_open_clistrow_callback (GtkWidget *widget, + gint row); -static void file_dialog_show (GtkWidget *filesel); -static int file_dialog_hide (GtkWidget *filesel); -static void file_update_name (PlugInProcDef *proc, - GtkWidget *filesel); -static void file_load_type_callback (GtkWidget *, gpointer); -static void file_save_type_callback (GtkWidget *, gpointer); +static void file_open_ok_callback (GtkWidget *widget, + gpointer data); -static void file_convert_string (char *instr, - char *outmem, - int maxmem, - int *nmem); +static void file_save_ok_callback (GtkWidget *widget, + gpointer data); -static int file_check_single_magic (char *offset, - char *type, - char *value, - int headsize, +static void file_dialog_show (GtkWidget *filesel); +static int file_dialog_hide (GtkWidget *filesel); +static void file_update_name (PlugInProcDef *proc, + GtkWidget *filesel); + +static void file_open_type_callback (GtkWidget *widget, + gpointer data); +static void file_save_type_callback (GtkWidget *widget, + gpointer data); + +static void file_convert_string (gchar *instr, + gchar *outmem, + gint maxmem, + gint *nmem); + +static int file_check_single_magic (gchar *offset, + gchar *type, + gchar *value, + gint headsize, guchar *file_head, FILE *ifp); static int file_check_magic_list (GSList *magics_list, - int headsize, + gint headsize, guchar *head, FILE *ifp); static void file_update_menus (GSList *procs, - int image_type); + gint image_type); static GtkWidget *fileload = NULL; @@ -139,23 +151,6 @@ static GimpImage *the_gimage = NULL; extern GSList *display_list; /* from gdisplay.c */ -#define FILE_ERR_MESSAGE(str) G_STMT_START{ \ - if (message_handler == MESSAGE_BOX) \ - gimp_message_box ((str), file_message_box_close_callback, (void *) fs); \ - else \ - g_message (str); \ - gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); }G_STMT_END - -static void -file_message_box_close_callback (GtkWidget *widget, - gpointer data) -{ - GtkFileSelection *fs; - - fs = (GtkFileSelection *) data; - - gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); -} void file_ops_pre_init (void) @@ -172,13 +167,11 @@ file_ops_post_init (void) load_procs = g_slist_reverse (load_procs); save_procs = g_slist_reverse (save_procs); - tmp = load_procs; - while (tmp) + for (tmp = load_procs; tmp; tmp = g_slist_next (tmp)) { gchar *help_page; file_proc = tmp->data; - tmp = tmp->next; help_page = g_strconcat ("filters/", g_basename (file_proc->prog), @@ -186,24 +179,22 @@ file_ops_post_init (void) NULL); g_strdown (help_page); - entry.entry.path = file_proc->menu_path; - entry.entry.accelerator = NULL; - entry.entry.callback = file_load_type_callback; + entry.entry.path = file_proc->menu_path; + entry.entry.accelerator = NULL; + entry.entry.callback = file_open_type_callback; entry.entry.callback_action = 0; - entry.entry.item_type = NULL; - entry.help_page = help_page; - entry.description = NULL; + entry.entry.item_type = NULL; + entry.help_page = help_page; + entry.description = NULL; menus_create_item_from_full_path (&entry, file_proc); } - tmp = save_procs; - while (tmp) + for (tmp = save_procs; tmp; tmp = g_slist_next (tmp)) { gchar *help_page; file_proc = tmp->data; - tmp = tmp->next; help_page = g_strconcat ("filters/", g_basename (file_proc->prog), @@ -211,13 +202,13 @@ file_ops_post_init (void) NULL); g_strdown (help_page); - entry.entry.path = file_proc->menu_path; - entry.entry.accelerator = NULL; - entry.entry.callback = file_save_type_callback; + entry.entry.path = file_proc->menu_path; + entry.entry.accelerator = NULL; + entry.entry.callback = file_save_type_callback; entry.entry.callback_action = 0; - entry.entry.item_type = NULL; - entry.help_page = help_page; - entry.description = NULL; + entry.entry.item_type = NULL; + entry.help_page = help_page; + entry.description = NULL; menus_create_item_from_full_path (&entry, file_proc); } @@ -227,12 +218,6 @@ void file_open_callback (GtkWidget *widget, gpointer data) { - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *option_menu; - GtkWidget *load_menu; - GtkWidget *open_options_genbutton; - if (!fileload) { fileload = gtk_file_selection_new (_("Load Image")); @@ -248,11 +233,13 @@ file_open_callback (GtkWidget *widget, "clicked", GTK_SIGNAL_FUNC (file_dialog_hide), GTK_OBJECT (fileload)); - gtk_signal_connect (GTK_OBJECT (fileload), - "delete_event", + gtk_signal_connect (GTK_OBJECT (fileload), "delete_event", GTK_SIGNAL_FUNC (file_dialog_hide), NULL); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileload)->ok_button), "clicked", (GtkSignalFunc) file_open_ok_callback, fileload); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileload)->ok_button), + "clicked", + GTK_SIGNAL_FUNC (file_open_ok_callback), + fileload); gtk_quit_add_destroy (1, GTK_OBJECT (fileload)); gtk_clist_set_selection_mode (GTK_CLIST @@ -260,7 +247,10 @@ file_open_callback (GtkWidget *widget, GTK_SELECTION_EXTENDED); /* Catch file-clist clicks so we can update the preview thumbnail */ - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileload)->file_list), "select_row", (GtkSignalFunc) file_open_clistrow_callback, fileload); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileload)->file_list), + "select_row", + GTK_SIGNAL_FUNC (file_open_clistrow_callback), + fileload); /* Connect the "F1" help key */ gimp_help_connect_help_accel (fileload, @@ -280,145 +270,113 @@ file_open_callback (GtkWidget *widget, if (!open_options) { - GtkWidget* frame; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *option_menu; + GtkWidget *load_menu; + GtkWidget *open_options_genbutton; open_options = gtk_hbox_new (TRUE, 1); /* format-chooser frame */ - frame = gtk_frame_new (_("Determine file type")); - { - gtk_frame_set_shadow_type (GTK_FRAME (frame), - GTK_SHADOW_ETCHED_IN); - - vbox = gtk_vbox_new (FALSE, 0); - { - gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); - gtk_container_add (GTK_CONTAINER (frame), vbox); + frame = gtk_frame_new (_("Determine File Type")); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_start (GTK_BOX (open_options), frame, TRUE, TRUE, 4); - hbox = gtk_hbox_new (FALSE, 1); - { - gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); - - option_menu = gtk_option_menu_new (); - gtk_box_pack_start (GTK_BOX (hbox), option_menu, FALSE, TRUE, 0); - gtk_widget_show (option_menu); - - menus_get_load_menu (&load_menu, NULL); - gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), load_menu); - gtk_box_pack_start (GTK_BOX (open_options), frame, TRUE, TRUE, 4); - } - gtk_widget_show (hbox); - } - gtk_widget_show (vbox); - } + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); + + option_menu = gtk_option_menu_new (); + gtk_box_pack_start (GTK_BOX (hbox), option_menu, FALSE, FALSE, 0); + gtk_widget_show (option_menu); + + menus_get_load_menu (&load_menu, NULL); + gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), load_menu); + + gtk_widget_show (vbox); gtk_widget_show (frame); /* Preview frame */ - frame = gtk_frame_new (""); - open_options_frame = frame; + open_options_frame = frame = gtk_frame_new (""); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_end (GTK_BOX (open_options), frame, FALSE, TRUE, 4); + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + hbox = gtk_hbox_new (TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); + + open_options_genbutton = gtk_button_new (); + gtk_signal_connect (GTK_OBJECT (open_options_genbutton), "clicked", + GTK_SIGNAL_FUNC (file_open_genbutton_callback), + fileload); + gtk_box_pack_start (GTK_BOX (hbox), open_options_genbutton, + TRUE, FALSE, 0); + gtk_widget_show (open_options_genbutton); + + open_options_fixed = gtk_fixed_new (); + gtk_widget_set_usize (open_options_fixed, 80, 60); + gtk_container_add (GTK_CONTAINER (GTK_BIN (open_options_genbutton)), + open_options_fixed); + gtk_widget_show (open_options_fixed); + { - gtk_frame_set_shadow_type (GTK_FRAME (frame), - GTK_SHADOW_ETCHED_IN); - gtk_box_pack_end (GTK_BOX (open_options), frame, FALSE, TRUE, 4); - - vbox = gtk_vbox_new (FALSE, 1); - { - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), vbox); + GtkWidget* abox; + GtkWidget* sbox; + GtkWidget* align; - hbox = gtk_hbox_new (TRUE, 1); - { - gtk_container_set_border_width (GTK_CONTAINER (hbox), 0); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + sbox = gtk_vbox_new (TRUE, 0); + gtk_container_add (GTK_CONTAINER (open_options_fixed), sbox); + gtk_widget_show (sbox); - open_options_genbutton = gtk_button_new(); - { - gtk_signal_connect (GTK_OBJECT (open_options_genbutton), - "clicked", - (GtkSignalFunc) genbutton_callback, - fileload); - gtk_box_pack_end (GTK_BOX (hbox), open_options_genbutton, - TRUE, FALSE, 0); - } - gtk_widget_show (open_options_genbutton); - - open_options_fixed = gtk_fixed_new (); - { - GtkWidget* abox; - GtkWidget* sbox; - - gtk_widget_set_usize (open_options_fixed, 80, 60); - gtk_container_add (GTK_CONTAINER (GTK_BIN (open_options_genbutton)), open_options_fixed); - - sbox = gtk_vbox_new(TRUE, 0); - { - GtkWidget* align; + align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_widget_set_usize (align, 80, 60); + gtk_box_pack_start (GTK_BOX (sbox), align, FALSE, TRUE, 0); + gtk_widget_show (align); - gtk_container_add (GTK_CONTAINER (open_options_fixed), - GTK_WIDGET (sbox)); + abox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (align), abox); + gtk_widget_show (abox); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); - { - gtk_widget_set_usize (align, 80, 60); - - gtk_box_pack_start (GTK_BOX (sbox), - GTK_WIDGET (align), - FALSE, TRUE, 0); - - abox = gtk_hbox_new (FALSE, 0); - { - gtk_container_add (GTK_CONTAINER (align), abox); - - open_options_preview = GTK_PREVIEW (gtk_preview_new - (GTK_PREVIEW_COLOR)); - { - gtk_box_pack_start (GTK_BOX (abox), - GTK_WIDGET (open_options_preview), - FALSE, TRUE, 0); - } - gtk_widget_show(GTK_WIDGET (open_options_preview)); - - open_options_genbuttonlabel = gtk_label_new(_("generate\npreview")); - { - gtk_box_pack_start (GTK_BOX (abox), - GTK_WIDGET (open_options_genbuttonlabel), - FALSE, TRUE, 0); - } - gtk_widget_show(GTK_WIDGET (open_options_genbuttonlabel)); - } - gtk_widget_show(abox); - } - gtk_widget_show(align); - } - gtk_widget_show(sbox); - } - gtk_widget_show (open_options_fixed); - } - gtk_widget_show (hbox); + open_options_preview = + GTK_PREVIEW (gtk_preview_new (GTK_PREVIEW_COLOR)); + gtk_box_pack_start (GTK_BOX (abox), GTK_WIDGET (open_options_preview), + FALSE, TRUE, 0); + gtk_widget_show (GTK_WIDGET (open_options_preview)); - open_options_label = gtk_label_new (""); - { - gtk_box_pack_end (GTK_BOX (vbox), open_options_label, - FALSE, TRUE, 0); - } - gtk_widget_show (open_options_label); - } - gtk_widget_show (vbox); + open_options_genbuttonlabel = gtk_label_new (_("Generate\nPreview")); + gtk_box_pack_start (GTK_BOX (abox), open_options_genbuttonlabel, + FALSE, TRUE, 0); + gtk_widget_show (open_options_genbuttonlabel); } + + open_options_label = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX (vbox), open_options_label, FALSE, FALSE, 0); + gtk_widget_show (open_options_label); + + gtk_widget_show (vbox); gtk_widget_show (frame); - /* pack the containing open_options hbox into the load-dialog */ + /* pack the containing open_options hbox into the open-dialog */ gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (fileload)->main_vbox), - open_options, FALSE, FALSE, 1); + open_options, FALSE, FALSE, 0); } gtk_frame_set_label (GTK_FRAME(open_options_frame), _("Preview")); - gtk_label_set_text (GTK_LABEL(open_options_label), _("No selection.")); + gtk_label_set_text (GTK_LABEL(open_options_label), _("No Selection.")); - gtk_widget_show (GTK_WIDGET(open_options_genbuttonlabel)); - gtk_widget_hide (GTK_WIDGET(open_options_preview)); - gtk_widget_set_sensitive (GTK_WIDGET(open_options_frame), FALSE); + gtk_widget_show (GTK_WIDGET (open_options_genbuttonlabel)); + gtk_widget_hide (GTK_WIDGET (open_options_preview)); + gtk_widget_set_sensitive (GTK_WIDGET (open_options_frame), FALSE); gtk_widget_show (open_options); @@ -432,7 +390,8 @@ file_save_callback (GtkWidget *widget, GDisplay *gdisplay; gdisplay = gdisplay_active (); - if (!gdisplay) return; + if (!gdisplay) + return; /* Only save if the gimage has been modified */ if (!trust_dirty_flag || gdisplay->gimage->dirty != 0) @@ -443,8 +402,21 @@ file_save_callback (GtkWidget *widget, } else { - file_save (gdisplay->gimage, gimage_filename (gdisplay->gimage), - g_basename (gimage_filename(gdisplay->gimage)), 2); + gchar *raw_filename; + gint status; + + raw_filename = g_basename (gimage_filename (gdisplay->gimage)); + + status = file_save (gdisplay->gimage, + gimage_filename (gdisplay->gimage), + raw_filename, + RUN_WITH_LAST_VALS); + + if (status != PDB_SUCCESS && + status != PDB_CANCEL) + { + g_message (_("Save failed: %s"), raw_filename); + } } } } @@ -453,14 +425,12 @@ void file_save_as_callback (GtkWidget *widget, gpointer data) { - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *option_menu; - GtkWidget *save_menu; GDisplay *gdisplay; gdisplay = gdisplay_active (); - if (!gdisplay) return; + if (!gdisplay) + return; + the_gimage = gdisplay->gimage; if (!filesave) @@ -473,17 +443,16 @@ file_save_as_callback (GtkWidget *widget, gtk_container_set_border_width (GTK_CONTAINER (GTK_FILE_SELECTION (filesave)->button_area), 2); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (filesave)->cancel_button), - "clicked", - GTK_SIGNAL_FUNC (file_dialog_hide), - GTK_OBJECT (filesave)); - gtk_signal_connect (GTK_OBJECT (filesave), - "delete_event", + "clicked", + GTK_SIGNAL_FUNC (file_dialog_hide), + GTK_OBJECT (filesave)); + gtk_signal_connect (GTK_OBJECT (filesave), "delete_event", GTK_SIGNAL_FUNC (file_dialog_hide), NULL); - gtk_signal_connect - (GTK_OBJECT (GTK_FILE_SELECTION (filesave)->ok_button), "clicked", - (GtkSignalFunc) file_save_ok_callback, - filesave); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesave)->ok_button), + "clicked", + GTK_SIGNAL_FUNC (file_save_ok_callback), + filesave); gtk_quit_add_destroy (1, GTK_OBJECT (filesave)); /* Connect the "F1" help key */ @@ -506,17 +475,25 @@ file_save_as_callback (GtkWidget *widget, if (!save_options) { - save_options = gtk_frame_new (_("Save Options")); - gtk_frame_set_shadow_type (GTK_FRAME (save_options), - GTK_SHADOW_ETCHED_IN); + GtkWidget *frame; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *option_menu; + GtkWidget *save_menu; - hbox = gtk_hbox_new (FALSE, 1); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); - gtk_container_add (GTK_CONTAINER (save_options), hbox); + save_options = gtk_hbox_new (TRUE, 1); + + frame = gtk_frame_new (_("Save Options")); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_start (GTK_BOX (save_options), frame, TRUE, TRUE, 4); + + hbox = gtk_hbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 4); + gtk_container_add (GTK_CONTAINER (frame), hbox); gtk_widget_show (hbox); - label = gtk_label_new (_("Determine file type:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0); + label = gtk_label_new (_("Determine File Type:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); option_menu = gtk_option_menu_new (); @@ -525,11 +502,15 @@ file_save_as_callback (GtkWidget *widget, menus_get_save_menu (&save_menu, NULL); gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), save_menu); + + gtk_widget_show (frame); + + /* pack the containing save_options hbox into the save-dialog */ gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (filesave)->main_vbox), - save_options, FALSE, FALSE, 5); + save_options, FALSE, FALSE, 0); } - switch (drawable_type(gimage_active_drawable(gdisplay->gimage))) + switch (drawable_type (gimage_active_drawable (gdisplay->gimage))) { case RGB_GIMAGE: file_update_menus (save_procs, PLUG_IN_RGB_IMAGE); @@ -560,20 +541,24 @@ void file_revert_callback (GtkWidget *widget, gpointer data) { - GDisplay *gdisplay; + GDisplay *gdisplay; GimpImage *gimage; - gchar *filename = NULL; + gchar *filename = NULL; + gint status; gdisplay = gdisplay_active (); - if (!gdisplay) return; + if (!gdisplay) + return; if (gdisplay->gimage->has_filename == FALSE) - g_message (_("Can't revert. No filename associated with this image")); + { + g_message (_("Can't revert. No filename associated with this image")); + } else { filename = gimage_filename (gdisplay->gimage); - gimage = file_open_image (filename, filename, RUN_INTERACTIVE); + gimage = file_open_image (filename, filename, RUN_INTERACTIVE, &status); if (gimage != NULL) { @@ -581,13 +566,15 @@ file_revert_callback (GtkWidget *widget, gdisplay_reconnect (gdisplay, gimage); gimp_image_clean_all (gimage); } - else - g_message (_("Revert failed.")); + else if (status != PDB_CANCEL) + { + g_message (_("Revert failed.")); + } } } void -file_load_by_extension_callback (GtkWidget *widget, +file_open_by_extension_callback (GtkWidget *widget, gpointer data) { load_file_proc = NULL; @@ -606,8 +593,8 @@ file_update_name (PlugInProcDef *proc, { if (proc->extensions_list) { - char* text = gtk_entry_get_text (GTK_ENTRY(GTK_FILE_SELECTION(filesel)->selection_entry)); - char* last_dot = strrchr (text, '.'); + gchar *text = gtk_entry_get_text (GTK_ENTRY (GTK_FILE_SELECTION (filesel)->selection_entry)); + gchar *last_dot = strrchr (text, '.'); GString *s; if (last_dot == text || !text[0]) @@ -619,19 +606,19 @@ file_update_name (PlugInProcDef *proc, g_string_truncate (s, last_dot-text); g_string_append (s, "."); - g_string_append (s, (char*) proc->extensions_list->data); + g_string_append (s, (gchar *) proc->extensions_list->data); - gtk_entry_set_text (GTK_ENTRY(GTK_FILE_SELECTION(filesel)->selection_entry), s->str); + gtk_entry_set_text (GTK_ENTRY (GTK_FILE_SELECTION (filesel)->selection_entry), s->str); g_string_free (s, TRUE); } } static void -file_load_type_callback (GtkWidget *widget, +file_open_type_callback (GtkWidget *widget, gpointer data) { - PlugInProcDef* proc = (PlugInProcDef *) data; + PlugInProcDef *proc = (PlugInProcDef *) data; file_update_name (proc, fileload); @@ -642,25 +629,25 @@ static void file_save_type_callback (GtkWidget *widget, gpointer data) { - PlugInProcDef* proc = (PlugInProcDef *) data; + PlugInProcDef *proc = (PlugInProcDef *) data; file_update_name (proc, filesave); save_file_proc = proc; } -static GimpImage* -file_open_image (char *filename, - char *raw_filename, - RunModeType runmode) +static GimpImage * +file_open_image (gchar *filename, + gchar *raw_filename, + RunModeType runmode, + gint *status) { PlugInProcDef *file_proc; ProcRecord *proc; - Argument *args; - Argument *return_vals; - int gimage_id; - gboolean status; - int i; + Argument *args; + Argument *return_vals; + gint gimage_id; + gint i; file_proc = load_file_proc; if (!file_proc) @@ -674,41 +661,46 @@ file_open_image (char *filename, proc = &file_proc->db_info; - args = g_new (Argument, proc->num_args); - memset (args, 0, (sizeof (Argument) * proc->num_args)); + args = g_new0 (Argument, proc->num_args); for (i = 0; i < proc->num_args; i++) args[i].arg_type = proc->args[i].arg_type; - args[0].value.pdb_int = runmode; + args[0].value.pdb_int = runmode; args[1].value.pdb_pointer = filename; args[2].value.pdb_pointer = raw_filename; return_vals = procedural_db_execute (proc->name, args); - status = (return_vals[0].value.pdb_int == PDB_SUCCESS); + + *status = return_vals[0].value.pdb_int; gimage_id = return_vals[1].value.pdb_int; procedural_db_destroy_args (return_vals, proc->num_values); g_free (args); - if (status) + if (*status == PDB_SUCCESS) { - layer_invalidate_previews(gimage_get_ID(gimage_id)); - channel_invalidate_previews(gimage_get_ID(gimage_id)); + layer_invalidate_previews (gimage_get_ID (gimage_id)); + channel_invalidate_previews (gimage_get_ID (gimage_id)); + return pdb_id_to_image (gimage_id); } - else - return NULL; + + return NULL; } -int -file_open (char *filename, - char *raw_filename) +gint +file_open (gchar *filename, + gchar *raw_filename) { GimpImage *gimage; GDisplay *gdisplay; + gint status; - if ((gimage = file_open_image (filename, raw_filename, RUN_INTERACTIVE)) != NULL) + if ((gimage = file_open_image (filename, + raw_filename, + RUN_INTERACTIVE, + &status)) != NULL) { /* enable & clear all undo steps */ gimage_enable_undo (gimage); @@ -725,15 +717,13 @@ file_open (char *filename, idea_add (filename); menus_last_opened_add (filename); - - return TRUE; } - return FALSE; + return status; } TempBuf * -make_thumb_tempbuf (GimpImage* gimage) +make_thumb_tempbuf (GimpImage *gimage) { gint w,h; @@ -745,18 +735,18 @@ make_thumb_tempbuf (GimpImage* gimage) else { /* Ratio molesting to fit within .xvpic thumbnail size limits */ - if (60*gimage->width < 80*gimage->height) + if (60 * gimage->width < 80 * gimage->height) { h = 60; - w = (60*gimage->width)/gimage->height; - if (w==0) + w = (60 * gimage->width) / gimage->height; + if (w == 0) w = 1; } else { w = 80; - h = (80*gimage->height)/gimage->width; - if (h==0) + h = (80 * gimage->height) / gimage->width; + if (h == 0) h = 1; } } @@ -770,8 +760,8 @@ static guchar * make_RGBbuf_from_tempbuf (TempBuf *tempbuf, gint *width_rtn, gint *height_rtn) -{ - int i,j,w,h; +{ + gint i,j,w,h; guchar* tbd; guchar* ptr; guchar* rtn = NULL; @@ -834,10 +824,9 @@ make_RGBbuf_from_tempbuf (TempBuf *tempbuf, g_warning("UNKNOWN TempBuf width in make_RGBbuf_from_tempbuf()"); } - return(rtn); + return (rtn); } - gboolean file_save_thumbnail (GimpImage *gimage, const char *full_source_filename, @@ -845,13 +834,13 @@ file_save_thumbnail (GimpImage *gimage, { gint i,j; gint w,h; - unsigned char* tbd; + guchar *tbd; gchar* pathname; gchar* filename; gchar* xvpathname; gchar* thumbnailname; GimpImageBaseType basetype; - FILE* fp; + FILE *fp; struct stat statbuf; if (stat(full_source_filename, &statbuf) != 0) @@ -862,22 +851,22 @@ file_save_thumbnail (GimpImage *gimage, if (gimp_image_preview_valid (gimage, GRAY_CHANNEL)) { /* just for debugging */ - printf("(incidentally, gimage already has a valid preview - %dx%d)\n", - gimage->comp_preview->width, - gimage->comp_preview->height); + g_print ("(incidentally, gimage already has a valid preview - %dx%d)\n", + gimage->comp_preview->width, + gimage->comp_preview->height); } - pathname = g_dirname(full_source_filename); - filename = g_basename(full_source_filename); /* Don't free! */ + pathname = g_dirname (full_source_filename); + filename = g_basename (full_source_filename); /* Don't free! */ - xvpathname = g_strconcat(pathname, G_DIR_SEPARATOR_S, ".xvpics", - NULL); + xvpathname = g_strconcat (pathname, G_DIR_SEPARATOR_S, ".xvpics", + NULL); thumbnailname = g_strconcat (xvpathname, G_DIR_SEPARATOR_S, filename, NULL); - tbd = temp_buf_data(tempbuf); + tbd = temp_buf_data (tempbuf); w = tempbuf->width; h = tempbuf->height; @@ -885,26 +874,26 @@ file_save_thumbnail (GimpImage *gimage, mkdir (xvpathname, 0755); - fp = fopen(thumbnailname,"wb"); - g_free(pathname); - g_free(xvpathname); - g_free(thumbnailname); + fp = fopen (thumbnailname, "wb"); + g_free (pathname); + g_free (xvpathname); + g_free (thumbnailname); if (fp) { basetype = gimp_image_base_type(gimage); - fprintf(fp, - "P7 332\n#IMGINFO:%dx%d %s (%d %s)\n" - "#END_OF_COMMENTS\n%d %d 255\n", - gimage->width, gimage->height, - (basetype == RGB) ? "RGB" : - (basetype == GRAY) ? "Greyscale" : - (basetype == INDEXED) ? "Indexed" : - "(UNKNOWN COLOUR TYPE)", - (int)statbuf.st_size, - (statbuf.st_size == 1) ? "byte" : "bytes", - w, h); + fprintf (fp, + "P7 332\n#IMGINFO:%dx%d %s (%d %s)\n" + "#END_OF_COMMENTS\n%d %d 255\n", + gimage->width, gimage->height, + (basetype == RGB) ? "RGB" : + (basetype == GRAY) ? "Greyscale" : + (basetype == INDEXED) ? "Indexed" : + "(UNKNOWN COLOUR TYPE)", + (int)statbuf.st_size, + (statbuf.st_size == 1) ? "byte" : "bytes", + w, h); switch (basetype) { @@ -989,23 +978,23 @@ file_save_thumbnail (GimpImage *gimage, return (TRUE); } -int -file_save (GimpImage *gimage, - char *filename, - char *raw_filename, - gint mode) +gint +file_save (GimpImage *gimage, + char *filename, + char *raw_filename, + RunModeType mode) { PlugInProcDef *file_proc; ProcRecord *proc; - Argument *args; - Argument *return_vals; - int return_val; - int i; + Argument *args; + Argument *return_vals; + gint status; + gint i; if (gimage_active_drawable (gimage) == NULL) return FALSE; - file_proc = gimage_get_save_proc(gimage); + file_proc = gimage_get_save_proc (gimage); if (!file_proc) file_proc = file_proc_find (save_procs, raw_filename); @@ -1015,22 +1004,22 @@ file_save (GimpImage *gimage, proc = &file_proc->db_info; - args = g_new (Argument, proc->num_args); - memset (args, 0, (sizeof (Argument) * proc->num_args)); + args = g_new0 (Argument, proc->num_args); for (i = 0; i < proc->num_args; i++) args[i].arg_type = proc->args[i].arg_type; - args[0].value.pdb_int = mode; - args[1].value.pdb_int = pdb_image_to_id(gimage); - args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gimage)); + args[0].value.pdb_int = mode; + args[1].value.pdb_int = pdb_image_to_id (gimage); + args[2].value.pdb_int = drawable_ID (gimage_active_drawable (gimage)); args[3].value.pdb_pointer = filename; args[4].value.pdb_pointer = raw_filename; return_vals = procedural_db_execute (proc->name, args); - return_val = (return_vals[0].value.pdb_int == PDB_SUCCESS); - if (return_val) + status = return_vals[0].value.pdb_int; + + if (status == PDB_SUCCESS) { /* set this image to clean */ gimage_clean_all (gimage); @@ -1056,7 +1045,7 @@ file_save (GimpImage *gimage, file_save_thumbnail (gimage, filename, tempbuf); } } - + /* set the image title */ gimp_image_set_filename (gimage, filename); /* note: 'filename' may have been free'd by above call! */ @@ -1065,13 +1054,12 @@ file_save (GimpImage *gimage, g_free (return_vals); g_free (args); - return return_val; + return status; } - /* The readXVThumb function source may be re-used under the XFree86-style license. */ -guchar* +guchar * readXVThumb (const gchar *fnam, gint *w, gint *h, @@ -1147,13 +1135,13 @@ readXVThumb (const gchar *fnam, return (NULL); } - buf = g_malloc((*w)*(*h)); + buf = g_malloc ((*w) * (*h)); - fread(buf, (*w)*(*h), 1, fp); + fread (buf, (*w) * (*h), 1, fp); + + fclose (fp); - fclose(fp); - - return(buf); + return (buf); } /* don't call with preview_fullname as parameter! will be clobbered! */ @@ -1175,7 +1163,6 @@ set_preview (const gchar *fullfname, gboolean thumb_may_be_outdated = FALSE; gboolean show_generate_label = TRUE; - pname = g_dirname (fullfname); fname = g_basename (fullfname); /* Don't free this! */ tname = g_strconcat (pname, G_DIR_SEPARATOR_S, ".xvpics", G_DIR_SEPARATOR_S, @@ -1186,8 +1173,8 @@ set_preview (const gchar *fullfname, /* If the file is newer than its thumbnail, the thumbnail may be out of date. */ - if ((stat(tname, &thumb_stat)==0) && - (stat(fullfname, &file_stat )==0)) + if ((stat (tname, &thumb_stat) == 0) && + (stat (fullfname, &file_stat ) == 0)) { if ((thumb_stat.st_mtime) < (file_stat.st_mtime)) { @@ -1195,12 +1182,11 @@ set_preview (const gchar *fullfname, } } - raw_thumb = readXVThumb(tname, &tnw, &tnh, &imginfo); + raw_thumb = readXVThumb (tname, &tnw, &tnh, &imginfo); g_free (tname); - gtk_frame_set_label (GTK_FRAME(open_options_frame), - fname); + gtk_frame_set_label (GTK_FRAME (open_options_frame), fname); if (preview_fullname) { @@ -1208,16 +1194,15 @@ set_preview (const gchar *fullfname, } preview_fullname = g_strdup (fullfname); - if (RGB_source) { gtk_preview_size (open_options_preview, RGB_w, RGB_h); - for (i=0; i>5)*255)/7; thumb_rgb[i*3+1] = (((raw_thumb[i]>>2)&7)*255)/7; thumb_rgb[i*3+2] = (((raw_thumb[i])&3)*255)/3; } - + gtk_preview_size (open_options_preview, tnw, tnh); - - for (i=0; istr); - g_string_free (s, TRUE); + g_message (_("Open failed: %s"), raw_filename); } + gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); /* * Now deal with multiple selections from the filesel clist @@ -1515,7 +1503,7 @@ file_open_ok_callback (GtkWidget *widget, while (row) { - if (GTK_CLIST_ROW(row)->state == GTK_STATE_SELECTED) + if (GTK_CLIST_ROW (row)->state == GTK_STATE_SELECTED) { if (gtk_clist_get_cell_type(GTK_CLIST(fs->file_list), rownum, 0) == GTK_CELL_TEXT) @@ -1534,12 +1522,11 @@ file_open_ok_callback (GtkWidget *widget, } mfilename = g_strdup (temp); - + err = stat (mfilename, &buf); - + if (! (err == 0 && (buf.st_mode & S_IFDIR))) { /* Is not directory. */ - if (err) { g_free (mfilename); @@ -1547,19 +1534,19 @@ file_open_ok_callback (GtkWidget *widget, G_DIR_SEPARATOR_S, temp, NULL); } - - if (file_open (mfilename, temp)) + + status = file_open (mfilename, temp); + + if (status == PDB_SUCCESS) { file_dialog_hide (data); - gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); } - else + else if (status != PDB_CANCEL) { - s = g_string_new (_("Open failed: ")); - g_string_append (s, temp); - FILE_ERR_MESSAGE (s->str); - g_string_free (s, TRUE); + g_message (_("Open failed: %s"), temp); } + + gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); } } } @@ -1584,10 +1571,10 @@ file_save_ok_callback (GtkWidget *widget, gpointer data) { GtkFileSelection *fs; - char* filename, *raw_filename; - GString* s; - struct stat buf; - int err; + gchar *filename; + gchar *raw_filename; + struct stat buf; + gint err; fs = GTK_FILE_SELECTION (data); filename = gtk_file_selection_get_filename (fs); @@ -1604,38 +1591,41 @@ file_save_ok_callback (GtkWidget *widget, g_string_append_c (s, G_DIR_SEPARATOR); gtk_file_selection_set_filename (fs, s->str); g_string_free (s, TRUE); - return; } else if (buf.st_mode & S_IFREG) { gtk_widget_set_sensitive (GTK_WIDGET (fs), FALSE); file_overwrite (g_strdup (filename), g_strdup (raw_filename)); - return; } else { - s = g_string_new (NULL); - g_string_sprintf (s, _("%s is an irregular file (%s)"), raw_filename, g_strerror(errno)); - } - } else { - gtk_widget_set_sensitive (GTK_WIDGET (fs), FALSE); - - gimage_set_save_proc(the_gimage, save_file_proc); - if (file_save (the_gimage, filename, raw_filename, 0)) - { - file_dialog_hide (data); - gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); - return; - } - else - { - s = g_string_new (_("Save failed: ")); - g_string_append (s, raw_filename); + g_message (_("%s is an irregular file (%s)"), + raw_filename, g_strerror (errno)); } } - FILE_ERR_MESSAGE (s->str); + else + { + gint status; - g_string_free (s, TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (fs), FALSE); + + gimage_set_save_proc (the_gimage, save_file_proc); + status = file_save (the_gimage, + filename, + raw_filename, + RUN_INTERACTIVE); + + if (status == PDB_SUCCESS) + { + file_dialog_hide (data); + } + else if (status != PDB_CANCEL) + { + g_message (_("Save failed: %s"), raw_filename); + } + + gtk_widget_set_sensitive (GTK_WIDGET (fs), TRUE); + } } static void @@ -1646,6 +1636,7 @@ file_dialog_show (GtkWidget *filesel) menus_set_sensitive ("/File/Save", FALSE); menus_set_sensitive ("/File/Save As...", FALSE); + gtk_widget_grab_focus (GTK_FILE_SELECTION (filesel)->selection_entry); gtk_widget_show (filesel); } @@ -1667,13 +1658,13 @@ file_dialog_hide (GtkWidget *filesel) } static void -file_overwrite (char *filename, - char *raw_filename) +file_overwrite (gchar *filename, + gchar *raw_filename) { OverwriteBox *overwrite_box; GtkWidget *vbox; GtkWidget *label; - char *overwrite_text; + gchar *overwrite_text; overwrite_box = g_new (OverwriteBox, 1); overwrite_text = g_strdup_printf (_("%s exists, overwrite?"), filename); @@ -1713,30 +1704,35 @@ file_overwrite_yes_callback (GtkWidget *widget, gpointer data) { OverwriteBox *overwrite_box; - GImage *gimage; + GImage *gimage; + gint status = PDB_EXECUTION_ERROR; overwrite_box = (OverwriteBox *) data; gtk_widget_destroy (overwrite_box->obox); - if ((gimage = the_gimage) != NULL && - file_save (the_gimage, overwrite_box->full_filename, overwrite_box->raw_filename, 0)) - { - the_gimage = NULL; - file_dialog_hide (filesave); - } - else - { - GString *s; - GtkWidget *fs; + if ((gimage = the_gimage) != NULL) + { + status = file_save (the_gimage, + overwrite_box->full_filename, + overwrite_box->raw_filename, + RUN_INTERACTIVE); - fs = filesave; - s = g_string_new (_("Save failed: ")); - g_string_append (s, overwrite_box->raw_filename); - FILE_ERR_MESSAGE (s->str); - g_string_free (s, TRUE); + if (status == PDB_SUCCESS) + { + the_gimage = NULL; + file_dialog_hide (filesave); + } } + if (status != PDB_SUCCESS && + status != PDB_CANCEL) + { + g_message (_("Save failed: %s"), overwrite_box->raw_filename); + } + + gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE); + g_free (overwrite_box->full_filename); g_free (overwrite_box->raw_filename); g_free (overwrite_box); @@ -1755,23 +1751,23 @@ file_overwrite_no_callback (GtkWidget *widget, g_free (overwrite_box->raw_filename); g_free (overwrite_box); - gtk_widget_set_sensitive (GTK_WIDGET(filesave), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (filesave), TRUE); } -PlugInProcDef* +PlugInProcDef * file_proc_find (GSList *procs, - char *filename) + gchar *filename) { PlugInProcDef *file_proc, *size_matched_proc; GSList *all_procs = procs; GSList *extensions; GSList *prefixes; - char *extension; - char *p1, *p2; + gchar *extension; + gchar *p1, *p2; FILE *ifp = NULL; - int head_size = -2, size_match_count = 0; - int match_val; - unsigned char head[256]; + gint head_size = -2, size_match_count = 0; + gint match_val; + guchar head[256]; size_matched_proc = NULL; @@ -1791,7 +1787,7 @@ file_proc_find (GSList *procs, { head_size = 0; if ((ifp = fopen (filename, "rb")) != NULL) - head_size = fread ((char *)head, 1, sizeof (head), ifp); + head_size = fread ((gchar *) head, 1, sizeof (head), ifp); } if (head_size >= 4) { @@ -1811,7 +1807,8 @@ file_proc_find (GSList *procs, } } if (ifp) fclose (ifp); - if (size_match_count == 1) return (size_matched_proc); + if (size_match_count == 1) + return (size_matched_proc); procs = all_procs; while (procs) @@ -1822,7 +1819,7 @@ file_proc_find (GSList *procs, for (prefixes = file_proc->prefixes_list; prefixes; prefixes = prefixes->next) { p1 = filename; - p2 = (char*) prefixes->data; + p2 = (gchar *) prefixes->data; if (strncmp (filename, prefixes->data, strlen (prefixes->data)) == 0) return file_proc; @@ -1838,7 +1835,7 @@ file_proc_find (GSList *procs, for (extensions = file_proc->extensions_list; extension && extensions; extensions = extensions->next) { p1 = extension; - p2 = (char*) extensions->data; + p2 = (gchar *) extensions->data; while (*p1 && *p2) { @@ -1856,16 +1853,16 @@ file_proc_find (GSList *procs, } static void -file_convert_string (char *instr, - char *outmem, - int maxmem, - int *nmem) +file_convert_string (gchar *instr, + gchar *outmem, + gint maxmem, + gint *nmem) { /* Convert a string in C-notation to array of char */ guchar *uin = (guchar *) instr; guchar *uout = (guchar *) outmem; guchar tmp[5], *tmpptr; - int k; + gint k; while ((*uin != '\0') && ((((char *)uout) - outmem) < maxmem)) { @@ -1905,23 +1902,23 @@ file_convert_string (char *instr, default : *(uout++) = *(uin++); break; } } - *nmem = ((char *)uout) - outmem; + *nmem = ((gchar *) uout) - outmem; } -static int -file_check_single_magic (char *offset, - char *type, - char *value, - int headsize, +static gint +file_check_single_magic (gchar *offset, + gchar *type, + gchar *value, + gint headsize, guchar *file_head, FILE *ifp) { /* Return values are 0: no match, 1: magic match, 2: size match */ - long offs; + glong offs; gulong num_testval, num_operatorval; gulong fileval; - int numbytes, k, c = 0, found = 0; - char *num_operator_ptr, num_operator, num_test; + gint numbytes, k, c = 0, found = 0; + gchar *num_operator_ptr, num_operator, num_test; guchar mem_testval[256]; /* Check offset */ @@ -2052,15 +2049,15 @@ file_check_single_magic (char *offset, static int file_check_magic_list (GSList *magics_list, - int headsize, + gint headsize, guchar *head, FILE *ifp) { /* Return values are 0: no match, 1: magic match, 2: size match */ - char *offset, *type, *value; - int and = 0; - int found = 0, match_val; + gchar *offset, *type, *value; + gint and = 0; + gint found = 0, match_val; while (magics_list) { @@ -2086,7 +2083,7 @@ file_check_magic_list (GSList *magics_list, static void file_update_menus (GSList *procs, - int image_type) + gint image_type) { PlugInProcDef *file_proc; diff --git a/app/fileops.h b/app/fileops.h index d5aa08757e..f7ef17a462 100644 --- a/app/fileops.h +++ b/app/fileops.h @@ -15,9 +15,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __FILE_OPS_H__ -#define __FILE_OPS_H__ - +#ifndef __FILEOPS_H__ +#define __FILEOPS_H__ #include @@ -31,28 +30,34 @@ void file_ops_pre_init (void); void file_ops_post_init (void); -void file_open_callback (GtkWidget *w, - gpointer client_data); -void file_save_callback (GtkWidget *w, - gpointer client_data); -void file_save_as_callback (GtkWidget *w, - gpointer client_data); -void file_revert_callback (GtkWidget *w, - gpointer client_data); -void file_load_by_extension_callback (GtkWidget *w, - gpointer client_data); -void file_save_by_extension_callback (GtkWidget *w, - gpointer client_data); -int file_open (char *filename, - char *raw_filename); -int file_save (GimpImage* gimage, - char *filename, - char *raw_filename, - gint mode); -PlugInProcDef* file_proc_find (GSList *procs, - char *filename); + +void file_open_callback (GtkWidget *widget, + gpointer data); + +void file_save_callback (GtkWidget *widget, + gpointer data); +void file_save_as_callback (GtkWidget *widget, + gpointer data); + +void file_revert_callback (GtkWidget *widget, + gpointer data); + +void file_open_by_extension_callback (GtkWidget *widget, + gpointer data); +void file_save_by_extension_callback (GtkWidget *widget, + gpointer data); + +gint file_open (gchar *filename, + gchar *raw_filename); +gint file_save (GimpImage *gimage, + gchar *filename, + gchar *raw_filename, + RunModeType mode); + +PlugInProcDef * file_proc_find (GSList *procs, + gchar *filename); extern GSList *load_procs; extern GSList *save_procs; -#endif /* FILE_OPS_H */ +#endif /* __FILEOPS_H__ */ diff --git a/app/gui/menus.c b/app/gui/menus.c index b042412fe8..2dccc22a95 100644 --- a/app/gui/menus.c +++ b/app/gui/menus.c @@ -652,7 +652,7 @@ static GtkItemFactory *image_factory = NULL; static GimpItemFactoryEntry load_entries[] = { - { { N_("/Automatic"), NULL, file_load_by_extension_callback, 0 }, + { { N_("/Automatic"), NULL, file_open_by_extension_callback, 0 }, "open_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -666,7 +666,7 @@ static GtkItemFactory *load_factory = NULL; static GimpItemFactoryEntry save_entries[] = { - { { N_("/By extension"), NULL, file_save_by_extension_callback, 0 }, + { { N_("/By Extension"), NULL, file_save_by_extension_callback, 0 }, "save_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -1293,16 +1293,23 @@ menus_last_opened_cmd_callback (GtkWidget *widget, { gchar *filename, *raw_filename; guint num_entries; + gint status; num_entries = g_slist_length (last_opened_raw_filenames); if (num >= num_entries) return; - raw_filename = ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; + raw_filename = + ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; filename = g_basename (raw_filename); - if (!file_open (raw_filename, raw_filename)) - g_message (_("Error opening file: %s\n"), raw_filename); + status = file_open (raw_filename, raw_filename); + + if (status != PDB_SUCCESS && + status != PDB_CANCEL) + { + g_message (_("Error opening file: %s\n"), raw_filename); + } } static void diff --git a/app/gui/plug-in-commands.c b/app/gui/plug-in-commands.c index f365b2e797..91392139e9 100644 --- a/app/gui/plug-in-commands.c +++ b/app/gui/plug-in-commands.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/gui/plug-in-menus.c b/app/gui/plug-in-menus.c index f365b2e797..91392139e9 100644 --- a/app/gui/plug-in-menus.c +++ b/app/gui/plug-in-menus.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/menus.c b/app/menus.c index b042412fe8..2dccc22a95 100644 --- a/app/menus.c +++ b/app/menus.c @@ -652,7 +652,7 @@ static GtkItemFactory *image_factory = NULL; static GimpItemFactoryEntry load_entries[] = { - { { N_("/Automatic"), NULL, file_load_by_extension_callback, 0 }, + { { N_("/Automatic"), NULL, file_open_by_extension_callback, 0 }, "open_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -666,7 +666,7 @@ static GtkItemFactory *load_factory = NULL; static GimpItemFactoryEntry save_entries[] = { - { { N_("/By extension"), NULL, file_save_by_extension_callback, 0 }, + { { N_("/By Extension"), NULL, file_save_by_extension_callback, 0 }, "save_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -1293,16 +1293,23 @@ menus_last_opened_cmd_callback (GtkWidget *widget, { gchar *filename, *raw_filename; guint num_entries; + gint status; num_entries = g_slist_length (last_opened_raw_filenames); if (num >= num_entries) return; - raw_filename = ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; + raw_filename = + ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; filename = g_basename (raw_filename); - if (!file_open (raw_filename, raw_filename)) - g_message (_("Error opening file: %s\n"), raw_filename); + status = file_open (raw_filename, raw_filename); + + if (status != PDB_SUCCESS && + status != PDB_CANCEL) + { + g_message (_("Error opening file: %s\n"), raw_filename); + } } static void diff --git a/app/menus/menus.c b/app/menus/menus.c index b042412fe8..2dccc22a95 100644 --- a/app/menus/menus.c +++ b/app/menus/menus.c @@ -652,7 +652,7 @@ static GtkItemFactory *image_factory = NULL; static GimpItemFactoryEntry load_entries[] = { - { { N_("/Automatic"), NULL, file_load_by_extension_callback, 0 }, + { { N_("/Automatic"), NULL, file_open_by_extension_callback, 0 }, "open_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -666,7 +666,7 @@ static GtkItemFactory *load_factory = NULL; static GimpItemFactoryEntry save_entries[] = { - { { N_("/By extension"), NULL, file_save_by_extension_callback, 0 }, + { { N_("/By Extension"), NULL, file_save_by_extension_callback, 0 }, "save_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -1293,16 +1293,23 @@ menus_last_opened_cmd_callback (GtkWidget *widget, { gchar *filename, *raw_filename; guint num_entries; + gint status; num_entries = g_slist_length (last_opened_raw_filenames); if (num >= num_entries) return; - raw_filename = ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; + raw_filename = + ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; filename = g_basename (raw_filename); - if (!file_open (raw_filename, raw_filename)) - g_message (_("Error opening file: %s\n"), raw_filename); + status = file_open (raw_filename, raw_filename); + + if (status != PDB_SUCCESS && + status != PDB_CANCEL) + { + g_message (_("Error opening file: %s\n"), raw_filename); + } } static void diff --git a/app/menus/plug-in-menus.c b/app/menus/plug-in-menus.c index f365b2e797..91392139e9 100644 --- a/app/menus/plug-in-menus.c +++ b/app/menus/plug-in-menus.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/gimpplugin-message.c b/app/plug-in/gimpplugin-message.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/gimpplugin-message.c +++ b/app/plug-in/gimpplugin-message.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/gimpplugin-progress.c b/app/plug-in/gimpplugin-progress.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/gimpplugin-progress.c +++ b/app/plug-in/gimpplugin-progress.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/gimpplugin.c b/app/plug-in/gimpplugin.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/gimpplugin.c +++ b/app/plug-in/gimpplugin.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/gimppluginmanager-call.c b/app/plug-in/gimppluginmanager-call.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/gimppluginmanager-call.c +++ b/app/plug-in/gimppluginmanager-call.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/gimppluginmanager-run.c b/app/plug-in/gimppluginmanager-run.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/gimppluginmanager-run.c +++ b/app/plug-in/gimppluginmanager-run.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/gimppluginmanager.c b/app/plug-in/gimppluginmanager.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/gimppluginmanager.c +++ b/app/plug-in/gimppluginmanager.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/gimppluginshm.c b/app/plug-in/gimppluginshm.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/gimppluginshm.c +++ b/app/plug-in/gimppluginshm.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-in-def.c b/app/plug-in/plug-in-def.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-in-def.c +++ b/app/plug-in/plug-in-def.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-in-message.c b/app/plug-in/plug-in-message.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-in-message.c +++ b/app/plug-in/plug-in-message.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-in-params.c b/app/plug-in/plug-in-params.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-in-params.c +++ b/app/plug-in/plug-in-params.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-in-progress.c b/app/plug-in/plug-in-progress.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-in-progress.c +++ b/app/plug-in/plug-in-progress.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-in-run.c b/app/plug-in/plug-in-run.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-in-run.c +++ b/app/plug-in/plug-in-run.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-in-shm.c b/app/plug-in/plug-in-shm.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-in-shm.c +++ b/app/plug-in/plug-in-shm.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-in.c b/app/plug-in/plug-in.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-in.c +++ b/app/plug-in/plug-in.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug-in/plug-ins.c b/app/plug-in/plug-ins.c index f365b2e797..91392139e9 100644 --- a/app/plug-in/plug-ins.c +++ b/app/plug-in/plug-ins.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/plug_in.c b/app/plug_in.c index f365b2e797..91392139e9 100644 --- a/app/plug_in.c +++ b/app/plug_in.c @@ -1602,7 +1602,7 @@ plug_in_handle_proc_run (GPProcRun *proc_run) * dummy "executiuon error" return value --Michael */ return_vals = g_new (Argument, 1); - return_vals[0].arg_type = PDB_INT32; + return_vals[0].arg_type = PDB_STATUS; return_vals[0].value.pdb_int = PDB_EXECUTION_ERROR; } diff --git a/app/procedural_db.h b/app/procedural_db.h index 9299a732e0..d77fc59065 100644 --- a/app/procedural_db.h +++ b/app/procedural_db.h @@ -56,7 +56,8 @@ typedef enum PDB_EXECUTION_ERROR, PDB_CALLING_ERROR, PDB_PASS_THROUGH, - PDB_SUCCESS + PDB_SUCCESS, + PDB_CANCEL } PDBStatusType; diff --git a/app/tools/airbrush_blob.c b/app/tools/airbrush_blob.c index ef7d78cbc9..dc66c775ea 100644 --- a/app/tools/airbrush_blob.c +++ b/app/tools/airbrush_blob.c @@ -21,25 +21,19 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "airbrush_blob.h" #include -#include #include #include #include +#include + +#include "airbrush_blob.h" + #define ROUND(A) floor((A)+0.5) -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif /* M_PI */ - -#ifndef M_PI_H -#define M_PI_H 3.14159265358979323846/2 -#endif - #define SUBSAMPLE 8.0 #define SU 8.0 @@ -529,7 +523,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yt/xr); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -554,7 +548,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yt/xl); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -579,7 +573,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yb/xl); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -605,7 +599,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do ma_ang1 = atan(yb/xr); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -636,7 +630,7 @@ airbrush_blob_ellipse (double xc, double yc, double xt, double yt, double xr, do { trig_initialized = 1; for (i=0; i<256; i++) - trig_table[i] = 0.5 + sin(i * (M_PI / 128.)) * (1 << TABLE_SHIFT); + trig_table[i] = 0.5 + sin(i * (G_PI / 128.0)) * (1 << TABLE_SHIFT); } @@ -977,7 +971,7 @@ create_air_blob (double xc, air_blob->minorcross_line.size = yt * 2; air_blob->minorcross_line.dist = 0.0; - air_blob->direction = M_PI_H; + air_blob->direction = G_PI_2; } else if (xr == xl) @@ -1105,7 +1099,7 @@ create_air_blob (double xc, ma_ang1 = atan(yt/xr); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1144,7 +1138,7 @@ create_air_blob (double xc, ma_ang1 = atan(yt/xl); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1178,7 +1172,7 @@ create_air_blob (double xc, ma_ang1 = atan(yb/xl); x1 = cos(ma_ang1) * xl; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xr; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1216,7 +1210,7 @@ create_air_blob (double xc, ma_ang1 = atan(yb/xr); x1 = cos(ma_ang1) * xr; y1 = sin(ma_ang1) * yt; - ma_ang2 = M_PI/2 - ma_ang1; + ma_ang2 = G_PI_2 - ma_ang1; x2 = cos(ma_ang2) * xl; y2 = sin(ma_ang2) * yb; xtotma = x1 + x2; @@ -1292,12 +1286,12 @@ create_air_line(AirBlob *airblob) printf("Mi.size: %f\n",airblob->minor_line.size); */ - if (direction == M_PI_H || direction == M_PI) + if (direction == G_PI_2 || direction == G_PI) { direction = direction - 0.001; } - if (direction == -M_PI_H || direction == -M_PI) + if (direction == -G_PI_2 || direction == -G_PI) { direction = direction + 0.001; } @@ -1326,7 +1320,7 @@ create_air_line(AirBlob *airblob) } - else if(direction == M_PI_H) + else if(direction == G_PI_2) { @@ -1346,12 +1340,12 @@ create_air_line(AirBlob *airblob) airline->line[5].y = (ycenter + airblob->minorcross_line.size/2)/SUBSAMPLE; airline->nlines = 6; - printf("Hmm bummer M_PI_H\n"); + printf("Hmm bummer G_PI_2\n"); } - else if(direction == M_PI) + else if(direction == G_PI) { airline->line[0].x = (xcenter - airblob->maincross_line.dist)/SUBSAMPLE; @@ -1371,12 +1365,12 @@ create_air_line(AirBlob *airblob) airline->nlines = 6; - printf("Hmm bummer M_PI\n"); + printf("Hmm bummer G_PI\n"); } - else if(direction == -M_PI_H) + else if(direction == -G_PI_2) { airline->line[0].x = (xcenter - airblob->maincross_line.dist)/SUBSAMPLE; @@ -1396,14 +1390,14 @@ create_air_line(AirBlob *airblob) airline->nlines = 6; - printf("Hmm bummer -M_PI_H\n"); + printf("Hmm bummer -G_PI_2\n"); } - else if(direction == -M_PI) + else if(direction == -G_PI) { airline->line[0].x = (xcenter - airblob->maincross_line.dist)/SUBSAMPLE; @@ -1423,13 +1417,13 @@ create_air_line(AirBlob *airblob) airline->nlines = 6; - printf("Hmm bummer -M_PI\n"); + printf("Hmm bummer -G_PI\n"); } - else if ((direction < M_PI) && (direction > M_PI_H)) + else if ((direction < G_PI) && (direction > G_PI_2)) { @@ -1440,7 +1434,7 @@ create_air_line(AirBlob *airblob) ma_angsupport = atan(airblob->maincross_line.size/2/airblob->maincross_line.dist); mi_angsupport = atan(airblob->minorcross_line.size/2/airblob->minorcross_line.dist); - iang = airblob->direction_abs - M_PI_H; + iang = airblob->direction_abs - G_PI_2; airline->line[0].x = (xcenter - sin(iang + ma_angsupport) * masupport)/SUBSAMPLE; airline->line[0].y = (ycenter - cos(iang + ma_angsupport) * masupport)/SUBSAMPLE; @@ -1477,7 +1471,7 @@ create_air_line(AirBlob *airblob) } - else if ((direction < M_PI_H) && (direction > 0.0)) + else if ((direction < G_PI_2) && (direction > 0.0)) { @@ -1535,7 +1529,7 @@ create_air_line(AirBlob *airblob) } - else if ((direction < 0.0) && (direction > -M_PI_H)) + else if ((direction < 0.0) && (direction > -G_PI_2)) { @@ -1568,7 +1562,7 @@ create_air_line(AirBlob *airblob) } - else if ((direction < -M_PI_H) && (direction > -M_PI)) + else if ((direction < -G_PI_2) && (direction > -G_PI)) { @@ -1579,7 +1573,7 @@ create_air_line(AirBlob *airblob) ma_angsupport = atan(airblob->maincross_line.size/2/airblob->maincross_line.dist); mi_angsupport = atan(airblob->minorcross_line.size/2/airblob->minorcross_line.dist); - iang = fabs(airblob->direction_abs) - M_PI_H; + iang = fabs(airblob->direction_abs) - G_PI_2; airline->line[0].x = (xcenter - sin(iang + ma_angsupport) * masupport)/SUBSAMPLE; airline->line[0].y = (ycenter + cos(iang + ma_angsupport) * masupport)/SUBSAMPLE; @@ -1675,13 +1669,13 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int trans_airblob = airblob_new(1); - direction_last_abs = airblob_last->direction_abs + M_PI; - direction_present_abs = airblob_present->direction_abs + M_PI; + direction_last_abs = airblob_last->direction_abs + G_PI; + direction_present_abs = airblob_present->direction_abs + G_PI; idirection_abs = direction_present_abs - direction_last_abs; - direction_last = airblob_last->direction + M_PI_H; - direction_present = airblob_present->direction + M_PI_H; + direction_last = airblob_last->direction + G_PI_2; + direction_present = airblob_present->direction + G_PI_2; idirection = direction_present - direction_last; @@ -1709,7 +1703,7 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int Well we can't know if the users is painting up/down or if she is painting a circle at high speed. As you may notice it be so that the last airblob has - a direction more or less M_PI rad differernt from the + a direction more or less G_PI rad differernt from the present airblob. But we can't know if she tured the airbrush quickly (so that there was no mouse capture during the turn) or if she paints just up and down the @@ -1721,40 +1715,40 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int */ - if ((fabs(idirection_abs) > (M_PI - 0.1571)) && (fabs(idirection_abs) < (M_PI + 0.1571))) + if ((fabs(idirection_abs) > (G_PI - 0.1571)) && (fabs(idirection_abs) < (G_PI + 0.1571))) { /* We asume that the artist meant to paint in a "strait line" by just tilting the airbrush*/ - idirection_abs = idirection_abs - M_PI; + idirection_abs = idirection_abs - G_PI; if ((idirection_abs * dist) > (idirection_abs/2)) { - if ((direction_present_abs - idirection_abs * dist) > 2 * M_PI) + if ((direction_present_abs - idirection_abs * dist) > 2 * G_PI) { - trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - 2 * G_PI - G_PI; } else if ((direction_present_abs - idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_present_abs - idirection_abs * dist - G_PI; } } else { - if ((direction_present_abs + idirection_abs * dist) > 2 * M_PI) + if ((direction_present_abs + idirection_abs * dist) > 2 * G_PI) { - trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - 2 * G_PI - G_PI; } else if ((direction_present_abs + idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_present_abs + idirection_abs * dist - G_PI; } } @@ -1769,19 +1763,19 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int } - else if (fabs(idirection_abs) < (M_PI - 0.1571)) + else if (fabs(idirection_abs) < (G_PI - 0.1571)) { - if ((direction_last_abs + idirection_abs * dist) > 2*M_PI) + if ((direction_last_abs + idirection_abs * dist) > 2*G_PI) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * G_PI - G_PI; } else if((direction_last_abs + idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - G_PI; } trans_airblob->main_line.size = main_line_last + ((main_line_present - main_line_last) * dist); @@ -1798,19 +1792,19 @@ trans_air_blob(AirBlob *airblob_last, AirBlob *airblob_present, double dist, int /* We asume that the artist always travels the shortest way around the "clock" */ - idirection_abs = idirection_abs - M_PI; + idirection_abs = idirection_abs - G_PI; - if ((direction_last_abs + idirection_abs * dist) > 2*M_PI) + if ((direction_last_abs + idirection_abs * dist) > 2*G_PI) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - 2 * G_PI - G_PI; } else if((direction_last_abs + idirection_abs * dist) < 0.0) { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * M_PI - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist + 2 * G_PI - G_PI; } else { - trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - M_PI; + trans_airblob->direction_abs = direction_last_abs + idirection_abs * dist - G_PI; } trans_airblob->main_line.size = main_line_last + ((main_line_present - main_line_last) * dist); diff --git a/app/widgets/gimpitemfactory.c b/app/widgets/gimpitemfactory.c index b042412fe8..2dccc22a95 100644 --- a/app/widgets/gimpitemfactory.c +++ b/app/widgets/gimpitemfactory.c @@ -652,7 +652,7 @@ static GtkItemFactory *image_factory = NULL; static GimpItemFactoryEntry load_entries[] = { - { { N_("/Automatic"), NULL, file_load_by_extension_callback, 0 }, + { { N_("/Automatic"), NULL, file_open_by_extension_callback, 0 }, "open_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -666,7 +666,7 @@ static GtkItemFactory *load_factory = NULL; static GimpItemFactoryEntry save_entries[] = { - { { N_("/By extension"), NULL, file_save_by_extension_callback, 0 }, + { { N_("/By Extension"), NULL, file_save_by_extension_callback, 0 }, "save_by_extension.html", NULL }, { { "/---", NULL, NULL, 0, "" }, @@ -1293,16 +1293,23 @@ menus_last_opened_cmd_callback (GtkWidget *widget, { gchar *filename, *raw_filename; guint num_entries; + gint status; num_entries = g_slist_length (last_opened_raw_filenames); if (num >= num_entries) return; - raw_filename = ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; + raw_filename = + ((GString *) g_slist_nth_data (last_opened_raw_filenames, num))->str; filename = g_basename (raw_filename); - if (!file_open (raw_filename, raw_filename)) - g_message (_("Error opening file: %s\n"), raw_filename); + status = file_open (raw_filename, raw_filename); + + if (status != PDB_SUCCESS && + status != PDB_CANCEL) + { + g_message (_("Error opening file: %s\n"), raw_filename); + } } static void diff --git a/configure.in b/configure.in index 1a30f919b9..a8d915fc5d 100644 --- a/configure.in +++ b/configure.in @@ -692,7 +692,6 @@ plug-ins/Makefile plug-ins/perl/config.pl plug-ins/libgck/Makefile plug-ins/libgck/gck/Makefile -plug-ins/megawidget/Makefile plug-ins/dbbrowser/Makefile plug-ins/script-fu/Makefile plug-ins/script-fu/scripts/Makefile diff --git a/libgimp/gimpenums.h b/libgimp/gimpenums.h index 7ccbbd1431..aaaf3ac8bd 100644 --- a/libgimp/gimpenums.h +++ b/libgimp/gimpenums.h @@ -295,7 +295,8 @@ typedef enum GIMP_PDB_EXECUTION_ERROR, GIMP_PDB_CALLING_ERROR, GIMP_PDB_PASS_THROUGH, - GIMP_PDB_SUCCESS + GIMP_PDB_SUCCESS, + GIMP_PDB_CANCEL } GimpPDBStatusType; typedef enum @@ -373,6 +374,7 @@ typedef GimpPDBStatusType GStatusType; #define STATUS_CALLING_ERROR GIMP_PDB_CALLING_ERROR #define STATUS_PASS_THROUGH GIMP_PDB_PASS_THROUGH #define STATUS_SUCCESS GIMP_PDB_SUCCESS +#define STATUS_CANCEL GIMP_PDB_CANCEL #define PROC_INTERNAL GIMP_INTERNAL #define PROC_PLUG_IN GIMP_PLUGIN diff --git a/libgimp/gimpmath.h b/libgimp/gimpmath.h index 52b5d9a347..ed9ca13f40 100644 --- a/libgimp/gimpmath.h +++ b/libgimp/gimpmath.h @@ -17,7 +17,6 @@ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ - #ifndef __GIMPMATH_H__ #define __GIMPMATH_H__ @@ -46,6 +45,12 @@ extern "C" { #define G_SQRT2 1.4142135623730951 #endif +#ifndef RAND_MAX +#define G_MAXRAND G_MAXINT +#else +#define G_MAXRAND RAND_MAX +#endif + /* Use RINT() instead of rint() */ #ifdef HAVE_RINT #define RINT(x) rint(x) diff --git a/libgimp/gimpwidgets.c b/libgimp/gimpwidgets.c index 74abde46f5..157126a14d 100644 --- a/libgimp/gimpwidgets.c +++ b/libgimp/gimpwidgets.c @@ -23,6 +23,16 @@ #include "gimphelpui.h" #include "gimpunitmenu.h" #include "gimpwidgets.h" +#include "gimpmath.h" + +#include "gimpintl.h" + +/* + * Forward declarations + */ + +static void gimp_toggle_button_sensitive_update (GtkToggleButton *toggle_button); + /* * Widget Constructors... @@ -65,7 +75,11 @@ gimp_option_menu_new (GtkSignalFunc menu_item_callback, user_data = va_arg (args, gpointer); widget_ptr = va_arg (args, gpointer); - menuitem = gtk_menu_item_new_with_label (label); + if (label != (gpointer) 1) + menuitem = gtk_menu_item_new_with_label (label); + else + menuitem = gtk_menu_item_new (); + gtk_menu_append (GTK_MENU (menu), menuitem); gtk_signal_connect (GTK_OBJECT (menuitem), "activate", menu_item_callback, @@ -149,7 +163,11 @@ gimp_radio_group_new (gboolean in_frame, widget_ptr = va_arg (args, gpointer); active = va_arg (args, gboolean); - button = gtk_radio_button_new_with_label (group, label); + if (label != (gpointer) 1) + button = gtk_radio_button_new_with_label (group, label); + else + button = gtk_radio_button_new (group); + group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); @@ -225,7 +243,11 @@ gimp_radio_group_new2 (gboolean in_frame, user_data = va_arg (args, gpointer); widget_ptr = va_arg (args, gpointer); - button = gtk_radio_button_new_with_label (group, label); + if (label != (gpointer) 1) + button = gtk_radio_button_new_with_label (group, label); + else + button = gtk_radio_button_new (group); + group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); @@ -338,43 +360,125 @@ gimp_scale_entry_new (GtkTable *table, return adjustment; } +static void +gimp_random_seed_toggle_update (GtkWidget *widget, + gpointer data) +{ + gint *toggle_val; + + toggle_val = (gint *) data; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + *toggle_val = (gint) gtk_object_get_data (GTK_OBJECT (widget), + "time_true"); + else + *toggle_val = (gint) gtk_object_get_data (GTK_OBJECT (widget), + "time_false"); + + gimp_toggle_button_sensitive_update (GTK_TOGGLE_BUTTON (widget)); +} + +GtkWidget * +gimp_random_seed_new (gint *seed, + gint *use_time, + gint time_true, + gint time_false) +{ + GtkWidget *hbox; + GtkWidget *spinbutton; + GtkObject *adj; + GtkWidget *time_button; + + hbox = gtk_hbox_new (FALSE, 4); + + spinbutton = gimp_spin_button_new (&adj, *seed, + 0, G_MAXRAND, 1, 10, 0, 1, 0); + gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + seed); + gtk_widget_show (spinbutton); + + gimp_help_set_help_data (spinbutton, + _("If the \"Time\" button is not pressed, " + "use this value for random number generator " + "seed - this allows you to repeat a " + "given \"random\" operation"), NULL); + + time_button = gtk_toggle_button_new_with_label (_("Time")); + gtk_misc_set_padding (GTK_MISC (GTK_BIN (time_button)->child), 2, 0); + gtk_signal_connect (GTK_OBJECT (time_button), "toggled", + GTK_SIGNAL_FUNC (gimp_random_seed_toggle_update), + use_time); + gtk_box_pack_end (GTK_BOX (hbox), time_button, FALSE, FALSE, 0); + gtk_widget_show (time_button); + + gimp_help_set_help_data (time_button, + _("Seed random number generator from the current " + "time - this guarantees a reasonable " + "randomization"), NULL); + + gtk_object_set_data (GTK_OBJECT (time_button), "time_true", + (gpointer) time_true); + gtk_object_set_data (GTK_OBJECT (time_button), "time_false", + (gpointer) time_false); + + gtk_object_set_data (GTK_OBJECT (time_button), "inverse_sensitive", + spinbutton); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (time_button), + *use_time == time_true); + + return hbox; +} + /* * Standard Callbacks... */ -void -gimp_toggle_button_update (GtkWidget *widget, - gpointer data) +static void +gimp_toggle_button_sensitive_update (GtkToggleButton *toggle_button) { GtkWidget *set_sensitive; - gint *toggle_val; + gboolean active; - toggle_val = (gint *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; + active = gtk_toggle_button_get_active (toggle_button); set_sensitive = - gtk_object_get_data (GTK_OBJECT (widget), "set_sensitive"); + gtk_object_get_data (GTK_OBJECT (toggle_button), "set_sensitive"); while (set_sensitive) { - gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), *toggle_val); + gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), active); set_sensitive = gtk_object_get_data (GTK_OBJECT (set_sensitive), "set_sensitive"); } set_sensitive = - gtk_object_get_data (GTK_OBJECT (widget), "inverse_sensitive"); + gtk_object_get_data (GTK_OBJECT (toggle_button), "inverse_sensitive"); while (set_sensitive) { - gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), ! *toggle_val); + gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), ! active); set_sensitive = gtk_object_get_data (GTK_OBJECT (set_sensitive), "inverse_sensitive"); } } +void +gimp_toggle_button_update (GtkWidget *widget, + gpointer data) +{ + gint *toggle_val; + + toggle_val = (gint *) data; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + *toggle_val = TRUE; + else + *toggle_val = FALSE; + + gimp_toggle_button_sensitive_update (GTK_TOGGLE_BUTTON (widget)); +} + void gimp_menu_item_update (GtkWidget *widget, gpointer data) @@ -392,12 +496,14 @@ gimp_radio_button_update (GtkWidget *widget, { gint *toggle_val; - if (GTK_TOGGLE_BUTTON (widget)->active) + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { toggle_val = (gint *) data; *toggle_val = (gint) gtk_object_get_user_data (GTK_OBJECT (widget)); } + + gimp_toggle_button_sensitive_update (GTK_TOGGLE_BUTTON (widget)); } void @@ -485,7 +591,8 @@ gimp_table_attach_aligned (GtkTable *table, GtkWidget *alignment; alignment = gtk_alignment_new (0.0, 0.5, 0.0, 0.0); - gtk_table_attach_defaults (table, alignment, 1, 2, row, row + 1); + gtk_table_attach (table, alignment, 1, 2, row, row + 1, + GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (alignment), widget); } diff --git a/libgimp/gimpwidgets.h b/libgimp/gimpwidgets.h index 9d487d6294..da81ab9a5c 100644 --- a/libgimp/gimpwidgets.h +++ b/libgimp/gimpwidgets.h @@ -99,6 +99,11 @@ GtkObject * gimp_scale_entry_new (GtkTable *table, gchar *tooltip, gchar *private_tip); +GtkWidget * gimp_random_seed_new (gint *seed, + gint *use_time, + gint time_true, + gint time_false); + /* * Standard Callbacks */ diff --git a/libgimpwidgets/gimpwidgets.c b/libgimpwidgets/gimpwidgets.c index 74abde46f5..157126a14d 100644 --- a/libgimpwidgets/gimpwidgets.c +++ b/libgimpwidgets/gimpwidgets.c @@ -23,6 +23,16 @@ #include "gimphelpui.h" #include "gimpunitmenu.h" #include "gimpwidgets.h" +#include "gimpmath.h" + +#include "gimpintl.h" + +/* + * Forward declarations + */ + +static void gimp_toggle_button_sensitive_update (GtkToggleButton *toggle_button); + /* * Widget Constructors... @@ -65,7 +75,11 @@ gimp_option_menu_new (GtkSignalFunc menu_item_callback, user_data = va_arg (args, gpointer); widget_ptr = va_arg (args, gpointer); - menuitem = gtk_menu_item_new_with_label (label); + if (label != (gpointer) 1) + menuitem = gtk_menu_item_new_with_label (label); + else + menuitem = gtk_menu_item_new (); + gtk_menu_append (GTK_MENU (menu), menuitem); gtk_signal_connect (GTK_OBJECT (menuitem), "activate", menu_item_callback, @@ -149,7 +163,11 @@ gimp_radio_group_new (gboolean in_frame, widget_ptr = va_arg (args, gpointer); active = va_arg (args, gboolean); - button = gtk_radio_button_new_with_label (group, label); + if (label != (gpointer) 1) + button = gtk_radio_button_new_with_label (group, label); + else + button = gtk_radio_button_new (group); + group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); @@ -225,7 +243,11 @@ gimp_radio_group_new2 (gboolean in_frame, user_data = va_arg (args, gpointer); widget_ptr = va_arg (args, gpointer); - button = gtk_radio_button_new_with_label (group, label); + if (label != (gpointer) 1) + button = gtk_radio_button_new_with_label (group, label); + else + button = gtk_radio_button_new (group); + group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); @@ -338,43 +360,125 @@ gimp_scale_entry_new (GtkTable *table, return adjustment; } +static void +gimp_random_seed_toggle_update (GtkWidget *widget, + gpointer data) +{ + gint *toggle_val; + + toggle_val = (gint *) data; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + *toggle_val = (gint) gtk_object_get_data (GTK_OBJECT (widget), + "time_true"); + else + *toggle_val = (gint) gtk_object_get_data (GTK_OBJECT (widget), + "time_false"); + + gimp_toggle_button_sensitive_update (GTK_TOGGLE_BUTTON (widget)); +} + +GtkWidget * +gimp_random_seed_new (gint *seed, + gint *use_time, + gint time_true, + gint time_false) +{ + GtkWidget *hbox; + GtkWidget *spinbutton; + GtkObject *adj; + GtkWidget *time_button; + + hbox = gtk_hbox_new (FALSE, 4); + + spinbutton = gimp_spin_button_new (&adj, *seed, + 0, G_MAXRAND, 1, 10, 0, 1, 0); + gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + seed); + gtk_widget_show (spinbutton); + + gimp_help_set_help_data (spinbutton, + _("If the \"Time\" button is not pressed, " + "use this value for random number generator " + "seed - this allows you to repeat a " + "given \"random\" operation"), NULL); + + time_button = gtk_toggle_button_new_with_label (_("Time")); + gtk_misc_set_padding (GTK_MISC (GTK_BIN (time_button)->child), 2, 0); + gtk_signal_connect (GTK_OBJECT (time_button), "toggled", + GTK_SIGNAL_FUNC (gimp_random_seed_toggle_update), + use_time); + gtk_box_pack_end (GTK_BOX (hbox), time_button, FALSE, FALSE, 0); + gtk_widget_show (time_button); + + gimp_help_set_help_data (time_button, + _("Seed random number generator from the current " + "time - this guarantees a reasonable " + "randomization"), NULL); + + gtk_object_set_data (GTK_OBJECT (time_button), "time_true", + (gpointer) time_true); + gtk_object_set_data (GTK_OBJECT (time_button), "time_false", + (gpointer) time_false); + + gtk_object_set_data (GTK_OBJECT (time_button), "inverse_sensitive", + spinbutton); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (time_button), + *use_time == time_true); + + return hbox; +} + /* * Standard Callbacks... */ -void -gimp_toggle_button_update (GtkWidget *widget, - gpointer data) +static void +gimp_toggle_button_sensitive_update (GtkToggleButton *toggle_button) { GtkWidget *set_sensitive; - gint *toggle_val; + gboolean active; - toggle_val = (gint *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; + active = gtk_toggle_button_get_active (toggle_button); set_sensitive = - gtk_object_get_data (GTK_OBJECT (widget), "set_sensitive"); + gtk_object_get_data (GTK_OBJECT (toggle_button), "set_sensitive"); while (set_sensitive) { - gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), *toggle_val); + gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), active); set_sensitive = gtk_object_get_data (GTK_OBJECT (set_sensitive), "set_sensitive"); } set_sensitive = - gtk_object_get_data (GTK_OBJECT (widget), "inverse_sensitive"); + gtk_object_get_data (GTK_OBJECT (toggle_button), "inverse_sensitive"); while (set_sensitive) { - gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), ! *toggle_val); + gtk_widget_set_sensitive (GTK_WIDGET (set_sensitive), ! active); set_sensitive = gtk_object_get_data (GTK_OBJECT (set_sensitive), "inverse_sensitive"); } } +void +gimp_toggle_button_update (GtkWidget *widget, + gpointer data) +{ + gint *toggle_val; + + toggle_val = (gint *) data; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + *toggle_val = TRUE; + else + *toggle_val = FALSE; + + gimp_toggle_button_sensitive_update (GTK_TOGGLE_BUTTON (widget)); +} + void gimp_menu_item_update (GtkWidget *widget, gpointer data) @@ -392,12 +496,14 @@ gimp_radio_button_update (GtkWidget *widget, { gint *toggle_val; - if (GTK_TOGGLE_BUTTON (widget)->active) + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { toggle_val = (gint *) data; *toggle_val = (gint) gtk_object_get_user_data (GTK_OBJECT (widget)); } + + gimp_toggle_button_sensitive_update (GTK_TOGGLE_BUTTON (widget)); } void @@ -485,7 +591,8 @@ gimp_table_attach_aligned (GtkTable *table, GtkWidget *alignment; alignment = gtk_alignment_new (0.0, 0.5, 0.0, 0.0); - gtk_table_attach_defaults (table, alignment, 1, 2, row, row + 1); + gtk_table_attach (table, alignment, 1, 2, row, row + 1, + GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (alignment), widget); } diff --git a/libgimpwidgets/gimpwidgets.h b/libgimpwidgets/gimpwidgets.h index 9d487d6294..da81ab9a5c 100644 --- a/libgimpwidgets/gimpwidgets.h +++ b/libgimpwidgets/gimpwidgets.h @@ -99,6 +99,11 @@ GtkObject * gimp_scale_entry_new (GtkTable *table, gchar *tooltip, gchar *private_tip); +GtkWidget * gimp_random_seed_new (gint *seed, + gint *use_time, + gint time_true, + gint time_false); + /* * Standard Callbacks */ diff --git a/modules/colorsel_triangle.c b/modules/colorsel_triangle.c index 9f4c481cba..1fccf51b3c 100644 --- a/modules/colorsel_triangle.c +++ b/modules/colorsel_triangle.c @@ -23,18 +23,17 @@ #include "config.h" #include + #include #include #include -#include #include -#include +#include + #include "modregister.h" -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif +#include /* prototypes */ static GtkWidget * colorsel_triangle_new (int, int, int, @@ -478,16 +477,16 @@ update_previews (ColorSelectP coldata, gfloat hue, sat, val, s, v; gint hx,hy, sx,sy, vx,vy; - hue = (float) coldata->values[HUE] * M_PI / 180; + hue = (float) coldata->values[HUE] * G_PI / 180; hx = sin(hue) * COLORTRIANGLERADIUS; hy = cos(hue) * COLORTRIANGLERADIUS; - sx = sin(hue - 2*M_PI/3) * COLORTRIANGLERADIUS; - sy = cos(hue - 2*M_PI/3) * COLORTRIANGLERADIUS; + sx = sin(hue - 2*G_PI/3) * COLORTRIANGLERADIUS; + sy = cos(hue - 2*G_PI/3) * COLORTRIANGLERADIUS; - vx = sin(hue + 2*M_PI/3) * COLORTRIANGLERADIUS; - vy = cos(hue + 2*M_PI/3) * COLORTRIANGLERADIUS; + vx = sin(hue + 2*G_PI/3) * COLORTRIANGLERADIUS; + vy = cos(hue + 2*G_PI/3) * COLORTRIANGLERADIUS; hue = (float) coldata->values[HUE]; preview = coldata->preview; @@ -500,7 +499,7 @@ update_previews (ColorSelectP coldata, r2 = (x*x)+(y*y); if ( r2 <= COLORWHEELRADIUS * COLORWHEELRADIUS) { if (r2 > COLORTRIANGLERADIUS * COLORTRIANGLERADIUS) { - color_hsv_to_rgb (atan2 (x,y) / M_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); + color_hsv_to_rgb (atan2 (x,y) / G_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); } else { val = (float) ((x-sx)*(hy-vy)-(y-sy)*(hx-vx)) / (float) ((vx-sx)*(hy-vy)-(vy-sy)*(hx-vx)); if (val>0 && val<=1) { /* eigentlich val>=0, aber dann Grafikfehler... */ @@ -518,9 +517,9 @@ update_previews (ColorSelectP coldata, /* Marker im aeusseren Ring */ - x0 = (gint) (sin(hue*M_PI/180) * ((float) (COLORWHEELRADIUS - COLORTRIANGLERADIUS + 1)/2 + COLORTRIANGLERADIUS) + 0.5); - y0 = (gint) (cos(hue*M_PI/180) * ((float) (COLORWHEELRADIUS - COLORTRIANGLERADIUS + 1)/2 + COLORTRIANGLERADIUS) + 0.5); - color_hsv_to_rgb (atan2 (x0,y0) / M_PI * 180, 1, 1, &buf[0], &buf[1], &buf[2]); + x0 = (gint) (sin(hue*G_PI/180) * ((float) (COLORWHEELRADIUS - COLORTRIANGLERADIUS + 1)/2 + COLORTRIANGLERADIUS) + 0.5); + y0 = (gint) (cos(hue*G_PI/180) * ((float) (COLORWHEELRADIUS - COLORTRIANGLERADIUS + 1)/2 + COLORTRIANGLERADIUS) + 0.5); + color_hsv_to_rgb (atan2 (x0,y0) / G_PI * 180, 1, 1, &buf[0], &buf[1], &buf[2]); col = INTENSITY(buf[0], buf[1], buf[2]) > 127 ? 0 : 255 ; for (y = y0 - 4 ; y <= y0 + 4 ; y++) { @@ -529,7 +528,7 @@ update_previews (ColorSelectP coldata, if (r2 <= 20 && r2 >= 6) buf[k]=buf[k+1]=buf[k+2]=col; else - color_hsv_to_rgb (atan2 (x,y) / M_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); + color_hsv_to_rgb (atan2 (x,y) / G_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); k += 3; } gtk_preview_draw_row (GTK_PREVIEW (preview), buf, COLORWHEELRADIUS + x0-4, COLORWHEELRADIUS - 1 - y, 9); @@ -548,7 +547,7 @@ update_previews (ColorSelectP coldata, buf[k]=buf[k+1]=buf[k+2]=BGCOLOR; r2 = (x-x0)*(x-x0)+(y-y0)*(y-y0); if (x*x+y*y > COLORTRIANGLERADIUS * COLORTRIANGLERADIUS) { - color_hsv_to_rgb (atan2 (x,y) / M_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); + color_hsv_to_rgb (atan2 (x,y) / G_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); } else { val = (float) ((x-sx)*(hy-vy)-(y-sy)*(hx-vx)) / (float) ((vx-sx)*(hy-vy)-(vy-sy)*(hx-vx)); if (val>0 && val<=1) { /* eigentlich val>=0, aber dann Grafikfehler... */ @@ -585,7 +584,7 @@ update_previews (ColorSelectP coldata, buf[k]=buf[k+1]=buf[k+2]=col; else { if (x*x+y*y > COLORTRIANGLERADIUS * COLORTRIANGLERADIUS) { - color_hsv_to_rgb (atan2 (x,y) / M_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); + color_hsv_to_rgb (atan2 (x,y) / G_PI * 180, 1, 1, &buf[k], &buf[k+1], &buf[k+2]); } else { val = (float) ((x-sx)*(hy-vy)-(y-sy)*(hx-vx)) / (float) ((vx-sx)*(hy-vy)-(vy-sy)*(hx-vx)); if (val>0 && val<=1) { /* eigentlich val>=0, aber dann Grafikfehler... */ @@ -663,18 +662,18 @@ color_selection_callback (GtkWidget *widget, return FALSE; if (coldata->mode == 1) { - coldata->values[HUE] = ( (int) (atan2 (x, y) / M_PI * 180) + 360 ) %360; + coldata->values[HUE] = ( (int) (atan2 (x, y) / G_PI * 180) + 360 ) %360; color_select_update_rgb_values(coldata); update_previews (coldata, TRUE); } if (coldata->mode == 2) { - hue = (float) coldata->values[HUE] * M_PI / 180; + hue = (float) coldata->values[HUE] * G_PI / 180; hx = sin(hue) * COLORTRIANGLERADIUS; hy = cos(hue) * COLORTRIANGLERADIUS; - sx = sin(hue - 2*M_PI/3) * COLORTRIANGLERADIUS; - sy = cos(hue - 2*M_PI/3) * COLORTRIANGLERADIUS; - vx = sin(hue + 2*M_PI/3) * COLORTRIANGLERADIUS; - vy = cos(hue + 2*M_PI/3) * COLORTRIANGLERADIUS; + sx = sin(hue - 2*G_PI/3) * COLORTRIANGLERADIUS; + sy = cos(hue - 2*G_PI/3) * COLORTRIANGLERADIUS; + vx = sin(hue + 2*G_PI/3) * COLORTRIANGLERADIUS; + vy = cos(hue + 2*G_PI/3) * COLORTRIANGLERADIUS; hue = (float) coldata->values[HUE]; if ((x-sx)*vx+(y-sy)*vy < 0) { sat = 1; diff --git a/modules/colorsel_water.c b/modules/colorsel_water.c index 84b53b0441..2050fc16c3 100644 --- a/modules/colorsel_water.c +++ b/modules/colorsel_water.c @@ -22,16 +22,16 @@ #include #include -#include + #include + #include #include -#include +#include + #include "modregister.h" -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif /* M_PI */ +#include /* prototypes */ static GtkWidget * colorsel_water_new (int, int, int, @@ -164,8 +164,8 @@ calc (gdouble x, gdouble y, gdouble angle) { gdouble s, c; - s = 1.6 * sin (angle * M_PI / 180) * 256.0 / IMAGE_SIZE; - c = 1.6 * cos (angle * M_PI / 180) * 256.0 / IMAGE_SIZE; + s = 1.6 * sin (angle * G_PI / 180) * 256.0 / IMAGE_SIZE; + c = 1.6 * cos (angle * G_PI / 180) * 256.0 / IMAGE_SIZE; return 128 + (x - (IMAGE_SIZE >> 1)) * c - (y - (IMAGE_SIZE >> 1)) * s; } diff --git a/plug-ins/Makefile.am b/plug-ins/Makefile.am index 987fb95591..402d742447 100644 --- a/plug-ins/Makefile.am +++ b/plug-ins/Makefile.am @@ -29,7 +29,6 @@ endif SUBDIRS = \ libgck \ - megawidget \ dbbrowser \ script-fu \ $(GIMP_PERL) \ diff --git a/plug-ins/bmp/bmp.c b/plug-ins/bmp/bmp.c index b9b3653fd1..ba65d60d4a 100644 --- a/plug-ins/bmp/bmp.c +++ b/plug-ins/bmp/bmp.c @@ -46,20 +46,25 @@ */ #include "config.h" -#include -#include -#include + #include #include +#include + +#include + +#include +#include + #include "bmp.h" -#include "libgimp/gimpui.h" + #include "libgimp/stdplugins-intl.h" +FILE *errorfile; +gchar *prog_name = "bmp"; +gchar *filename; +gint interactive_bmp; -FILE *errorfile; -char *prog_name="bmp"; -char *filename; -int interactive_bmp; struct Bitmap_File_Head_Struct Bitmap_File_Head; struct Bitmap_Head_Struct Bitmap_Head; struct Bitmap_OS2_Head_Struct Bitmap_OS2_Head; @@ -67,26 +72,25 @@ struct Bitmap_OS2_Head_Struct Bitmap_OS2_Head; /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); static void init_gtk (void); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ - + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -98,8 +102,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -109,7 +114,7 @@ query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -137,30 +142,35 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_bmp_load", "bmp", "", "0,string,BM"); - gimp_register_save_handler ("file_bmp_save", "bmp", ""); + gimp_register_magic_load_handler ("file_bmp_load", + "bmp", + "", + "0,string,BM"); + gimp_register_save_handler ("file_bmp_save", + "bmp", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GStatusType status = STATUS_SUCCESS; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_bmp_load") == 0) { @@ -183,19 +193,21 @@ run (char *name, break; } - image_ID = ReadBMP (param[1].data.d_string); + if (status == STATUS_SUCCESS) + { + image_ID = ReadBMP (param[1].data.d_string); - if (image_ID != -1) - { - *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = image_ID; - } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } + if (image_ID != -1) + { + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_ID; + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } } else if (strcmp (name, "file_bmp_save") == 0) { @@ -211,11 +223,12 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "BMP", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -244,17 +257,23 @@ run (char *name, break; } - *nreturn_vals = 1; - if (WriteBMP (param[3].data.d_string, image_ID, drawable_ID)) - { - values[0].data.d_status = STATUS_SUCCESS; - } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + if (status == STATUS_SUCCESS) + { + if (! WriteBMP (param[3].data.d_string, image_ID, drawable_ID)) + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } gint32 @@ -291,10 +310,10 @@ static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("bmp"); gtk_init (&argc, &argv); diff --git a/plug-ins/common/CEL.c b/plug-ins/common/CEL.c index 3867d92bdf..d0719f81b0 100644 --- a/plug-ins/common/CEL.c +++ b/plug-ins/common/CEL.c @@ -53,7 +53,7 @@ static gint save_image (gchar *file, gchar *brief, gint32 image, gint32 layer); -static gint palette_dialog (gchar *title); +static void palette_dialog (gchar *title); /* Globals... */ @@ -65,7 +65,7 @@ GPlugInInfo PLUG_IN_INFO = run, /* run_proc */ }; -static char *palette_file = NULL; +static gchar *palette_file = NULL; static size_t data_length = 0; /* Let GIMP library handle initialisation (and inquisitive users) */ @@ -84,13 +84,14 @@ query (void) { PARAM_STRING, "raw_filename", "Name entered" }, { PARAM_STRING, "palette_filename", "Filename to load palette from" }, }; - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); - static gint nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); + static GParamDef save_args[] = { { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, @@ -116,9 +117,6 @@ query (void) nload_args, nload_return_vals, load_args, load_return_vals); - gimp_register_magic_load_handler ("file_cel_load", "cel", - "", "0,string,KiSS\040"); - gimp_install_procedure ("file_cel_save", _("Saves files in KISS CEL file format"), _("This plug-in saves individual KISS cell files."), @@ -131,7 +129,13 @@ query (void) nsave_args, 0, save_args, NULL); - gimp_register_save_handler ("file_cel_save", "cel", ""); + gimp_register_magic_load_handler ("file_cel_load", + "cel", + "", + "0,string,KiSS\040"); + gimp_register_save_handler ("file_cel_save", + "cel", + ""); } static void @@ -141,19 +145,19 @@ run (gchar *name, gint *nreturn_vals, GParam **return_vals) { - gint32 image; /* image ID after load */ - gint status; /* status after save */ static GParam values[2]; /* Return values */ - GRunModeType run_mode; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image; run_mode = param[0].data.d_int32; /* Set up default return values */ *nreturn_vals = 1; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_SUCCESS; *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (run_mode == RUN_INTERACTIVE) { @@ -204,16 +208,15 @@ run (gchar *name, } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_cel_save") == 0) { - status = save_image (param[3].data.d_string, param[4].data.d_string, - param[1].data.d_int32, param[2].data.d_int32); - if (status != TRUE) + if (! save_image (param[3].data.d_string, param[4].data.d_string, + param[1].data.d_int32, param[2].data.d_int32)) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } else { @@ -223,8 +226,10 @@ run (gchar *name, } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_CALLING_ERROR; } + + values[0].data.d_status = status; } /* Load CEL image into The GIMP */ @@ -233,31 +238,31 @@ static gint32 load_image (gchar *file, gchar *brief) { - FILE* fp; /* Read file pointer */ - char *progress; /* Title for progress display */ - guchar header[32]; /* File header */ - int height, width, /* Dimensions of image */ - offx, offy, /* Layer offets */ - colours; /* Number of colours */ + FILE *fp; /* Read file pointer */ + gchar *progress; /* Title for progress display */ + guchar header[32]; /* File header */ + gint height, width, /* Dimensions of image */ + offx, offy, /* Layer offets */ + colours; /* Number of colours */ - gint32 image, /* Image */ - layer; /* Layer */ - guchar *palette, /* 24 bit palette */ - *buffer, /* Temporary buffer */ - *line; /* Pixel data */ - GDrawable *drawable; /* Drawable for layer */ - GPixelRgn pixel_rgn; /* Pixel region for layer */ + gint32 image, /* Image */ + layer; /* Layer */ + guchar *palette, /* 24 bit palette */ + *buffer, /* Temporary buffer */ + *line; /* Pixel data */ + GDrawable *drawable; /* Drawable for layer */ + GPixelRgn pixel_rgn; /* Pixel region for layer */ - int i, j, k; /* Counters */ + gint i, j, k; /* Counters */ /* Open the file for reading */ - fp = fopen(file, "r"); + fp = fopen (file, "r"); if (fp == NULL) { g_message (_("%s\nis not present or is unreadable"), file); - gimp_quit (); + return -1; } progress = g_strdup_printf (_("Loading %s:"), brief); @@ -291,7 +296,7 @@ load_image (gchar *file, if (image == -1) { g_message (_("CEL Can't create a new image")); - gimp_quit (); + return -1; } gimp_image_set_filename (image, file); @@ -365,7 +370,7 @@ load_image (gchar *file, default: g_message (_("Unsupported number of colours (%d)"), colours); - gimp_quit (); + return -1; } gimp_pixel_rgn_set_rect (&pixel_rgn, line, 0, i, drawable->width, 1); @@ -384,7 +389,7 @@ load_image (gchar *file, /* Open the file for reading if user picked one */ if (palette_file == NULL) { - fp= NULL; + fp = NULL; } else { @@ -394,12 +399,13 @@ load_image (gchar *file, if (fp != NULL) { colours = load_palette (fp, palette); + fclose (fp); } else { for (i= 0; i < colours; ++i) { - palette[i*3]= palette[i*3+1]= palette[i*3+2]= i * 256 / colours; + palette[i*3] = palette[i*3+1] = palette[i*3+2]= i * 256 / colours; } } @@ -407,7 +413,6 @@ load_image (gchar *file, /* Close palette file, give back allocated memory */ - fclose (fp); g_free (palette); /* Now get everything redrawn and hand back the finished image */ @@ -487,7 +492,7 @@ save_image (gchar *file, if (type != INDEXEDA_IMAGE) { g_message (_("Only an indexed-alpha image can be saved in CEL format")); - gimp_quit (); + return FALSE; } /* Find out how offset this layer was */ @@ -501,10 +506,10 @@ save_image (gchar *file, if (fp == NULL) { g_message (_("CEL Couldn't write image to\n%s"), file); - gimp_quit (); + return FALSE; } - progress = g_strdup_printf (_("Loading %s:"), brief); + progress = g_strdup_printf (_("Saving %s:"), brief); gimp_progress_init (progress); g_free (progress); @@ -517,11 +522,11 @@ save_image (gchar *file, gimp_image_get_cmap (image, &colours); if (colours > 15) { - header[5]= 8; + header[5] = 8; } else { - header[5]= 4; + header[5] = 4; } /* Fill in the blanks ... */ @@ -594,10 +599,11 @@ palette_ok (GtkWidget *widget, palette_file = g_strdup (gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs))); data_length = strlen (palette_file) + 1; + gtk_widget_destroy (GTK_WIDGET (fs)); } -static gint +static void palette_dialog (gchar *title) { gchar **argv; @@ -634,6 +640,4 @@ palette_dialog (gchar *title) gtk_main (); gdk_flush (); - - return 0; } diff --git a/plug-ins/common/CML_explorer.c b/plug-ins/common/CML_explorer.c index 2716401bc2..84e294627a 100644 --- a/plug-ins/common/CML_explorer.c +++ b/plug-ins/common/CML_explorer.c @@ -83,14 +83,11 @@ #include #include +#include #include #include "libgimp/stdplugins-intl.h" -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - #define PARAM_FILE_FORMAT_VERSION 1.0 #define PLUG_IN_NAME "plug_in_CML_explorer" #define VERBOSE_DIALOGS 1 @@ -111,6 +108,7 @@ #define GTKW_BORDER_WIDTH 3 #define GTKW_FLOAT_MIN_ERROR 0.000001 #define GTKW_ENTRY_BUFFER_SIZE 32 + /* gtkW type */ typedef struct { @@ -124,13 +122,14 @@ typedef struct gchar *name; gpointer data; } gtkW_menu_item; + /* gtkW global variables */ -gint gtkW_border_width = GTKW_BORDER_WIDTH; -gint gtkW_border_height = 0; -gint gtkW_homogeneous_layout = FALSE; -gint gtkW_frame_shadow_type = GTK_SHADOW_ETCHED_IN; -gint gtkW_align_x = GTK_FILL|GTK_EXPAND; -gint gtkW_align_y = GTK_FILL; +static gint gtkW_border_width = GTKW_BORDER_WIDTH; +static gint gtkW_border_height = 0; +static gint gtkW_homogeneous_layout = FALSE; +static gint gtkW_frame_shadow_type = GTK_SHADOW_ETCHED_IN; +static gint gtkW_align_x = GTK_FILL|GTK_EXPAND; +static gint gtkW_align_y = GTK_FILL; /* gtkW callback */ static void gtkW_toggle_update (GtkWidget *widget, gpointer data); @@ -206,7 +205,7 @@ static GtkWidget *gtkW_vbox_add_button (GtkWidget *vbox, static GtkWidget *gtkW_vbox_new (GtkWidget *parent); /* end of GtkW */ -#define RANDOM ((gdouble) ((double) rand ()/((double) RAND_MAX))) +#define RANDOM ((gdouble) ((double) rand ()/((double) G_MAXRAND))) #define CANNONIZE(p, x) (255*(((p).range_h - (p).range_l)*(x) + (p).range_l)) #define HCANNONIZE(p, x) (254*(((p).range_h - (p).range_l)*(x) + (p).range_l)) #define POS_IN_TORUS(i,size) ((i < 0) ? size + i : ((size <= i) ? i - size : i)) diff --git a/plug-ins/common/Makefile.am b/plug-ins/common/Makefile.am index b46e413347..5711c6c7f2 100644 --- a/plug-ins/common/Makefile.am +++ b/plug-ins/common/Makefile.am @@ -436,7 +436,6 @@ emboss_SOURCES = \ emboss.c emboss_LDADD = \ - $(top_builddir)/plug-ins/megawidget/libmegawidget.a \ $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la \ $(GTK_LIBS) \ @@ -759,7 +758,6 @@ nlfilt_SOURCES = \ nlfilt.c nlfilt_LDADD = \ - $(top_builddir)/plug-ins/megawidget/libmegawidget.a \ $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la \ $(GTK_LIBS) \ @@ -1179,7 +1177,6 @@ waves_SOURCES = \ waves.c waves_LDADD = \ - $(top_builddir)/plug-ins/megawidget/libmegawidget.a \ $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la \ $(GTK_LIBS) \ diff --git a/plug-ins/common/aa.c b/plug-ins/common/aa.c index e4a711845e..50b96a7635 100644 --- a/plug-ins/common/aa.c +++ b/plug-ins/common/aa.c @@ -48,7 +48,7 @@ static void type_dialog_ok_callback (GtkWidget *widget, static void type_dialog_toggle_update (GtkWidget *widget, gpointer data); static void type_dialog_cancel_callback (GtkWidget *widget, - gpointer data); + gpointer data); /* * Some global variables. @@ -56,10 +56,10 @@ static void type_dialog_cancel_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ query, /* query_proc */ - run, /* run_proc */ + run, /* run_proc */ }; /** @@ -82,7 +82,7 @@ query (void) {PARAM_STRING, "raw_filename", "The name entered"}, {PARAM_STRING, "file_type", "File type to use"} }; - static int nsave_args = sizeof(save_args) / sizeof(save_args[0]); + static gint nsave_args = sizeof(save_args) / sizeof(save_args[0]); INIT_I18N(); @@ -98,7 +98,9 @@ query (void) nsave_args, 0, save_args, NULL); - gimp_register_save_handler ("file_aa_save", "ansi,txt,text,html", ""); + gimp_register_save_handler ("file_aa_save", + "ansi,txt,text,html", + ""); } /** @@ -107,11 +109,11 @@ query (void) * -1 means it wasn't found. */ static int -get_type_from_string (char *string) +get_type_from_string (gchar *string) { - int type = 0; + gint type = 0; aa_format **p = aa_formats; - + while (*p && strcmp ((*p)->formatname, string)) { p++; @@ -132,19 +134,19 @@ run (gchar *name, GParam **return_vals) { static GParam values[2]; - GStatusType status = STATUS_SUCCESS; - GRunModeType run_mode; - gint output_type = 0; - static int last_type = 0; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint output_type = 0; + static int last_type = 0; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; /* Set us up to return a status. */ *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; run_mode = param[0].data.d_int32; image_ID = param[1].data.d_int32; @@ -158,10 +160,11 @@ run (gchar *name, INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "AA", - (CAN_HANDLE_GRAY | CAN_HANDLE_ALPHA)); + (CAN_HANDLE_GRAY | + CAN_HANDLE_ALPHA)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -171,54 +174,62 @@ run (gchar *name, } if (!aa_savable (drawable_ID)) - { - values[0].data.d_status = STATUS_CALLING_ERROR; - goto finish; - } - - switch (run_mode) - { - case RUN_INTERACTIVE: - gimp_get_data ("file_aa_save", &last_type); - output_type = type_dialog (last_type); - break; - - case RUN_NONINTERACTIVE: - /* Make sure all the arguments are there! */ - if (nparams != 6) - status = STATUS_CALLING_ERROR; - else - output_type = get_type_from_string (param[5].data.d_string); - break; - - case RUN_WITH_LAST_VALS: - gimp_get_data ("file_aa_save", &last_type); - output_type = last_type; - break; - - default: - break; - } - - if (output_type < 0) { status = STATUS_CALLING_ERROR; - goto finish; } - if (save_aa (output_type, param[3].data.d_string, image_ID, drawable_ID)) + if (status == STATUS_SUCCESS) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - last_type = output_type; - gimp_set_data ("file_aa_save", &last_type, sizeof(last_type)); - } - else - values[0].data.d_status = STATUS_SUCCESS; + switch (run_mode) + { + case RUN_INTERACTIVE: + gimp_get_data ("file_aa_save", &last_type); + output_type = type_dialog (last_type); + if (output_type < 0) + status = STATUS_CANCEL; + break; - finish: + case RUN_NONINTERACTIVE: + /* Make sure all the arguments are there! */ + if (nparams != 6) + { + status = STATUS_CALLING_ERROR; + } + else + { + output_type = get_type_from_string (param[5].data.d_string); + if (output_type < 0) + status = STATUS_CALLING_ERROR; + } + break; + + case RUN_WITH_LAST_VALS: + gimp_get_data ("file_aa_save", &last_type); + output_type = last_type; + break; + + default: + break; + } + } + + if (status == STATUS_SUCCESS) + { + if (save_aa (output_type, param[3].data.d_string, image_ID, drawable_ID)) + { + status = STATUS_EXECUTION_ERROR; + } + else + { + last_type = output_type; + gimp_set_data ("file_aa_save", &last_type, sizeof (last_type)); + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); + + values[0].data.d_status = status; } /** @@ -419,5 +430,5 @@ static void type_dialog_toggle_update (GtkWidget *widget, gpointer data) { - selected_type = get_type_from_string ((char *)data); + selected_type = get_type_from_string ((char *) data); } diff --git a/plug-ins/common/blinds.c b/plug-ins/common/blinds.c index 4ad2f1b81f..b2442dff52 100644 --- a/plug-ins/common/blinds.c +++ b/plug-ins/common/blinds.c @@ -304,6 +304,8 @@ blinds_dialog (void) { GtkWidget *dlg; GtkWidget *main_vbox; + GtkWidget *hbox; + GtkWidget *vbox; GtkWidget *frame; GtkWidget *toggle_vbox; GtkWidget *xframe; @@ -354,19 +356,23 @@ blinds_dialog (void) gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dlg)->vbox), main_vbox); gtk_widget_show (main_vbox); + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); + frame = gtk_frame_new (_("Preview")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - table = gtk_table_new (5, 5, FALSE); + table = gtk_table_new (1, 1, FALSE); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show (table); xframe = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (xframe), GTK_SHADOW_IN); - gtk_table_attach (GTK_TABLE (table), xframe, 0, 1, 0, 2, + gtk_table_attach (GTK_TABLE (table), xframe, 0, 1, 0, 1, GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_widget_show (xframe); @@ -375,6 +381,10 @@ blinds_dialog (void) gtk_container_add (GTK_CONTAINER (xframe), bint.preview); gtk_widget_show(bint.preview); + vbox = gtk_vbox_new (FALSE, 4); + gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); + gtk_widget_show (vbox); + frame = gimp_radio_group_new2 (TRUE, _("Orientation"), blinds_radio_update, @@ -384,15 +394,11 @@ blinds_dialog (void) _("Vertical"), (gpointer) VERTICAL, NULL, NULL); - - gtk_table_attach (GTK_TABLE (table), frame, 1, 2, 0, 1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); gtk_widget_show (frame); - + frame = gtk_frame_new (_("Background")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table), frame, 1, 2, 1, 2, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); toggle_vbox = gtk_vbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 2); @@ -460,6 +466,7 @@ blinds_ok_callback (GtkWidget *widget, gpointer data) { bint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } diff --git a/plug-ins/common/blur.c b/plug-ins/common/blur.c index 23cb803b27..8d07b402d8 100644 --- a/plug-ins/common/blur.c +++ b/plug-ins/common/blur.c @@ -96,8 +96,8 @@ typedef struct { gdouble blur_pct; /* likelihood of randomization (as %age) */ gdouble blur_rcount; /* repeat count */ - gint seed_type; /* seed init. type - current time or user value */ - gint blur_seed; /* seed value for rand() function */ + gint seed_type; /* seed init. type - current time or user value */ + gint blur_seed; /* seed value for rand() function */ } BlurVals; static BlurVals pivals = @@ -143,15 +143,14 @@ GPlugInInfo PLUG_IN_INFO = static void blur (GDrawable *drawable); static inline void blur_prepare_row (GPixelRgn *pixel_rgn, - guchar *data, - int x, - int y, - int w); + guchar *data, + gint x, + gint y, + gint w); -static gint blur_dialog (void); - -static void blur_ok_callback (GtkWidget *widget, - gpointer data); +static gint blur_dialog (void); +static void blur_ok_callback (GtkWidget *widget, + gpointer data); /************************************ Guts ***********************************/ @@ -174,7 +173,7 @@ query (void) { PARAM_IMAGE, "image", "Input image (unused)" }, { PARAM_DRAWABLE, "drawable", "Input drawable" }, }; - static int nargs_ni = sizeof(args_ni) / sizeof (args_ni[0]); + static gint nargs_ni = sizeof(args_ni) / sizeof (args_ni[0]); static GParamDef args[] = { @@ -186,25 +185,25 @@ query (void) { PARAM_INT32, "seed_type", "Seed type (10 = current time, 11 = seed value)" }, { PARAM_INT32, "blur_seed", "Seed value (used only if seed type is 11)" }, }; - static int nargs = sizeof(args) / sizeof (args[0]); + static gint nargs = sizeof(args) / sizeof (args[0]); static GParamDef *return_vals = NULL; - static int nreturn_vals = 0; + static gint nreturn_vals = 0; - const char *blurb = _("Apply a 3x3 blurring convolution kernel to the specified drawable."); - const char *help = _("This plug-in randomly blurs the specified drawable, using a 3x3 blur. You control the percentage of the pixels that are blurred and the number of times blurring is applied. Indexed images are not supported."); - const char *author = "Miles O'Neal http://www.rru.com/~meo/"; - const char *copyrights = "Miles O'Neal, Spencer Kimball, Peter Mattis, Torsten Martinsen, Brian Degenhardt, Federico Mena Quintero, Stephen Norris, Daniel Cotting"; - const char *copyright_date = "1995-1998"; + const gchar *blurb = _("Apply a 3x3 blurring convolution kernel to the specified drawable."); + const gchar *help = _("This plug-in randomly blurs the specified drawable, using a 3x3 blur. You control the percentage of the pixels that are blurred and the number of times blurring is applied. Indexed images are not supported."); + const gchar *author = "Miles O'Neal http://www.rru.com/~meo/"; + const gchar *copyrights = "Miles O'Neal, Spencer Kimball, Peter Mattis, Torsten Martinsen, Brian Degenhardt, Federico Mena Quintero, Stephen Norris, Daniel Cotting"; + const gchar *copyright_date = "1995-1998"; INIT_I18N(); gimp_install_procedure ("plug_in_blur_randomize", - (char *) blurb, - (char *) help, - (char *) author, - (char *) copyrights, - (char *) copyright_date, + (gchar *) blurb, + (gchar *) help, + (gchar *) author, + (gchar *) copyrights, + (gchar *) copyright_date, N_("/Filters/Blur/Blur..."), "RGB*, GRAY*", PROC_PLUG_IN, @@ -212,11 +211,11 @@ query (void) args, return_vals); gimp_install_procedure (PLUG_IN_NAME, - (char *) blurb, - (char *) help, - (char *) author, - (char *) copyrights, - (char *) copyright_date, + (gchar *) blurb, + (gchar *) help, + (gchar *) author, + (gchar *) copyrights, + (gchar *) copyright_date, NULL, "RGB*, GRAY*", PROC_PLUG_IN, @@ -243,7 +242,7 @@ run (gchar *name, GDrawable *drawable; GRunModeType run_mode; GStatusType status = STATUS_SUCCESS; /* assume the best! */ - char prog_label[32]; + gchar prog_label[32]; static GParam values[1]; INIT_I18N_UI(); @@ -282,22 +281,22 @@ run (gchar *name, * parameters have legitimate values. */ case RUN_NONINTERACTIVE: - if ((strcmp(name, "plug_in_blur_randomize") == 0) && + if ((strcmp (name, "plug_in_blur_randomize") == 0) && (nparams == 7)) { - pivals.blur_pct = (gdouble)param[3].data.d_float; - pivals.blur_pct = (gdouble)MIN(100.0, pivals.blur_pct); - pivals.blur_pct = (gdouble)MAX(1.0, pivals.blur_pct); - pivals.blur_rcount = (gdouble)param[4].data.d_float; - pivals.blur_rcount = (gdouble)MIN(100.0,pivals.blur_rcount); - pivals.blur_rcount = (gdouble)MAX(1.0, pivals.blur_rcount); + pivals.blur_pct = (gdouble) param[3].data.d_float; + pivals.blur_pct = (gdouble) MIN (100.0, pivals.blur_pct); + pivals.blur_pct = (gdouble) MAX (1.0, pivals.blur_pct); + pivals.blur_rcount = (gdouble) param[4].data.d_float; + pivals.blur_rcount = (gdouble) MIN (100.0,pivals.blur_rcount); + pivals.blur_rcount = (gdouble) MAX (1.0, pivals.blur_rcount); pivals.seed_type = (gint) param[5].data.d_int32; - pivals.seed_type = (gint) MIN(SEED_USER, param[5].data.d_int32); - pivals.seed_type = (gint) MAX(SEED_TIME, param[5].data.d_int32); + pivals.seed_type = (gint) MIN (SEED_USER, param[5].data.d_int32); + pivals.seed_type = (gint) MAX (SEED_TIME, param[5].data.d_int32); pivals.blur_seed = (gint) param[6].data.d_int32; status = STATUS_SUCCESS; } - else if ((strcmp(name, PLUG_IN_NAME) == 0) && + else if ((strcmp (name, PLUG_IN_NAME) == 0) && (nparams == 3)) { pivals.blur_pct = (gdouble) 100.0; @@ -316,7 +315,7 @@ run (gchar *name, * If we're running with the last set of values, get those values. */ case RUN_WITH_LAST_VALS: - gimp_get_data(PLUG_IN_NAME, &pivals); + gimp_get_data (PLUG_IN_NAME, &pivals); break; /* @@ -330,31 +329,31 @@ run (gchar *name, /* * JUST DO IT! */ - strcpy(prog_label, BLUR_VERSION); - gimp_progress_init(prog_label); - gimp_tile_cache_ntiles(2 * (drawable->width / gimp_tile_width() + 1)); + strcpy (prog_label, BLUR_VERSION); + gimp_progress_init (prog_label); + gimp_tile_cache_ntiles (2 * (drawable->width / gimp_tile_width() + 1)); /* * Initialize the rand() function seed */ if (pivals.seed_type == SEED_TIME) - srand (time (NULL)); - else - srand (pivals.blur_seed); + pivals.blur_seed = time (NULL); - blur(drawable); + srand (pivals.blur_seed); + + blur (drawable); /* * If we ran interactively (even repeating) update the display. */ if (run_mode != RUN_NONINTERACTIVE) { - gimp_displays_flush(); + gimp_displays_flush (); } /* * If we use the dialog popup, set the data for future use. */ if (run_mode == RUN_INTERACTIVE) { - gimp_set_data(PLUG_IN_NAME, &pivals, sizeof(BlurVals)); + gimp_set_data (PLUG_IN_NAME, &pivals, sizeof (BlurVals)); } } } @@ -371,7 +370,7 @@ run (gchar *name, * of the drawable. */ values[0].data.d_status = status; - gimp_drawable_detach(drawable); + gimp_drawable_detach (drawable); } /********************************* @@ -581,7 +580,7 @@ blur (GDrawable *drawable) } } } - gimp_progress_update((double) 100); + gimp_progress_update ((double) 100); /* * update the blurred region */ @@ -605,20 +604,12 @@ static gint blur_dialog (void) { GtkWidget *dlg; - GtkWidget *label; GtkWidget *frame; - GtkWidget *seed_hbox; - GtkWidget *seed_vbox; GtkWidget *table; - GtkWidget *spinbutton; + GtkWidget *seed_hbox; GtkObject *adj; - GtkWidget *radio_button; - GSList *group = NULL; - gchar **argv; - gint argc; - - gint do_time = (pivals.seed_type == SEED_TIME); - gint do_user = (pivals.seed_type == SEED_USER); + gchar **argv; + gint argc; argc = 1; argv = g_new (gchar *, 1); @@ -642,6 +633,9 @@ blur_dialog (void) gtk_signal_connect (GTK_OBJECT (dlg), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + + gimp_help_init (); + /* * Parameter settings * @@ -652,82 +646,24 @@ blur_dialog (void) gtk_container_set_border_width (GTK_CONTAINER(frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (4, 3, FALSE); + table = gtk_table_new (3, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show (table); - gimp_help_init (); - - label = gtk_label_new (_("Randomization Seed:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); - gtk_widget_show (label); - - /* - * Box to hold seed initialization radio buttons - */ - seed_vbox = gtk_vbox_new (FALSE, 2); - gtk_table_attach (GTK_TABLE (table), seed_vbox, 1, 2, 1, 2, - GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); - gtk_widget_show (seed_vbox); - /* - * Time button - */ - radio_button = gtk_radio_button_new_with_label (NULL, _("Current Time")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button)); - gtk_box_pack_start (GTK_BOX (seed_vbox), radio_button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (radio_button), "toggled", - GTK_SIGNAL_FUNC (gimp_toggle_button_update), - &do_time); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), do_time); - gtk_widget_show (radio_button); - gimp_help_set_help_data (radio_button, - _("Seed random number generator from the current " - "time - this guarantees a reasonable " - "randomization"), NULL); - /* - * Box to hold seed user initialization controls - */ - seed_hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX (seed_vbox), seed_hbox, FALSE, FALSE, 0); - gtk_widget_show (seed_hbox); - /* - * User button - */ - radio_button = gtk_radio_button_new_with_label (group, _("Other Value")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button)); - gtk_box_pack_start (GTK_BOX (seed_hbox), radio_button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (radio_button), "toggled", - GTK_SIGNAL_FUNC (gimp_toggle_button_update), - &do_user); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), do_user); - gtk_widget_show (radio_button); - gimp_help_set_help_data (radio_button, - _("Enable user-entered value for random number " - "generator seed - this allows you to repeat a " - "given \"random\" operation"), NULL); - /* - * Randomization seed number (text) - */ - spinbutton = gimp_spin_button_new (&adj, pivals.blur_seed, - G_MININT, G_MAXINT, 1, 10, 0, 1, 0); - gtk_box_pack_start(GTK_BOX (seed_hbox), spinbutton, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (adj), "value_changed", - GTK_SIGNAL_FUNC (gimp_int_adjustment_update), - &pivals.blur_seed); - gtk_widget_show (spinbutton); - gimp_help_set_help_data (spinbutton, - _("Value for seeding the random number generator"), - NULL); - gtk_widget_show (seed_hbox); + /* Random Seed */ + seed_hbox = gimp_random_seed_new (&pivals.blur_seed, &pivals.seed_type, + SEED_TIME, SEED_USER); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Random Seed:"), 1.0, 0.5, + seed_hbox, TRUE); /* * Randomization percentage label & scale (1 to 100) */ - adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, _("Randomization %:"), SCALE_WIDTH, 0, pivals.blur_pct, 1.0, 100.0, 1.0, 10.0, 0, _("Percentage of pixels to be filtered"), NULL); @@ -738,7 +674,7 @@ blur_dialog (void) /* * Repeat count label & scale (1 to 100) */ - adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, _("Repeat:"), SCALE_WIDTH, 0, pivals.blur_rcount, 1.0, 100.0, 1.0, 10.0, 0, _("Number of times to apply filter"), NULL); @@ -754,18 +690,6 @@ blur_dialog (void) gimp_help_free (); gdk_flush (); - /* - * Figure out which type of seed initialization to apply. - */ - if (do_time) - { - pivals.seed_type = SEED_TIME; - } - else - { - pivals.seed_type = SEED_USER; - } - return blur_int.run; } diff --git a/plug-ins/common/bumpmap.c b/plug-ins/common/bumpmap.c index cf995f72f0..9fbe3c1e5c 100644 --- a/plug-ins/common/bumpmap.c +++ b/plug-ins/common/bumpmap.c @@ -757,8 +757,12 @@ static gint bumpmap_dialog (void) { GtkWidget *dialog; - GtkWidget *top_table; + GtkWidget *top_vbox; + GtkWidget *hbox; GtkWidget *frame; + GtkWidget *sep; + GtkWidget *abox; + GtkWidget *pframe; GtkWidget *table; GtkWidget *right_vbox; GtkWidget *label; @@ -809,27 +813,38 @@ bumpmap_dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - top_table = gtk_table_new (2, 2, FALSE); - gtk_container_border_width (GTK_CONTAINER (top_table), 6); - gtk_table_set_row_spacings (GTK_TABLE (top_table), 4); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), top_table, + top_vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (top_vbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), top_vbox, FALSE, FALSE, 0); - gtk_widget_show (top_table); + gtk_widget_show (top_vbox); + + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (top_vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); /* Preview */ - - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 0, 1, 0, 1, 0, 0, 0, 0); + frame = gtk_frame_new (_("Preview")); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); + abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_add (GTK_CONTAINER (frame), abox); + gtk_widget_show (abox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (pframe), GTK_SHADOW_IN); + gtk_container_set_border_width (GTK_CONTAINER (pframe), 4); + gtk_container_add (GTK_CONTAINER (abox), pframe); + gtk_widget_show (pframe); + bmint.preview_width = MIN (sel_width, PREVIEW_SIZE); bmint.preview_height = MIN (sel_height, PREVIEW_SIZE); bmint.preview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (bmint.preview), bmint.preview_width, bmint.preview_height); - gtk_container_add (GTK_CONTAINER (frame), bmint.preview); + gtk_container_add (GTK_CONTAINER (pframe), bmint.preview); gtk_widget_show (bmint.preview); gtk_widget_set_events (bmint.preview, @@ -843,17 +858,30 @@ bumpmap_dialog (void) dialog_init_preview (); - /* vbox for upper-right controls */ + /* Type of map */ + frame = + gimp_radio_group_new2 (TRUE, _("Map Type"), + dialog_map_type_callback, + &bmvals.type, (gpointer) bmvals.type, - right_vbox = gtk_vbox_new (FALSE, 2); - gtk_table_attach (GTK_TABLE (top_table), right_vbox, 1, 2, 0, 1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (right_vbox); + _("Linear Map"), (gpointer) LINEAR, NULL, + _("Spherical Map"), (gpointer) SPHERICAL, NULL, + _("Sinuosidal Map"), (gpointer) SINUOSIDAL, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + + right_vbox = GTK_BIN (frame)->child; + + sep = gtk_hseparator_new (); + gtk_box_pack_start (GTK_BOX (right_vbox), sep, FALSE, FALSE, 1); + gtk_widget_show (sep); /* Compensate darkening */ button = gtk_check_button_new_with_label (_("Compensate for Darkening")); - gtk_box_pack_start (GTK_BOX (right_vbox), button, FALSE, FALSE, 0);; + gtk_box_pack_start (GTK_BOX (right_vbox), button, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), bmvals.compensate ? TRUE : FALSE); gtk_signal_connect (GTK_OBJECT (button), "toggled", @@ -872,29 +900,12 @@ bumpmap_dialog (void) NULL); gtk_widget_show (button); - /* Type of map */ - - frame = - gimp_radio_group_new2 (TRUE, NULL, - dialog_map_type_callback, - &bmvals.type, (gpointer) bmvals.type, - - _("Linear Map"), (gpointer) LINEAR, NULL, - _("Spherical Map"), (gpointer) SPHERICAL, NULL, - _("Sinuosidal Map"), (gpointer) SINUOSIDAL, NULL, - - NULL); - - gtk_box_pack_start (GTK_BOX (right_vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - /* Table for bottom controls */ table = gtk_table_new (8, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_table_attach (GTK_TABLE (top_table), table, 0, 2, 1, 2, - GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (top_vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); /* Bump map menu */ diff --git a/plug-ins/common/bz2.c b/plug-ins/common/bz2.c index 8553a992ca..8e5b397b44 100644 --- a/plug-ins/common/bz2.c +++ b/plug-ins/common/bz2.c @@ -32,6 +32,8 @@ * filename.foo.bz2 where foo is some already-recognized extension */ +#include "config.h" + #include #include #include @@ -45,40 +47,42 @@ #include #include #endif -#include "libgimp/gimp.h" -#include "config.h" +#include + #include "libgimp/stdplugins-intl.h" -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (char *filename, gint32 run_mode); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID, - gint32 run_mode); +static gint32 load_image (gchar *filename, + gint32 run_mode, + GStatusType *status /* return value */); +static GStatusType save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID, + gint32 run_mode); -static int valid_file (char* filename) ; -static char* find_extension (char* filename) ; +static gboolean valid_file (gchar *filename); +static gchar * find_extension (gchar *filename); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -86,14 +90,13 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -103,7 +106,7 @@ query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); gimp_install_procedure ("file_bz2_load", "loads files compressed with bzip2", @@ -129,49 +132,48 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_load_handler ("file_bz2_load", "xcf.bz2,bz2,xcfbz2", ""); - gimp_register_save_handler ("file_bz2_save", "xcf.bz2,bz2,xcfbz2", ""); - + gimp_register_load_handler ("file_bz2_load", + "xcf.bz2,bz2,xcfbz2", + ""); + gimp_register_save_handler ("file_bz2_save", + "xcf.bz2,bz2,xcfbz2", + ""); } - static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - - INIT_I18N(); + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; run_mode = param[0].data.d_int32; - *nreturn_vals = 1; - *return_vals = values; + INIT_I18N(); - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_bz2_load") == 0) { image_ID = load_image (param[1].data.d_string, - param[0].data.d_int32); - if (image_ID != -1) + param[0].data.d_int32, + &status); + + if (image_ID != -1 && + status == STATUS_SUCCESS) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } } else if (strcmp (name, "file_bz2_save") == 0) { @@ -183,7 +185,7 @@ run (char *name, /* Make sure all the arguments are there! */ if (nparams != 4) status = STATUS_CALLING_ERROR; - + break; case RUN_WITH_LAST_VALS: break; @@ -191,71 +193,82 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - param[1].data.d_int32, - param[2].data.d_int32, - param[0].data.d_int32 )) + if (status == STATUS_SUCCESS) { - values[0].data.d_status = STATUS_SUCCESS; + status = save_image (param[3].data.d_string, + param[1].data.d_int32, + param[2].data.d_int32, + param[0].data.d_int32); } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } #ifdef __EMX__ -static int spawn_bz(char *filename, char* tmpname, char *parms, int *pid) +static gint +spawn_bz (gchar *filename, + gchar *tmpname, + gchar *parms, + gint *pid) { FILE *f; - int tfd; + gint tfd; - if (!(f = fopen(filename,"wb"))){ - g_message("bz: fopen failed: %s\n", g_strerror(errno)); - return -1; - } - - /* save fileno(stdout) */ - tfd = dup(fileno(stdout)); - /* make stdout for this process be the output file */ - if (dup2(fileno(f),fileno(stdout)) == -1) + if (!(f = fopen(filename,"wb"))) { - g_message ("bz: dup2 failed: %s\n", g_strerror(errno)); - close(tfd); + g_message ("bz: fopen failed: %s\n", g_strerror (errno)); return -1; } - fcntl(tfd, F_SETFD, FD_CLOEXEC); + + /* save fileno(stdout) */ + tfd = dup (fileno (stdout)); + /* make stdout for this process be the output file */ + if (dup2 (fileno (f), fileno (stdout)) == -1) + { + g_message ("bz: dup2 failed: %s\n", g_strerror (errno)); + close (tfd); + return -1; + } + fcntl (tfd, F_SETFD, FD_CLOEXEC); *pid = spawnlp (P_NOWAIT, "bzip2", "bzip2", parms, tmpname, NULL); - fclose(f); + fclose (f); /* restore fileno(stdout) */ - dup2(tfd,fileno(stdout)); - close(tfd); + dup2 (tfd, fileno (stdout)); + close (tfd); if (*pid == -1) { - g_message ("bz: spawn failed: %s\n", g_strerror(errno)); + g_message ("bz: spawn failed: %s\n", g_strerror (errno)); return -1; } return 0; } #endif -static gint -save_image (char *filename, +static GStatusType +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID, gint32 run_mode) { - FILE* f; - GParam* params; + FILE *f; + GParam *params; gint retvals; - char* ext; - char* tmpname; - int pid; - int status; + gchar *ext; + gchar *tmpname; + gint pid; + gint status; - if (NULL == (ext = find_extension(filename))) return -1; + if (NULL == (ext = find_extension (filename))) + { + g_message (_("bz2: can't open bzip2ed file without a " + "sensible extension\n")); + return STATUS_CALLING_ERROR; + } /* get a temp name with the right extension and save into it. */ @@ -276,11 +289,13 @@ save_image (char *filename, PARAM_STRING, tmpname, PARAM_END); - if (params[0].data.d_status == FALSE || !valid_file(tmpname)) { - unlink (tmpname); - g_free (tmpname); - return -1; - } + if (!valid_file (tmpname) || + params[0].data.d_status != STATUS_SUCCESS) + { + unlink (tmpname); + g_free (tmpname); + return params[0].data.d_status; + } /* if (! file_save(image_ID, tmpname, tmpname)) { */ /* unlink (tmpname); */ @@ -289,37 +304,37 @@ save_image (char *filename, #ifndef __EMX__ /* fork off a bzip2 process */ - if ((pid = fork()) < 0) + if ((pid = fork ()) < 0) { - g_message ("bz2: fork failed: %s\n", g_strerror(errno)); + g_message ("bz2: fork failed: %s\n", g_strerror (errno)); g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } else if (pid == 0) { - - if (!(f = fopen(filename,"w"))){ - g_message("bz2: fopen failed: %s\n", g_strerror(errno)); - g_free (tmpname); - _exit(127); - } + if (!(f = fopen (filename, "w"))) + { + g_message ("bz2: fopen failed: %s\n", g_strerror (errno)); + g_free (tmpname); + _exit(127); + } /* make stdout for this process be the output file */ - if (-1 == dup2(fileno(f),fileno(stdout))) - g_message ("bz2: dup2 failed: %s\n", g_strerror(errno)); + if (-1 == dup2 (fileno (f), fileno (stdout))) + g_message ("bz2: dup2 failed: %s\n", g_strerror (errno)); /* and bzip2 into it */ execlp ("bzip2", "bzip2", "-cf", tmpname, NULL); - g_message ("bz2: exec failed: bzip2: %s\n", g_strerror(errno)); + g_message ("bz2: exec failed: bzip2: %s\n", g_strerror (errno)); g_free (tmpname); - _exit(127); + _exit (127); } else #else /* __EMX__ */ - if (spawn_bz(filename, tmpname, "-cf", &pid) == -1) + if (spawn_bz (filename, tmpname, "-cf", &pid) == -1) { g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } #endif { @@ -330,27 +345,35 @@ save_image (char *filename, { g_message ("bz2: bzip2 exited abnormally on file %s\n", tmpname); g_free (tmpname); - return 0; + return STATUS_EXECUTION_ERROR; } } unlink (tmpname); g_free (tmpname); - return TRUE; + return STATUS_SUCCESS; } static gint32 -load_image (char *filename, gint32 run_mode) +load_image (gchar *filename, + gint32 run_mode, + GStatusType *status /* return value */) { - GParam* params; + GParam *params; gint retvals; - char* ext; - char* tmpname; - int pid; - int status; + gchar *ext; + gchar *tmpname; + gint pid; + gint process_status; - if (NULL == (ext = find_extension(filename))) return -1; + if (NULL == (ext = find_extension (filename))) + { + g_message (_("bz2: can't open bzip2ed file without a " + "sensible extension\n")); + *status = STATUS_CALLING_ERROR; + return -1; + } /* find a temp name */ params = gimp_run_procedure ("gimp_temp_name", @@ -363,47 +386,51 @@ load_image (char *filename, gint32 run_mode) #ifndef __EMX__ /* fork off a g(un)zip and wait for it */ - if ((pid = fork()) < 0) + if ((pid = fork ()) < 0) { - g_message ("bz2: fork failed: %s\n", g_strerror(errno)); + g_message ("bz2: fork failed: %s\n", g_strerror (errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } else if (pid == 0) /* child process */ { - FILE* f; - if (!(f = fopen(tmpname,"w"))){ - g_message("bz2: fopen failed: %s\n", g_strerror(errno)); - g_free (tmpname); - _exit(127); - } + FILE *f; + if (!(f = fopen (tmpname,"w"))) + { + g_message ("bz2: fopen failed: %s\n", g_strerror (errno)); + g_free (tmpname); + _exit (127); + } /* make stdout for this child process be the temp file */ - if (-1 == dup2(fileno(f),fileno(stdout))) - g_message ("bz2: dup2 failed: %s\n", g_strerror(errno)); + if (-1 == dup2 (fileno (f), fileno (stdout))) + g_message ("bz2: dup2 failed: %s\n", g_strerror (errno)); /* and unzip into it */ execlp ("bzip2", "bzip2", "-cfd", filename, NULL); - g_message ("bz2: exec failed: bunzip2: %s\n", g_strerror(errno)); + g_message ("bz2: exec failed: bunzip2: %s\n", g_strerror (errno)); g_free (tmpname); - _exit(127); + _exit (127); } else /* parent process */ #else /* __EMX__ */ - if (spawn_bz(filename, tmpname, "-cfd", &pid) == -1) + if (spawn_bz (filename, tmpname, "-cfd", &pid) == -1) { - g_free (tmpname); + g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } #endif { - waitpid (pid, &status, 0); + waitpid (pid, &process_status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (process_status) || + WEXITSTATUS (process_status) != 0) { g_message ("bz2: bzip2 exited abnormally on file %s\n", filename); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } } @@ -420,8 +447,12 @@ load_image (char *filename, gint32 run_mode) unlink (tmpname); g_free (tmpname); - if (params[0].data.d_status == FALSE) - return -1; + *status = params[0].data.d_status; + + if (params[0].data.d_status != STATUS_SUCCESS) + { + return -1; + } else { gimp_image_set_filename (params[1].data.d_int32, filename); @@ -429,47 +460,52 @@ load_image (char *filename, gint32 run_mode) } } - -static int valid_file (char* filename) +static gboolean +valid_file (gchar* filename) { - int stat_res; + gint stat_res; struct stat buf; - stat_res = stat(filename, &buf); + stat_res = stat (filename, &buf); if ((0 == stat_res) && (buf.st_size > 0)) - return 1; + return TRUE; else - return 0; + return FALSE; } -static char* find_extension (char* filename) +static gchar * +find_extension (gchar* filename) { - char* filename_copy; - char* ext; + gchar *filename_copy; + gchar *ext; /* we never free this copy - aren't we evil! */ - filename_copy = malloc(strlen(filename)+1); - strcpy(filename_copy, filename); + filename_copy = g_malloc (strlen (filename) + 1); + strcpy (filename_copy, filename); /* find the extension, boy! */ ext = strrchr (filename_copy, '.'); - while (1) { - if (!ext || ext[1] == 0 || strchr(ext, '/')) - { - g_message (_("bz2: can't open bzip2ed file without a sensible extension\n")); - return NULL; - } - if (0 == strcmp(ext, ".xcfbz2")) { - return ".xcf"; /* we've found it */ + while (1) + { + if (!ext || ext[1] == 0 || strchr (ext, '/')) + { + return NULL; + } + if (0 == strcmp (ext, ".xcfbz2")) + { + return ".xcf"; /* we've found it */ + } + if (0 != strcmp (ext, ".bz2")) + { + return ext; + } + else + { + /* we found ".bz2" so strip it, loop back, and look again */ + *ext = 0; + ext = strrchr (filename_copy, '.'); + } } - if (0 != strcmp(ext,".bz2")) { - return ext; - } else { - /* we found ".bz2" so strip it, loop back, and look again */ - *ext = 0; - ext = strrchr (filename_copy, '.'); - } - } } diff --git a/plug-ins/common/colortoalpha.c b/plug-ins/common/colortoalpha.c index e89e5ca2a7..86b25e5995 100644 --- a/plug-ins/common/colortoalpha.c +++ b/plug-ins/common/colortoalpha.c @@ -384,8 +384,9 @@ static gint colortoalpha_dialog (GDrawable *drawable) { GtkWidget *dlg; - GtkWidget *button; + GtkWidget *frame; GtkWidget *table; + GtkWidget *button; GtkWidget *label; guchar *color_cube; @@ -425,10 +426,15 @@ colortoalpha_dialog (GDrawable *drawable) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + frame = gtk_frame_new (_("Color")); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + table = gtk_table_new (1, 3, FALSE); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_container_set_border_width (GTK_CONTAINER (table), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); + gtk_table_set_col_spacings (GTK_TABLE (table), 6); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show (table); label = gtk_label_new (_("From:")); @@ -440,7 +446,7 @@ colortoalpha_dialog (GDrawable *drawable) PRV_WIDTH, PRV_HEIGHT, pvals.color, 3); gtk_table_attach (GTK_TABLE (table), button, 1, 2, 0, 1, - GTK_FILL, GTK_SHRINK, 4, 4) ; + GTK_FILL, GTK_SHRINK, 0, 0) ; gtk_widget_show (button); ppreview.color_button = button; diff --git a/plug-ins/common/compressor.c b/plug-ins/common/compressor.c index 9367ecf0e1..7150f9ff02 100644 --- a/plug-ins/common/compressor.c +++ b/plug-ins/common/compressor.c @@ -88,10 +88,11 @@ #include #endif -#include "config.h" -#include "libgimp/gimp.h" +#include + #include "libgimp/stdplugins-intl.h" + /* Author 1: Josh MacDonald (url.c) */ /* Author 2: Daniel Risacher (gz.c) */ @@ -100,34 +101,37 @@ * that metric, I figure this plug-in is worth about $10,000 USD */ /* But you got it free. Magic of Gnu. */ -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (char *filename, gint32 run_mode); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID, - gint32 run_mode); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -static int valid_file (char* filename) ; -static char* find_extension (char* filename); +static gint32 load_image (gchar *filename, + gint32 run_mode, + GStatusType *status /* return value */); +static GStatusType save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID, + gint32 run_mode); + +static gboolean valid_file (gchar *filename); +static gchar * find_extension (gchar *filename); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -135,14 +139,13 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -152,7 +155,7 @@ query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -179,50 +182,50 @@ query () PROC_PLUG_IN, nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_gz_load", "xcf.gz,gz,xcfgz", - "", "0,string,\037\213"); - gimp_register_save_handler ("file_gz_save", "xcf.gz,gz,xcfgz", ""); + gimp_register_magic_load_handler ("file_gz_load", + "xcf.gz,gz,xcfgz", + "", + "0,string,\037\213"); + gimp_register_save_handler ("file_gz_save", + "xcf.gz,gz,xcfgz", + ""); } - static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; run_mode = param[0].data.d_int32; INIT_I18N(); *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_gz_load") == 0) { image_ID = load_image (param[1].data.d_string, - param[0].data.d_int32); - if (image_ID != -1) + param[0].data.d_int32, + &status); + + if (image_ID != -1 && + status == STATUS_SUCCESS) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } } else if (strcmp (name, "file_gz_save") == 0) { @@ -234,7 +237,7 @@ run (char *name, /* Make sure all the arguments are there! */ if (nparams != 4) status = STATUS_CALLING_ERROR; - + break; case RUN_WITH_LAST_VALS: break; @@ -242,70 +245,76 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - param[1].data.d_int32, - param[2].data.d_int32, - param[0].data.d_int32 )) + if (status == STATUS_SUCCESS) { - values[0].data.d_status = STATUS_SUCCESS; - } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = save_image (param[3].data.d_string, + param[1].data.d_int32, + param[2].data.d_int32, + param[0].data.d_int32); + } } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } #ifdef __EMX__ -static int spawn_gzip(char *filename, char* tmpname, char *parms, int *pid) +static gint +spawn_gzip (gchar *filename, + gchar *tmpname, + gchar *parms, + gint *pid) { FILE *f; - int tfd; + gint tfd; - if (!(f = fopen(filename,"w"))){ - g_message("gz: fopen failed: %s\n", g_strerror(errno)); - return -1; - } + if (!(f = fopen (filename,"w"))) + { + g_message ("gz: fopen failed: %s\n", g_strerror (errno)); + return -1; + } /* save fileno(stdout) */ - tfd = dup(fileno(stdout)); + tfd = dup (fileno (stdout)); /* make stdout for this process be the output file */ - if (dup2(fileno(f),fileno(stdout)) == -1) + if (dup2 (fileno (f), fileno (stdout)) == -1) { - g_message ("gz: dup2 failed: %s\n", g_strerror(errno)); - close(tfd); + g_message ("gz: dup2 failed: %s\n", g_strerror (errno)); + close (tfd); return -1; } - fcntl(tfd, F_SETFD, FD_CLOEXEC); + fcntl (tfd, F_SETFD, FD_CLOEXEC); *pid = spawnlp (P_NOWAIT, "gzip", "gzip", parms, tmpname, NULL); - fclose(f); + fclose (f); /* restore fileno(stdout) */ - dup2(tfd,fileno(stdout)); - close(tfd); + dup2 (tfd, fileno (stdout)); + close (tfd); if (*pid == -1) { - g_message ("gz: spawn failed: %s\n", g_strerror(errno)); + g_message ("gz: spawn failed: %s\n", g_strerror (errno)); return -1; } - return 0; + return 0; } #endif -static gint -save_image (char *filename, +static GStatusType +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID, gint32 run_mode) { GParam* params; gint retvals; - char* ext; - char* tmpname; + gchar *ext; + gchar *tmpname; #ifndef G_OS_WIN32 - FILE* f; - int pid; - int status; + FILE *f; + gint pid; + gint status; #else SECURITY_ATTRIBUTES secattr; HANDLE f; @@ -314,11 +323,11 @@ save_image (char *filename, gchar *cmdline; #endif - ext = find_extension(filename); - if (0 == *ext) { - g_message( _("gz: no sensible extension, saving as gzip'd xcf\n")); - ext = ".xcf"; - } + if (NULL == (ext = find_extension (filename))) + { + g_message (_("gz: no sensible extension, saving as gzip'd xcf\n")); + ext = ".xcf"; + } /* get a temp name with the right extension and save into it. */ @@ -326,6 +335,7 @@ save_image (char *filename, &retvals, PARAM_STRING, ext + 1, PARAM_END); + tmpname = g_strdup (params[1].data.d_string); gimp_destroy_params (params, retvals); @@ -338,11 +348,13 @@ save_image (char *filename, PARAM_STRING, tmpname, PARAM_END); - if (params[0].data.d_status == FALSE || !valid_file(tmpname)) { - unlink (tmpname); - g_free (tmpname); - return -1; - } + if (!valid_file (tmpname) || + params[0].data.d_status != STATUS_SUCCESS) + { + unlink (tmpname); + g_free (tmpname); + return params[0].data.d_status; + } /* if (! file_save(image_ID, tmpname, tmpname)) { */ /* unlink (tmpname); */ @@ -350,48 +362,47 @@ save_image (char *filename, /* } */ #ifndef G_OS_WIN32 - #ifndef __EMX__ - /* fork off a gzip process */ - if ((pid = fork()) < 0) + if ((pid = fork ()) < 0) { - g_message ("gz: fork failed: %s\n", g_strerror(errno)); + g_message ("gz: fork failed: %s\n", g_strerror (errno)); g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } else if (pid == 0) { - if (!(f = fopen(filename,"w"))) { - g_message("gz: fopen failed: %s\n", g_strerror(errno)); - g_free (tmpname); - _exit(127); - } + if (!(f = fopen (filename, "w"))) + { + g_message ("gz: fopen failed: %s\n", g_strerror (errno)); + g_free (tmpname); + _exit (127); + } /* make stdout for this process be the output file */ - if (-1 == dup2(fileno(f),fileno(stdout))) - g_message ("gz: dup2 failed: %s\n", g_strerror(errno)); + if (-1 == dup2 (fileno (f), fileno (stdout))) + g_message ("gz: dup2 failed: %s\n", g_strerror (errno)); /* and gzip into it */ execlp ("gzip", "gzip", "-cf", tmpname, NULL); - g_message ("gz: exec failed: gzip: %s\n", g_strerror(errno)); + g_message ("gz: exec failed: gzip: %s\n", g_strerror (errno)); g_free (tmpname); _exit(127); } else -#else /* __EMX__ */ - if (spawn_gzip(filename, tmpname, "-cf", &pid) == -1) +#else /* __EMX__ */ + if (spawn_gzip (filename, tmpname, "-cf", &pid) == -1) { g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } #endif { waitpid (pid, &status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (status) || + WEXITSTATUS (status) != 0) { g_message ("gz: gzip exited abnormally on file %s\n", tmpname); g_free (tmpname); @@ -402,7 +413,7 @@ save_image (char *filename, secattr.nLength = sizeof (SECURITY_ATTRIBUTES); secattr.lpSecurityDescriptor = NULL; secattr.bInheritHandle = TRUE; - + if ((f = CreateFile (filename, GENERIC_WRITE, FILE_SHARE_READ, &secattr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) @@ -438,25 +449,26 @@ save_image (char *filename, CloseHandle (f); CloseHandle (processinfo.hThread); WaitForSingleObject (processinfo.hProcess, INFINITE); - #endif /* G_OS_WIN32 */ unlink (tmpname); g_free (tmpname); - return TRUE; + return STATUS_SUCCESS; } static gint32 -load_image (char *filename, gint32 run_mode) +load_image (gchar *filename, + gint32 run_mode, + GStatusType *status /* return value */) { GParam* params; gint retvals; - char* ext; - char* tmpname; + gchar *ext; + gchar *tmpname; #ifndef G_OS_WIN32 - int pid; - int status; + gint pid; + gint process_status; #else SECURITY_ATTRIBUTES secattr; HANDLE f; @@ -465,10 +477,10 @@ load_image (char *filename, gint32 run_mode) gchar *cmdline; #endif - ext = find_extension(filename); - if (0 == *ext) { - g_message( _("gz: no sensible extension, attempting to load with file magic\n")); - } + if (NULL == (ext = find_extension (filename))) + { + g_message (_("gz: no sensible extension, attempting to load with file magic\n")); + } /* find a temp name */ params = gimp_run_procedure ("gimp_temp_name", @@ -480,54 +492,56 @@ load_image (char *filename, gint32 run_mode) gimp_destroy_params (params, retvals); #ifndef G_OS_WIN32 - #ifndef __EMX__ - /* fork off a g(un)zip and wait for it */ - if ((pid = fork()) < 0) + if ((pid = fork ()) < 0) { - g_message ("gz: fork failed: %s\n", g_strerror(errno)); + g_message ("gz: fork failed: %s\n", g_strerror (errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } else if (pid == 0) /* child process */ { - FILE* f; - if (!(f = fopen(tmpname,"w"))){ - g_message("gz: fopen failed: %s\n", g_strerror(errno)); - g_free (tmpname); - _exit(127); - } + FILE *f; + if (!(f = fopen (tmpname, "w"))) + { + g_message ("gz: fopen failed: %s\n", g_strerror (errno)); + g_free (tmpname); + _exit(127); + } /* make stdout for this child process be the temp file */ - if (-1 == dup2(fileno(f),fileno(stdout))) + if (-1 == dup2 (fileno (f), fileno (stdout))) { g_free (tmpname); - g_message ("gz: dup2 failed: %s\n", g_strerror(errno)); + g_message ("gz: dup2 failed: %s\n", g_strerror (errno)); } - + /* and unzip into it */ execlp ("gzip", "gzip", "-cfd", filename, NULL); - g_message ("gz: exec failed: gunzip: %s\n", g_strerror(errno)); + g_message ("gz: exec failed: gunzip: %s\n", g_strerror (errno)); g_free (tmpname); _exit(127); } else /* parent process */ #else /* __EMX__ */ - if (spawn_gzip(tmpname, filename, "-cfd", &pid) == -1) + if (spawn_gzip (tmpname, filename, "-cfd", &pid) == -1) { g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } #endif { - waitpid (pid, &status, 0); + waitpid (pid, &process_status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (process_status) || + WEXITSTATUS (process_status) != 0) { g_message ("gz: gzip exited abnormally on file %s\n", filename); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } } @@ -535,7 +549,7 @@ load_image (char *filename, gint32 run_mode) secattr.nLength = sizeof (SECURITY_ATTRIBUTES); secattr.lpSecurityDescriptor = NULL; secattr.bInheritHandle = TRUE; - + if ((f = CreateFile (tmpname, GENERIC_WRITE, FILE_SHARE_READ, &secattr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) @@ -571,7 +585,6 @@ load_image (char *filename, gint32 run_mode) CloseHandle (f); CloseHandle (processinfo.hThread); WaitForSingleObject (processinfo.hProcess, INFINITE); - #endif /* G_OS_WIN32 */ /* now that we un-gziped it, load the temp file */ @@ -585,8 +598,12 @@ load_image (char *filename, gint32 run_mode) unlink (tmpname); g_free (tmpname); - if (params[0].data.d_status == FALSE) - return -1; + *status = params[0].data.d_status; + + if (params[0].data.d_status != STATUS_SUCCESS) + { + return -1; + } else { gimp_image_set_filename (params[1].data.d_int32, filename); @@ -594,46 +611,52 @@ load_image (char *filename, gint32 run_mode) } } - -static int valid_file (char* filename) +static gboolean +valid_file (gchar *filename) { - int stat_res; + gint stat_res; struct stat buf; stat_res = stat(filename, &buf); if ((0 == stat_res) && (buf.st_size > 0)) - return 1; + return TRUE; else - return 0; + return FALSE; } -static char* find_extension (char* filename) +static gchar * +find_extension (gchar *filename) { - char* filename_copy; - char* ext; + gchar *filename_copy; + gchar *ext; /* we never free this copy - aren't we evil! */ - filename_copy = malloc(strlen(filename)+1); - strcpy(filename_copy, filename); + filename_copy = g_malloc (strlen (filename) + 1); + strcpy (filename_copy, filename); /* find the extension, boy! */ ext = strrchr (filename_copy, '.'); - while (1) { - if (!ext || ext[1] == 0 || strchr(ext, '/')) - { - return ""; - } - if (0 == strcmp(ext, ".xcfgz")) { - return ".xcf"; /* we've found it */ + while (1) + { + if (!ext || ext[1] == 0 || strchr (ext, '/')) + { + return NULL; + } + if (0 == strcmp (ext, ".xcfgz")) + { + return ".xcf"; /* we've found it */ + } + if (0 != strcmp (ext,".gz")) + { + return ext; + } + else + { + /* we found ".gz" so strip it, loop back, and look again */ + *ext = 0; + ext = strrchr (filename_copy, '.'); + } } - if (0 != strcmp(ext,".gz")) { - return ext; - } else { - /* we found ".gz" so strip it, loop back, and look again */ - *ext = 0; - ext = strrchr (filename_copy, '.'); - } - } } diff --git a/plug-ins/common/csource.c b/plug-ins/common/csource.c index 595802c06c..6641bc98de 100644 --- a/plug-ins/common/csource.c +++ b/plug-ins/common/csource.c @@ -18,15 +18,23 @@ * This plugin is heavily based on the header plugin by Spencer Kimball and * Peter Mattis. */ + +#include "config.h" + #include #include #include -#include "config.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" + #include + +#include +#include + #include "libgimp/stdplugins-intl.h" + +#define DEFAULT_COMMENT "Created with The GIMP" + typedef struct { gchar *file_name; @@ -43,25 +51,39 @@ typedef struct /* --- prototypes --- */ static void query (void); -static void run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -static gint save_image (Config *config, - gint32 image_ID, - gint32 drawable_ID); -static gboolean run_save_dialog (Config *config); +static gint save_image (Config *config, + gint32 image_ID, + gint32 drawable_ID); +static void init_gtk (void); +static gboolean run_save_dialog (Config *config); /* --- variables --- */ GPlugInInfo PLUG_IN_INFO = { - NULL, /* init */ - NULL, /* quit */ - query, /* query */ - run, /* run */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +Config config = +{ + NULL, /* file_name */ + "gimp_image", /* prefixed_name */ + NULL, /* comment */ + FALSE, /* use_comment */ + TRUE, /* glib_types */ + FALSE, /* alpha */ + FALSE, /* use_macros */ + FALSE, /* use_rle */ + 100.0, /* opacity */ }; /* --- implement main (), provided by libgimp --- */ @@ -79,7 +101,7 @@ query (void) { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -95,7 +117,9 @@ query (void) nsave_args, 0, save_args, NULL); - gimp_register_save_handler ("file_csource_save", "c", ""); + gimp_register_save_handler ("file_csource_save", + "c", + ""); } static void @@ -106,36 +130,29 @@ run (gchar *name, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (run_mode == RUN_INTERACTIVE && strcmp (name, "file_csource_save") == 0) { - gint32 image_ID = param[1].data.d_int32; + gint32 image_ID = param[1].data.d_int32; gint32 drawable_ID = param[2].data.d_int32; Parasite *parasite; gchar *x; GDrawableType drawable_type = gimp_drawable_type (drawable_ID); - Config config = - { - NULL, /* file_name */ - "gimp_image", /* prefixed_name */ - NULL, /* comment */ - FALSE, /* use_comment */ - TRUE, /* glib_types */ - FALSE, /* alpha */ - FALSE, /* use_macros */ - FALSE, /* use_rle */ - 100.0, /* opacity */ - }; + + gimp_get_data ("file_csource_save", &config); + config.prefixed_name = "gimp_image"; + config.comment = NULL; config.file_name = param[3].data.d_string; config.alpha = (drawable_type == RGBA_IMAGE || @@ -151,7 +168,20 @@ run (gchar *name, parasite_free (parasite); } x = config.comment; - + + if (!config.comment) + config.comment = g_strdup (DEFAULT_COMMENT); + + init_gtk (); + export = gimp_export_image (&image_ID, &drawable_ID, "C Source", + (CAN_HANDLE_RGB | + CAN_HANDLE_ALPHA)); + if (export == EXPORT_CANCEL) + { + values[0].data.d_status = STATUS_CANCEL; + return; + } + if (run_save_dialog (&config)) { if (x != config.comment && @@ -170,26 +200,29 @@ run (gchar *name, } } - *nreturn_vals = 1; - - export = gimp_export_image (&image_ID, &drawable_ID, "C Source", - (CAN_HANDLE_RGB | CAN_HANDLE_ALPHA)); - - if (export == EXPORT_CANCEL) + if (! save_image (&config, image_ID, drawable_ID)) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - return; + status = STATUS_EXECUTION_ERROR; } - - if (save_image (&config, image_ID, drawable_ID)) - values[0].data.d_status = STATUS_SUCCESS; else - values[0].data.d_status = STATUS_EXECUTION_ERROR; - - if (export == EXPORT_EXPORT) - gimp_image_delete (image_ID); + { + gimp_set_data ("file_csource_save", &config, sizeof (config)); + } } + else + { + status = STATUS_CANCEL; + } + + if (export == EXPORT_EXPORT) + gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gboolean @@ -204,7 +237,7 @@ diff2_rgba (guint8 *ip) return ip[0] != ip[4] || ip[1] != ip[5] || ip[2] != ip[6] || ip[3] != ip[7]; } -static guint8* +static guint8 * rl_encode_rgbx (guint8 *bp, guint8 *ip, guint8 *limit, @@ -347,7 +380,7 @@ save_image (Config *config, gint32 image_ID, gint32 drawable_ID) { - GDrawable *drawable = gimp_drawable_get (drawable_ID); + GDrawable *drawable = gimp_drawable_get (drawable_ID); GDrawableType drawable_type = gimp_drawable_type (drawable_ID); GPixelRgn pixel_rgn; gchar *s_uint_8, *s_uint_32, *s_uint, *s_char, *s_null; @@ -355,12 +388,13 @@ save_image (Config *config, guint c; gchar *macro_name; guint8 *img_buffer, *img_buffer_end; - + fp = fopen (config->file_name, "w"); if (!fp) return FALSE; - - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, FALSE, FALSE); + + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, drawable->width, drawable->height, FALSE, FALSE); if (1) { @@ -404,7 +438,8 @@ save_image (Config *config, img_buffer = data + pad; if (config->use_rle) { - img_buffer_end = rl_encode_rgbx (data, img_buffer, img_buffer + n_bytes, bpp); + img_buffer_end = rl_encode_rgbx (data, img_buffer, + img_buffer + n_bytes, bpp); img_buffer = data; } else @@ -587,29 +622,26 @@ save_image (Config *config, return TRUE; } +static GtkWidget *prefixed_name; +static GtkWidget *centry; +static gboolean do_save = FALSE; + static void -cb_set_true (gboolean *bool_p) +save_dialog_ok_callback (GtkWidget *widget, + gpointer data) { - *bool_p = TRUE; + do_save = TRUE; + + config.prefixed_name = + g_strdup (gtk_entry_get_text (GTK_ENTRY (prefixed_name))); + config.comment = g_strdup (gtk_entry_get_text (GTK_ENTRY (centry))); + + gtk_widget_destroy (GTK_WIDGET (data)); } -static gboolean -run_save_dialog (Config *config) +static void +init_gtk (void) { - GtkWidget *dialog; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *button; - GtkWidget *prefixed_name; - GtkWidget *centry; - GtkWidget *alpha; - GtkWidget *use_macros; - GtkWidget *use_rle; - GtkWidget *gtype; - GtkWidget *use_comment; - GtkWidget *any; - GtkObject *opacity; - gboolean do_save = FALSE; gchar **argv; gint argc; @@ -619,14 +651,24 @@ run_save_dialog (Config *config) gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); +} + +static gboolean +run_save_dialog (Config *config) +{ + GtkWidget *dialog; + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *toggle; + GtkObject *adj; - dialog = gimp_dialog_new ( _("Save as C-Source"), "csource", + dialog = gimp_dialog_new (_("Save as C-Source"), "csource", gimp_plugin_help_func, "filters/csource.html", GTK_WIN_POS_MOUSE, FALSE, TRUE, FALSE, - _("OK"), cb_set_true, - NULL, &do_save, &button, TRUE, FALSE, + _("OK"), save_dialog_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, _("Cancel"), gtk_widget_destroy, NULL, 1, NULL, FALSE, TRUE, @@ -636,172 +678,111 @@ run_save_dialog (Config *config) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), - GTK_OBJECT (dialog)); vbox = gtk_vbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); gtk_widget_show (vbox); + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 4); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); + gtk_widget_show (table); + /* Prefixed Name */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - gtk_widget_new (GTK_TYPE_LABEL, - "label", _("Prefixed Name: "), - "xalign", 0.0, - "visible", TRUE, - "parent", hbox, - NULL); - prefixed_name = gtk_widget_new (GTK_TYPE_ENTRY, - "visible", TRUE, - "parent", hbox, - NULL); + prefixed_name = gtk_entry_new (); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Prefixed Name:"), 1.0, 0.5, + prefixed_name, FALSE); gtk_entry_set_text (GTK_ENTRY (prefixed_name), config->prefixed_name ? config->prefixed_name : ""); - gtk_widget_ref (prefixed_name); /* Comment Entry */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - gtk_widget_new (GTK_TYPE_LABEL, - "label", _("Comment: "), - "xalign", 0.0, - "visible", TRUE, - "parent", hbox, - NULL); - centry = gtk_widget_new (GTK_TYPE_ENTRY, - "visible", TRUE, - "parent", hbox, - NULL); + centry = gtk_entry_new (); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Comment:"), 1.0, 0.5, + centry, FALSE); gtk_entry_set_text (GTK_ENTRY (centry), config->comment ? config->comment : ""); - gtk_widget_ref (centry); /* Use Comment */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - use_comment = gtk_widget_new (GTK_TYPE_CHECK_BUTTON, - "label", _("Save comment to file?"), - "visible", TRUE, - "parent", hbox, - NULL); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (use_comment), config->use_comment); - gtk_widget_ref (use_comment); + toggle = gtk_check_button_new_with_label (_("Save Comment to File")); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + config->use_comment); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &config->use_comment); + gtk_widget_show (toggle); /* GLib types */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - gtype = gtk_widget_new (GTK_TYPE_CHECK_BUTTON, - "label", _("Use GLib types (guint8*)"), - "visible", TRUE, - "parent", hbox, - NULL); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtype), config->glib_types); - gtk_widget_ref (gtype); + toggle = gtk_check_button_new_with_label (_("Use GLib Types (guint8*)")); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + config->glib_types); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &config->glib_types); + gtk_widget_show (toggle); /* Use Macros */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - use_macros = gtk_widget_new (GTK_TYPE_CHECK_BUTTON, - "label", _("Use macros instead of struct"), - "visible", TRUE, - "parent", hbox, - NULL); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (use_macros), config->use_macros); - gtk_widget_ref (use_macros); + toggle = gtk_check_button_new_with_label (_("Use Macros instead of Struct")); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + config->use_macros); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &config->use_macros); + gtk_widget_show (toggle); /* Use RLE */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - use_rle = gtk_widget_new (GTK_TYPE_CHECK_BUTTON, - "label", _("Use 1 Byte Run-Length-Encoding"), - "visible", TRUE, - "parent", hbox, - NULL); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (use_rle), config->use_rle); - gtk_widget_ref (use_rle); + toggle = gtk_check_button_new_with_label (_("Use 1 Byte Run-Length-Encoding")); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + config->use_rle); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &config->use_rle); + gtk_widget_show (toggle); /* Alpha */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - alpha = gtk_widget_new (GTK_TYPE_CHECK_BUTTON, - "label", _("Save Alpha channel (RGBA/RGB)"), - "visible", TRUE, - "parent", hbox, - NULL); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alpha), config->alpha); - gtk_widget_ref (alpha); - + toggle = gtk_check_button_new_with_label (_("Save Alpha Channel (RGBA/RGB)")); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + config->alpha); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &config->alpha); + gtk_widget_show (toggle); + /* Max Alpha Value */ - hbox = gtk_widget_new (GTK_TYPE_HBOX, - "visible", TRUE, - "parent", vbox, - NULL); - gtk_widget_new (GTK_TYPE_LABEL, - "label", _("Opacity: "), - "xalign", 0.0, - "visible", TRUE, - "parent", hbox, - NULL); - opacity = gtk_adjustment_new (config->opacity, - 0, - 100, - 0.1, - 5.0, - 0); - any = gtk_spin_button_new (GTK_ADJUSTMENT (opacity), 0, 1); - gtk_widget_set (any, - "visible", TRUE, - "parent", hbox, - NULL); - gtk_object_ref (opacity); - + table = gtk_table_new (1, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); + gtk_widget_show (table); + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, + _("Opacity:"), 100, 0, + config->opacity, 0, 100, 1, 10, 1, + FALSE, FALSE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &config->opacity); + gtk_widget_show (dialog); gtk_main (); + gdk_flush (); - config->prefixed_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (prefixed_name))); - config->use_macros = GTK_TOGGLE_BUTTON (use_macros)->active; - config->use_rle = GTK_TOGGLE_BUTTON (use_rle)->active; - config->alpha = GTK_TOGGLE_BUTTON (alpha)->active; - config->glib_types = GTK_TOGGLE_BUTTON (gtype)->active; - config->comment = g_strdup (gtk_entry_get_text (GTK_ENTRY (centry))); - config->use_comment = GTK_TOGGLE_BUTTON (use_comment)->active; - config->opacity = GTK_ADJUSTMENT (opacity)->value; - - gtk_widget_unref (gtype); - gtk_widget_unref (centry); - gtk_widget_unref (alpha); - gtk_widget_unref (use_macros); - gtk_widget_unref (use_rle); - gtk_widget_unref (use_comment); - gtk_widget_unref (prefixed_name); - gtk_object_unref (opacity); - if (!config->prefixed_name || !config->prefixed_name[0]) config->prefixed_name = "tmp"; if (config->comment && !config->comment[0]) diff --git a/plug-ins/common/cubism.c b/plug-ins/common/cubism.c index d8aa4359cf..e02193f19f 100644 --- a/plug-ins/common/cubism.c +++ b/plug-ins/common/cubism.c @@ -28,13 +28,10 @@ #include #include +#include #include "libgimp/stdplugins-intl.h" -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - #define SCALE_WIDTH 125 #define BLACK 0 #define BG 1 @@ -745,7 +742,7 @@ fp_rand (gdouble val) { gdouble rand_val; - rand_val = (gdouble) rand () / (gdouble) (RAND_MAX - 1); + rand_val = (gdouble) rand () / (gdouble) (G_MAXRAND - 1); return rand_val * val; } diff --git a/plug-ins/common/curve_bend.c b/plug-ins/common/curve_bend.c index dc80fd780b..af7fb894f3 100644 --- a/plug-ins/common/curve_bend.c +++ b/plug-ins/common/curve_bend.c @@ -451,7 +451,7 @@ gint p_gimp_rotate(gint32 image_id, gint32 drawable_id, gint32 interpolation, gd #endif l_rc = -1; - l_angle_rad = (angle_deg * 3.14159) / 180.0; + l_angle_rad = (angle_deg * G_PI) / 180.0; l_nparams = p_pdb_procedure_available(l_rotate_proc); if (l_nparams >= 0) diff --git a/plug-ins/common/diffraction.c b/plug-ins/common/diffraction.c index c3ce3ccc13..4b8f82b47f 100644 --- a/plug-ins/common/diffraction.c +++ b/plug-ins/common/diffraction.c @@ -814,7 +814,9 @@ dialog_update_preview (void) dint.preview_row, 0, y, PREVIEW_WIDTH); gtk_progress_bar_update (GTK_PROGRESS_BAR (dint.progress), - (double) y / (PREVIEW_HEIGHT - 1)); + (double) y / (double) (PREVIEW_HEIGHT - 1)); + gtk_widget_draw (dint.progress, NULL); + gdk_flush (); py += dy; } diff --git a/plug-ins/common/displace.c b/plug-ins/common/displace.c index c719ddb3ec..d4fb305b83 100644 --- a/plug-ins/common/displace.c +++ b/plug-ins/common/displace.c @@ -75,11 +75,6 @@ typedef struct typedef struct { - GtkWidget *amount_x; - GtkWidget *amount_y; - GtkWidget *menu_x; - GtkWidget *menu_y; - gint run; } DisplaceInterface; @@ -122,14 +117,6 @@ static void displace_map_y_callback (gint32 id, gpointer data); static void displace_ok_callback (GtkWidget *widget, gpointer data); -static void displace_toggle_update (GtkWidget *widget, - gpointer data); -static void displace_x_toggle_update (GtkWidget *widget, - gpointer data); -static void displace_y_toggle_update (GtkWidget *widget, - gpointer data); -static void displace_entry_callback (GtkWidget *widget, - gpointer data); static gdouble displace_map_give_value (guchar* ptr, gint alpha, gint bytes); @@ -137,10 +124,10 @@ static gdouble displace_map_give_value (guchar* ptr, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static DisplaceVals dvals = @@ -156,10 +143,6 @@ static DisplaceVals dvals = static DisplaceInterface dint = { - NULL, /* amount_x */ - NULL, /* amount_y */ - NULL, /* menu_x */ - NULL, /* menu_y */ FALSE /* run */ }; @@ -219,9 +202,8 @@ run (gchar *name, drawable = gimp_drawable_get (param[2].data.d_drawable); *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; + *return_vals = values; + values[0].type = PARAM_STATUS; values[0].data.d_status = status; switch (run_mode) @@ -240,16 +222,18 @@ run (gchar *name, INIT_I18N(); /* Make sure all the arguments are there! */ if (nparams != 10) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) { - dvals.amount_x = param[3].data.d_float; - dvals.amount_y = param[4].data.d_float; - dvals.do_x = param[5].data.d_int32; - dvals.do_y = param[6].data.d_int32; + status = STATUS_CALLING_ERROR; + } + else + { + dvals.amount_x = param[3].data.d_float; + dvals.amount_y = param[4].data.d_float; + dvals.do_x = param[5].data.d_int32; + dvals.do_y = param[6].data.d_int32; dvals.displace_map_x = param[7].data.d_int32; dvals.displace_map_y = param[8].data.d_int32; - dvals.displace_type = param[9].data.d_int32; + dvals.displace_type = param[9].data.d_int32; } break; @@ -294,18 +278,15 @@ displace_dialog (GDrawable *drawable) GtkWidget *toggle_hbox; GtkWidget *frame; GtkWidget *table; - GtkWidget *entry; + GtkWidget *spinbutton; + GtkObject *adj; GtkWidget *option_menu; GtkWidget *menu; + GtkWidget *sep; GSList *group = NULL; gchar **argv; - gchar buffer[32]; gint argc; - gint use_wrap = (dvals.displace_type == WRAP); - gint use_smear = (dvals.displace_type == SMEAR); - gint use_black = (dvals.displace_type == BLACK); - argc = 1; argv = g_new (gchar *, 1); argv[0] = g_strdup ("displace"); @@ -340,110 +321,126 @@ displace_dialog (GDrawable *drawable) gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (3, 3, FALSE); + table = gtk_table_new (4, 3, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 4); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - - /* on_x, on_y */ + /* X options */ toggle = gtk_check_button_new_with_label (_("X Displacement:")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) displace_x_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &dvals.do_x); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), dvals.do_x); gtk_widget_show (toggle); - toggle = gtk_check_button_new_with_label (_("Y Displacement:")); - gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 1, 2, + spinbutton = gimp_spin_button_new (&adj, dvals.amount_x, + (gint) drawable->width * -2, + drawable->width * 2, + 1, 10, 0, 1, 2); + gtk_table_attach (GTK_TABLE (table), spinbutton, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) displace_y_toggle_update, - &dvals.do_y); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), dvals.do_y); - gtk_widget_show (toggle); - - /* amount_x, amount_y */ - dint.amount_x = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%f", dvals.amount_x); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) displace_entry_callback, + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.amount_x); - - gtk_widget_set_sensitive (dint.amount_x, dvals.do_x); - gtk_widget_show (entry); - dint.amount_y = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%f", dvals.amount_y); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) displace_entry_callback, - &dvals.amount_y); - gtk_widget_set_sensitive (dint.amount_y, dvals.do_y); - gtk_widget_show (entry); + gtk_widget_set_sensitive (spinbutton, dvals.do_x); + gtk_object_set_data (GTK_OBJECT (toggle), "set_sensitive", spinbutton); + gtk_widget_show (spinbutton); - /* menu_x, menu_y */ - dint.menu_x = option_menu = gtk_option_menu_new (); + option_menu = gtk_option_menu_new (); gtk_table_attach (GTK_TABLE (table), option_menu, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); menu = gimp_drawable_menu_new (displace_map_constrain, displace_map_x_callback, drawable, dvals.displace_map_x); gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); - gtk_widget_set_sensitive (dint.menu_x, dvals.do_x); + + gtk_widget_set_sensitive (option_menu, dvals.do_x); + gtk_object_set_data (GTK_OBJECT (spinbutton), "set_sensitive", option_menu); gtk_widget_show (option_menu); - dint.menu_y = option_menu = gtk_option_menu_new (); + /* Y Options */ + toggle = gtk_check_button_new_with_label (_("Y Displacement:")); + gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 1, 2, + GTK_FILL, GTK_FILL, 0, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &dvals.do_y); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), dvals.do_y); + gtk_widget_show (toggle); + + spinbutton = gimp_spin_button_new (&adj, dvals.amount_y, + (gint) drawable->height * -2, + drawable->height * 2, + 1, 10, 0, 1, 2); + gtk_table_attach (GTK_TABLE (table), spinbutton, 1, 2, 1, 2, + GTK_FILL, GTK_FILL, 0, 0); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &dvals.amount_y); + + gtk_widget_set_sensitive (spinbutton, dvals.do_y); + gtk_object_set_data (GTK_OBJECT (toggle), "set_sensitive", spinbutton); + gtk_widget_show (spinbutton); + + option_menu = gtk_option_menu_new (); gtk_table_attach (GTK_TABLE (table), option_menu, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); menu = gimp_drawable_menu_new (displace_map_constrain, displace_map_y_callback, drawable, dvals.displace_map_y); gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); - gtk_widget_set_sensitive (dint.menu_y, dvals.do_y); + + gtk_widget_set_sensitive (option_menu, dvals.do_y); + gtk_object_set_data (GTK_OBJECT (spinbutton), "set_sensitive", option_menu); gtk_widget_show (option_menu); /* Displacement Type */ + sep = gtk_hseparator_new (); + gtk_table_attach_defaults (GTK_TABLE (table), sep, 0, 3, 2, 3); + gtk_widget_show (sep); + toggle_hbox = gtk_hbox_new (FALSE, 6); - gtk_container_border_width (GTK_CONTAINER (toggle_hbox), 5); - gtk_table_attach (GTK_TABLE (table), toggle_hbox, 0, 3, 2, 3, + gtk_table_attach (GTK_TABLE (table), toggle_hbox, 0, 3, 3, 4, GTK_FILL, GTK_FILL, 0, 0); - label = gtk_label_new ( _("On Edges: ")); + label = gtk_label_new ( _("On Edges:")); gtk_box_pack_start (GTK_BOX (toggle_hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); toggle = gtk_radio_button_new_with_label (group, _("Wrap")); group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) WRAP); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) displace_toggle_update, - &use_wrap); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_wrap); + GTK_SIGNAL_FUNC (gimp_radio_button_update), + &dvals.displace_type); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + dvals.displace_type == WRAP); gtk_widget_show (toggle); toggle = gtk_radio_button_new_with_label (group, _("Smear")); group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) SMEAR); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) displace_toggle_update, - &use_smear); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_smear); + GTK_SIGNAL_FUNC (gimp_radio_button_update), + &dvals.displace_type); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + dvals.displace_type == SMEAR); gtk_widget_show (toggle); toggle = gtk_radio_button_new_with_label (group, _("Black")); group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) BLACK); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) displace_toggle_update, - &use_black); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_black); + GTK_SIGNAL_FUNC (gimp_radio_button_update), + &dvals.displace_type); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + dvals.displace_type == BLACK); gtk_widget_show (toggle); gtk_widget_show (toggle_hbox); @@ -454,14 +451,6 @@ displace_dialog (GDrawable *drawable) gtk_main (); gdk_flush (); - /* determine displace type */ - if (use_wrap) - dvals.displace_type = WRAP; - else if (use_smear) - dvals.displace_type = SMEAR; - else if (use_black) - dvals.displace_type = BLACK; - return dint.run; } @@ -530,7 +519,8 @@ displace (GDrawable *drawable) if (dvals.displace_map_x != -1 && dvals.do_x) { map_x = gimp_drawable_get (dvals.displace_map_x); - gimp_pixel_rgn_init (&map_x_rgn, map_x, x1, y1, (x2 - x1), (y2 - y1), FALSE, FALSE); + gimp_pixel_rgn_init (&map_x_rgn, map_x, + x1, y1, (x2 - x1), (y2 - y1), FALSE, FALSE); if (gimp_drawable_has_alpha(map_x->id)) xm_alpha = 1; xm_bytes = gimp_drawable_bpp(map_x->id); @@ -541,7 +531,8 @@ displace (GDrawable *drawable) if (dvals.displace_map_y != -1 && dvals.do_y) { map_y = gimp_drawable_get (dvals.displace_map_y); - gimp_pixel_rgn_init (&map_y_rgn, map_y, x1, y1, (x2 - x1), (y2 - y1), FALSE, FALSE); + gimp_pixel_rgn_init (&map_y_rgn, map_y, + x1, y1, (x2 - x1), (y2 - y1), FALSE, FALSE); if (gimp_drawable_has_alpha(map_y->id)) ym_alpha = 1; ym_bytes = gimp_drawable_bpp(map_y->id); @@ -549,7 +540,8 @@ displace (GDrawable *drawable) else map_y = NULL; - gimp_pixel_rgn_init (&dest_rgn, drawable, x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE); + gimp_pixel_rgn_init (&dest_rgn, drawable, + x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE); /* Register the pixel regions */ if (dvals.do_x && dvals.do_y) @@ -683,19 +675,19 @@ displace_map_give_value (guchar *pt, static GTile * -displace_pixel (GDrawable * drawable, - GTile * tile, - gint width, - gint height, - gint x1, - gint y1, - gint x2, - gint y2, - gint x, - gint y, - gint * row, - gint * col, - guchar * pixel) +displace_pixel (GDrawable *drawable, + GTile *tile, + gint width, + gint height, + gint x1, + gint y1, + gint x2, + gint y2, + gint x, + gint y, + gint *row, + gint *col, + guchar *pixel) { static guchar empty_pixel[4] = {0, 0, 0, 0}; guchar *data; @@ -776,9 +768,9 @@ bilinear (gdouble x, /* Displace interface functions */ static gint -displace_map_constrain (gint32 image_id, - gint32 drawable_id, - gpointer data) +displace_map_constrain (gint32 image_id, + gint32 drawable_id, + gpointer data) { GDrawable *drawable; @@ -795,15 +787,15 @@ displace_map_constrain (gint32 image_id, } static void -displace_map_x_callback (gint32 id, - gpointer data) +displace_map_x_callback (gint32 id, + gpointer data) { dvals.displace_map_x = id; } static void -displace_map_y_callback (gint32 id, - gpointer data) +displace_map_y_callback (gint32 id, + gpointer data) { dvals.displace_map_y = id; } @@ -815,66 +807,3 @@ displace_ok_callback (GtkWidget *widget, dint.run = TRUE; gtk_widget_destroy (GTK_WIDGET (data)); } - -static void -displace_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -static void -displace_x_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; - - if (dint.amount_x) - gtk_widget_set_sensitive (dint.amount_x, *toggle_val); - if (dint.menu_x) - gtk_widget_set_sensitive (dint.menu_x, *toggle_val); -} - -static void -displace_y_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; - - if (dint.amount_y) - gtk_widget_set_sensitive (dint.amount_y, *toggle_val); - if (dint.menu_y) - gtk_widget_set_sensitive (dint.menu_y, *toggle_val); -} - -static void -displace_entry_callback (GtkWidget *widget, - gpointer data) -{ - double *text_val; - - text_val = (double *) data; - - *text_val = atof (gtk_entry_get_text (GTK_ENTRY (widget))); -} diff --git a/plug-ins/common/emboss.c b/plug-ins/common/emboss.c index aeb1a59536..08fecdbc53 100644 --- a/plug-ins/common/emboss.c +++ b/plug-ins/common/emboss.c @@ -39,12 +39,9 @@ #include #include -#include #include "libgimp/stdplugins-intl.h" -static mw_preview_t emboss_do_preview; - enum { FUNCTION_BUMPMAP = 0, @@ -87,6 +84,27 @@ struct embossFilter gdouble bg; } Filter; +/* preview stuff -- to be removed as soon as we have a real libgimp preview */ + +struct mwPreview +{ + gint width; + gint height; + gint bpp; + gdouble scale; + guchar *bits; +}; + +#define PREVIEW_SIZE 100 + +static gint do_preview = TRUE; + +static GtkWidget * mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp); +static struct mwPreview * mw_preview_build (GDrawable *drw); + + + static void query (void); static void run (gchar *name, gint nparam, @@ -94,8 +112,10 @@ static void run (gchar *name, gint *nretvals, GParam **retvals); -static gint pluginCore (struct piArgs *argp); -static gint pluginCoreIA (struct piArgs *argp); +static gint pluginCore (struct piArgs *argp); +static gint pluginCoreIA (struct piArgs *argp); + +static void emboss_do_preview (GtkWidget *preview); static inline void EmbossInit (gdouble azimuth, gdouble elevation, @@ -190,7 +210,7 @@ run (gchar *name, args.img = param[1].data.d_image; args.drw = param[2].data.d_drawable; drw = gimp_drawable_get (args.drw); - thePreview = mw_preview_build(drw); + thePreview = mw_preview_build (drw); if (pluginCoreIA (&args) == -1) { @@ -223,7 +243,7 @@ run (gchar *name, rvals[0].data.d_status = STATUS_EXECUTION_ERROR; break; } - break; + break; case RUN_WITH_LAST_VALS: INIT_I18N(); @@ -533,7 +553,7 @@ pluginCoreIA (struct piArgs *argp) gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); - preview = mw_preview_new (hbox, thePreview, &emboss_do_preview); + preview = mw_preview_new (hbox, thePreview); gtk_object_set_data (GTK_OBJECT (preview), "piArgs", argp); emboss_do_preview (preview); @@ -648,3 +668,121 @@ emboss_do_preview (GtkWidget *w) gdk_flush (); g_free (dst); } + +static void +mw_preview_toggle_callback (GtkWidget *widget, + gpointer data) +{ + gimp_toggle_button_update (widget, data); + + if (do_preview) + emboss_do_preview (NULL); +} + +static struct mwPreview * +mw_preview_build_virgin (GDrawable *drw) +{ + struct mwPreview *mwp; + + mwp = g_new (struct mwPreview, 1); + + if (drw->width > drw->height) + { + mwp->scale = (gdouble) drw->width / (gdouble) PREVIEW_SIZE; + mwp->width = PREVIEW_SIZE; + mwp->height = drw->height / mwp->scale; + } + else + { + mwp->scale = (gdouble) drw->height / (gdouble) PREVIEW_SIZE; + mwp->height = PREVIEW_SIZE; + mwp->width = drw->width / mwp->scale; + } + + mwp->bpp = 3; + mwp->bits = NULL; + + return mwp; +} + +static struct mwPreview * +mw_preview_build (GDrawable *drw) +{ + struct mwPreview *mwp; + gint x, y, b; + guchar *bc; + guchar *drwBits; + GPixelRgn pr; + + mwp = mw_preview_build_virgin (drw); + + gimp_pixel_rgn_init (&pr, drw, 0, 0, drw->width, drw->height, FALSE, FALSE); + drwBits = g_new (guchar, drw->width * drw->bpp); + + bc = mwp->bits = g_new (guchar, mwp->width * mwp->height * mwp->bpp); + for (y = 0; y < mwp->height; y++) + { + gimp_pixel_rgn_get_row (&pr, drwBits, 0, (int)(y*mwp->scale), drw->width); + + for (x = 0; x < mwp->width; x++) + { + for (b = 0; b < mwp->bpp; b++) + *bc++ = *(drwBits + + ((gint) (x * mwp->scale) * drw->bpp) + b % drw->bpp); + } + } + g_free (drwBits); + + return mwp; +} + +static GtkWidget * +mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp) +{ + GtkWidget *preview; + GtkWidget *frame; + GtkWidget *pframe; + GtkWidget *vbox; + GtkWidget *button; + guchar *color_cube; + + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + color_cube = gimp_color_cube (); + gtk_preview_set_color_cube (color_cube[0], color_cube[1], + color_cube[2], color_cube[3]); + + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); + + frame = gtk_frame_new (_("Preview")); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_start (GTK_BOX (parent), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME(pframe), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (vbox), pframe, FALSE, FALSE, 0); + gtk_widget_show (pframe); + + preview = gtk_preview_new (GTK_PREVIEW_COLOR); + gtk_preview_size (GTK_PREVIEW (preview), mwp->width, mwp->height); + gtk_container_add (GTK_CONTAINER (pframe), preview); + gtk_widget_show (preview); + + button = gtk_check_button_new_with_label (_("Do Preview")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), do_preview); + gtk_signal_connect (GTK_OBJECT (button), "toggled", + GTK_SIGNAL_FUNC (mw_preview_toggle_callback), + &do_preview); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + return preview; +} diff --git a/plug-ins/common/exchange.c b/plug-ins/common/exchange.c index fe879a89de..a218c20eb7 100644 --- a/plug-ins/common/exchange.c +++ b/plug-ins/common/exchange.c @@ -263,6 +263,8 @@ doDialog (void) GtkWidget *dialog; GtkWidget *mainbox; GtkWidget *frame; + GtkWidget *abox; + GtkWidget *pframe; GtkWidget *table; GtkWidget *colorbutton; GtkObject *adj; @@ -319,9 +321,19 @@ doDialog (void) gtk_box_pack_start (GTK_BOX (mainbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); + abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_add (GTK_CONTAINER (frame), abox); + gtk_widget_show (abox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (pframe), GTK_SHADOW_IN); + gtk_container_set_border_width (GTK_CONTAINER (pframe), 4); + gtk_container_add (GTK_CONTAINER (abox), pframe); + gtk_widget_show (pframe); + preview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (preview), prev_width, prev_height); - gtk_container_add (GTK_CONTAINER (frame), preview); + gtk_container_add (GTK_CONTAINER (pframe), preview); update_preview (); gtk_widget_show (preview); diff --git a/plug-ins/common/fractaltrace.c b/plug-ins/common/fractaltrace.c index a98426e3f2..a302b085e2 100644 --- a/plug-ins/common/fractaltrace.c +++ b/plug-ins/common/fractaltrace.c @@ -30,64 +30,57 @@ #include #include -#include #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include +#include +#include #include "libgimp/stdplugins-intl.h" -#ifndef PI_2 -#define PI_2 (3.14159265358979323*2.0) -#endif - /******************************************************************************/ -static void query (void); -static void run (char*, int, GParam*, int*, GParam**); -static void filter (GDrawable*); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -static void pixels_init (GDrawable*); +static void filter (GDrawable *drawable); + +static void pixels_init (GDrawable *drawable); static void pixels_free (void); -static int dialog_show (void); +static int dialog_show (void); static void dialog_preview_draw (void); /******************************************************************************/ -GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ query, /* query_proc */ - run /* run_proc */ + run /* run_proc */ }; MAIN() /******************************************************************************/ -typedef struct { - gint32 wrap; - gint32 transparent; - gint32 black; - gint32 white; -} outside_type_t; - -#define OUTSIDE_TYPE_WRAP 0 -#define OUTSIDE_TYPE_TRANSPARENT 1 -#define OUTSIDE_TYPE_BLACK 2 -#define OUTSIDE_TYPE_WHITE 3 - -static outside_type_t outside_type = { +enum +{ OUTSIDE_TYPE_WRAP, OUTSIDE_TYPE_TRANSPARENT, OUTSIDE_TYPE_BLACK, OUTSIDE_TYPE_WHITE }; -typedef struct { +typedef struct +{ gdouble x1; gdouble x2; gdouble y1; @@ -96,7 +89,8 @@ typedef struct { gint32 outside_type; } parameter_t; -static parameter_t parameters = { +static parameter_t parameters = +{ -1.0, +0.5, -1.0, @@ -110,7 +104,8 @@ static parameter_t parameters = { static void query (void) { - static GParamDef args[] = { + static GParamDef args[] = + { { PARAM_INT32, "run_mode", "interactive / non-interactive" }, { PARAM_IMAGE, "image", "input image (not used)" }, { PARAM_DRAWABLE, "drawable", "input drawable" }, @@ -122,33 +117,27 @@ query (void) { PARAM_INT32, "outside_type", "outside type" "(0=WRAP/1=TRANS/2=BLACK/3=WHITE)" }, }; - static int nargs = sizeof( args ) / sizeof( args[0] ); - - static GParamDef *rets = NULL; - static int nrets = 0; + static gint nargs = sizeof(args) / sizeof(args[0]); INIT_I18N(); - gimp_install_procedure( - PLUG_IN_NAME, - _("transform image with the Mandelbrot Fractal"), - _("transform image with the Mandelbrot Fractal"), - "Hirotsuna Mizuno ", - "Copyright (C) 1997 Hirotsuna Mizuno", - PLUG_IN_VERSION, - N_("/Filters/Map/Fractal Trace..."), - "RGB*, GRAY*", - PROC_PLUG_IN, - nargs, - nrets, - args, - rets - ); + gimp_install_procedure (PLUG_IN_NAME, + _("transform image with the Mandelbrot Fractal"), + _("transform image with the Mandelbrot Fractal"), + "Hirotsuna Mizuno ", + "Copyright (C) 1997 Hirotsuna Mizuno", + PLUG_IN_VERSION, + N_("/Filters/Map/Fractal Trace..."), + "RGB*, GRAY*", + PROC_PLUG_IN, + nargs, 0, + args, NULL); } /******************************************************************************/ -typedef struct { +typedef struct +{ gint x1; gint x2; gint y1; @@ -159,7 +148,8 @@ typedef struct { gdouble center_y; } selection_t; -typedef struct { +typedef struct +{ gint width; gint height; gint bpp; @@ -171,11 +161,12 @@ static image_t image; /******************************************************************************/ -static void run (char *name, - int argc, - GParam *args, - int *retc, - GParam **rets) +static void +run (gchar *name, + gint argc, + GParam *args, + gint *retc, + GParam **rets) { GDrawable *drawable; GRunModeType run_mode; @@ -185,63 +176,73 @@ static void run (char *name, run_mode = args[0].data.d_int32; status = STATUS_SUCCESS; - drawable = gimp_drawable_get( args[2].data.d_drawable ); - image.width = gimp_drawable_width( drawable->id ); - image.height = gimp_drawable_height( drawable->id ); - image.bpp = gimp_drawable_bpp( drawable->id ); - image.alpha = gimp_drawable_has_alpha( drawable->id ); - gimp_drawable_mask_bounds( drawable->id, &selection.x1, &selection.y1, - &selection.x2, &selection.y2 ); + drawable = gimp_drawable_get (args[2].data.d_drawable); + image.width = gimp_drawable_width( drawable->id); + image.height = gimp_drawable_height (drawable->id); + image.bpp = gimp_drawable_bpp (drawable->id); + image.alpha = gimp_drawable_has_alpha (drawable->id); + gimp_drawable_mask_bounds (drawable->id, &selection.x1, &selection.y1, + &selection.x2, &selection.y2); selection.width = selection.x2 - selection.y1; selection.height = selection.y2 - selection.y1; - selection.center_x = selection.x1 + (gdouble)selection.width / 2.0; - selection.center_y = selection.y1 + (gdouble)selection.height / 2.0; + selection.center_x = selection.x1 + (gdouble) selection.width / 2.0; + selection.center_y = selection.y1 + (gdouble) selection.height / 2.0; - pixels_init( drawable ); + pixels_init (drawable); - if( !gimp_drawable_is_rgb( drawable->id ) && - !gimp_drawable_is_gray( drawable->id ) ){ - status = STATUS_EXECUTION_ERROR; - } - - switch( run_mode ){ - case RUN_WITH_LAST_VALS: - INIT_I18N(); - gimp_get_data( PLUG_IN_NAME, ¶meters ); - break; - case RUN_INTERACTIVE: - INIT_I18N_UI(); - gimp_get_data( PLUG_IN_NAME, ¶meters ); - if( !dialog_show() ){ + if (!gimp_drawable_is_rgb(drawable->id) && + !gimp_drawable_is_gray(drawable->id)) + { status = STATUS_EXECUTION_ERROR; + } + + switch (run_mode) + { + case RUN_WITH_LAST_VALS: + INIT_I18N(); + gimp_get_data (PLUG_IN_NAME, ¶meters); + break; + + case RUN_INTERACTIVE: + INIT_I18N_UI(); + gimp_get_data (PLUG_IN_NAME, ¶meters); + if (!dialog_show ()) + { + status = STATUS_EXECUTION_ERROR; + break; + } + gimp_set_data (PLUG_IN_NAME, ¶meters, sizeof (parameter_t)); + break; + + case RUN_NONINTERACTIVE: + if (argc != 9) + { + status = STATUS_CALLING_ERROR; + } + else + { + parameters.x1 = args[3].data.d_float; + parameters.x2 = args[4].data.d_float; + parameters.y1 = args[5].data.d_float; + parameters.y2 = args[6].data.d_float; + parameters.depth = args[7].data.d_int32; + parameters.outside_type = args[8].data.d_int32; + } + INIT_I18N(); break; } - gimp_set_data( PLUG_IN_NAME, ¶meters, sizeof( parameter_t ) ); - break; - case RUN_NONINTERACTIVE: - if( argc != 9 ){ - status = STATUS_CALLING_ERROR; - } else { - parameters.x1 = args[3].data.d_float; - parameters.x2 = args[4].data.d_float; - parameters.y1 = args[5].data.d_float; - parameters.y2 = args[6].data.d_float; - parameters.depth = args[7].data.d_int32; - parameters.outside_type = args[8].data.d_int32; + + if (status == STATUS_SUCCESS) + { + gimp_tile_cache_ntiles(2 * (drawable->width / gimp_tile_width() + 1)); + filter (drawable); + if (run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush(); } - INIT_I18N(); - break; - } - if( status == STATUS_SUCCESS ){ - gimp_tile_cache_ntiles( 2 * ( drawable->width / gimp_tile_width() + 1 ) ); - filter( drawable ); - if( run_mode != RUN_NONINTERACTIVE ) gimp_displays_flush(); - } + gimp_drawable_detach (drawable); - gimp_drawable_detach( drawable ); - - pixels_free(); + pixels_free (); returns[0].type = PARAM_STATUS; returns[0].data.d_status = status; @@ -256,7 +257,8 @@ static guchar **dpixels; static GPixelRgn sPR; static GPixelRgn dPR; -typedef struct { +typedef struct +{ guchar r; guchar g; guchar b; @@ -264,32 +266,38 @@ typedef struct { } pixel_t; static void -pixels_init (GDrawable *drawable) +pixels_init (GDrawable *drawable) { gint y; - gimp_pixel_rgn_init( &sPR, drawable, - 0, 0, image.width, image.height, FALSE, FALSE ); - gimp_pixel_rgn_init( &dPR, drawable, - 0, 0, image.width, image.height, TRUE, TRUE ); - spixels = (guchar**)g_malloc( image.height * sizeof( guchar* ) ); - dpixels = (guchar**)g_malloc( image.height * sizeof( guchar* ) ); - for( y = 0; y < image.height; y++ ){ - spixels[y] = (guchar*)g_malloc( image.width * image.bpp * sizeof( guchar ) ); - dpixels[y] = (guchar*)g_malloc( image.width * image.bpp * sizeof( guchar ) ); - gimp_pixel_rgn_get_row( &sPR, spixels[y], 0, y, image.width ); - } + + gimp_pixel_rgn_init (&sPR, drawable, + 0, 0, image.width, image.height, FALSE, FALSE); + gimp_pixel_rgn_init (&dPR, drawable, + 0, 0, image.width, image.height, TRUE, TRUE); + + spixels = g_new (guchar *, image.height); + dpixels = g_new (guchar *, image.height); + + for (y = 0; y < image.height; y++) + { + spixels[y] = g_new (guchar, image.width * image.bpp); + dpixels[y] = g_new (guchar, image.width * image.bpp); + gimp_pixel_rgn_get_row (&sPR, spixels[y], 0, y, image.width); + } } static void pixels_free (void) { gint y; - for( y = 0; y < image.height; y++ ){ - g_free( spixels[y] ); - g_free( dpixels[y] ); - } - g_free( spixels ); - g_free( dpixels ); + + for (y = 0; y < image.height; y++) + { + g_free (spixels[y]); + g_free (dpixels[y]); + } + g_free (spixels); + g_free (dpixels); } static void @@ -297,35 +305,36 @@ pixels_get (gint x, gint y, pixel_t *pixel) { - if( x < 0 ) x = 0; else if( image.width <= x ) x = image.width - 1; - if( y < 0 ) y = 0; else if( image.height <= y ) y = image.height - 1; + if(x < 0) x = 0; else if (image.width <= x) x = image.width - 1; + if(y < 0) y = 0; else if (image.height <= y) y = image.height - 1; - switch( image.bpp ){ - case 1: /* GRAY */ - pixel->r = spixels[y][x*image.bpp]; - pixel->g = spixels[y][x*image.bpp]; - pixel->b = spixels[y][x*image.bpp]; - pixel->a = 255; - break; - case 2: /* GRAY+A */ - pixel->r = spixels[y][x*image.bpp]; - pixel->g = spixels[y][x*image.bpp]; - pixel->b = spixels[y][x*image.bpp]; - pixel->a = spixels[y][x*image.bpp+1]; - break; - case 3: /* RGB */ - pixel->r = spixels[y][x*image.bpp]; - pixel->g = spixels[y][x*image.bpp+1]; - pixel->b = spixels[y][x*image.bpp+2]; - pixel->a = 255; - break; - case 4: /* RGB+A */ - pixel->r = spixels[y][x*image.bpp]; - pixel->g = spixels[y][x*image.bpp+1]; - pixel->b = spixels[y][x*image.bpp+2]; - pixel->a = spixels[y][x*image.bpp+3]; - break; - } + switch (image.bpp) + { + case 1: /* GRAY */ + pixel->r = spixels[y][x*image.bpp]; + pixel->g = spixels[y][x*image.bpp]; + pixel->b = spixels[y][x*image.bpp]; + pixel->a = 255; + break; + case 2: /* GRAY+A */ + pixel->r = spixels[y][x*image.bpp]; + pixel->g = spixels[y][x*image.bpp]; + pixel->b = spixels[y][x*image.bpp]; + pixel->a = spixels[y][x*image.bpp+1]; + break; + case 3: /* RGB */ + pixel->r = spixels[y][x*image.bpp]; + pixel->g = spixels[y][x*image.bpp+1]; + pixel->b = spixels[y][x*image.bpp+2]; + pixel->a = 255; + break; + case 4: /* RGB+A */ + pixel->r = spixels[y][x*image.bpp]; + pixel->g = spixels[y][x*image.bpp+1]; + pixel->b = spixels[y][x*image.bpp+2]; + pixel->a = spixels[y][x*image.bpp+3]; + break; + } } static void @@ -338,31 +347,31 @@ pixels_get_biliner (gdouble x, gint x1, y1, x2, y2; gdouble dx, dy; - x1 = (gint)floor( x ); + x1 = (gint) floor (x); x2 = x1 + 1; - y1 = (gint)floor( y ); + y1 = (gint) floor (y); y2 = y1 + 1; - dx = x - (gdouble)x1; - dy = y - (gdouble)y1; - a = ( 1.0 - dx ) * ( 1.0 - dy ); - b = dx * ( 1.0 - dy ); - c = ( 1.0 - dx ) * dy; + dx = x - (gdouble) x1; + dy = y - (gdouble) y1; + a = (1.0 - dx) * (1.0 - dy); + b = dx * (1.0 - dy); + c = (1.0 - dx) * dy; d = dx * dy; - - pixels_get( x1, y1, &A ); - pixels_get( x2, y1, &B ); - pixels_get( x1, y2, &C ); - pixels_get( x2, y2, &D ); - pixel->r = (guchar)( a * (gdouble)A.r + b * (gdouble)B.r + - c * (gdouble)C.r + d * (gdouble)D.r ); - pixel->g = (guchar)( a * (gdouble)A.g + b * (gdouble)B.g + - c * (gdouble)C.g + d * (gdouble)D.g ); - pixel->b = (guchar)( a * (gdouble)A.b + b * (gdouble)B.b + - c * (gdouble)C.b + d * (gdouble)D.b ); - pixel->a = (guchar)( a * (gdouble)A.a + b * (gdouble)B.a + - c * (gdouble)C.a + d * (gdouble)D.a ); + pixels_get (x1, y1, &A); + pixels_get (x2, y1, &B); + pixels_get (x1, y2, &C); + pixels_get (x2, y2, &D); + + pixel->r = (guchar) (a * (gdouble) A.r + b * (gdouble) B.r + + c * (gdouble) C.r + d * (gdouble) D.r); + pixel->g = (guchar) (a * (gdouble) A.g + b * (gdouble) B.g + + c * (gdouble) C.g + d * (gdouble) D.g); + pixel->b = (guchar) (a * (gdouble) A.b + b * (gdouble) B.b + + c * (gdouble) C.b + d * (gdouble) D.b); + pixel->a = (guchar) (a * (gdouble) A.a + b * (gdouble) B.a + + c * (gdouble) C.a + d * (gdouble) D.a); } static void @@ -370,35 +379,38 @@ pixels_set (gint x, gint y, pixel_t *pixel) { - switch( image.bpp ){ - case 1: /* GRAY */ - dpixels[y][x*image.bpp] = pixel->r; - break; - case 2: /* GRAY+A */ - dpixels[y][x*image.bpp] = pixel->r; - dpixels[y][x*image.bpp+1] = pixel->a; - break; - case 3: /* RGB */ - dpixels[y][x*image.bpp] = pixel->r; - dpixels[y][x*image.bpp+1] = pixel->g; - dpixels[y][x*image.bpp+2] = pixel->b; - break; - case 4: /* RGB+A */ - dpixels[y][x*image.bpp] = pixel->r; - dpixels[y][x*image.bpp+1] = pixel->g; - dpixels[y][x*image.bpp+2] = pixel->b; - dpixels[y][x*image.bpp+3] = pixel->a; - break; - } + switch (image.bpp) + { + case 1: /* GRAY */ + dpixels[y][x*image.bpp] = pixel->r; + break; + case 2: /* GRAY+A */ + dpixels[y][x*image.bpp] = pixel->r; + dpixels[y][x*image.bpp+1] = pixel->a; + break; + case 3: /* RGB */ + dpixels[y][x*image.bpp] = pixel->r; + dpixels[y][x*image.bpp+1] = pixel->g; + dpixels[y][x*image.bpp+2] = pixel->b; + break; + case 4: /* RGB+A */ + dpixels[y][x*image.bpp] = pixel->r; + dpixels[y][x*image.bpp+1] = pixel->g; + dpixels[y][x*image.bpp+2] = pixel->b; + dpixels[y][x*image.bpp+3] = pixel->a; + break; + } } static void pixels_store (void) { gint y; - for( y = selection.y1; y < selection.y2; y++ ){ - gimp_pixel_rgn_set_row( &dPR, dpixels[y], 0, y, image.width ); - } + + for (y = selection.y1; y < selection.y2; y++) + { + gimp_pixel_rgn_set_row (&dPR, dpixels[y], 0, y, image.width); + } } /******************************************************************************/ @@ -415,19 +427,20 @@ mandelbrot (gdouble x, gdouble x2 = xx * xx; gdouble y2 = yy * yy; gdouble tmp; - while( iter < parameters.depth ){ - tmp = x2 - y2 + x; - yy = 2 * xx * yy + y; - xx = tmp; - x2 = xx * xx; - y2 = yy * yy; - iter++; - } + + while (iter < parameters.depth) + { + tmp = x2 - y2 + x; + yy = 2 * xx * yy + y; + xx = tmp; + x2 = xx * xx; + y2 = yy * yy; + iter++; + } *u = xx; *v = yy; } - /******************************************************************************/ static void @@ -439,192 +452,69 @@ filter (GDrawable *drawable) gdouble cx, cy; gdouble px, py; - gimp_progress_init( _("Fractal Trace")); + gimp_progress_init (_("Fractal Trace")); - scale_x = ( parameters.x2 - parameters.x1 ) / selection.width; - scale_y = ( parameters.y2 - parameters.y1 ) / selection.height; + scale_x = (parameters.x2 - parameters.x1) / selection.width; + scale_y = (parameters.y2 - parameters.y1) / selection.height; - for( y = selection.y1; y < selection.y2; y++ ){ - cy = parameters.y1 + ( y - selection.y1 ) * scale_y; - for( x = selection.x1; x < selection.x2; x++ ){ - cx = parameters.x1 + ( x - selection.x1 ) * scale_x; - mandelbrot( cx, cy, &px, &py ); - px = ( px - parameters.x1 ) / scale_x + selection.x1; - py = ( py - parameters.y1 ) / scale_y + selection.y1; - if( 0 <= px && px < image.width && 0 <= py && py < image.height ){ - pixels_get_biliner( px, py, &pixel ); - } else { - switch( parameters.outside_type ){ - case OUTSIDE_TYPE_WRAP: - px = fmod( px, image.width ); - py = fmod( py, image.height ); - if( px < 0.0 ) px += image.width; - if( py < 0.0 ) py += image.height; - pixels_get_biliner( px, py, &pixel ); - break; - case OUTSIDE_TYPE_TRANSPARENT: - pixel.r = pixel.g = pixel.b = 0; - pixel.a = 0; - break; - case OUTSIDE_TYPE_BLACK: - pixel.r = pixel.g = pixel.b = 0; - pixel.a = 255; - break; - case OUTSIDE_TYPE_WHITE: - pixel.r = pixel.g = pixel.b = 255; - pixel.a = 255; - break; + for (y = selection.y1; y < selection.y2; y++) + { + cy = parameters.y1 + (y - selection.y1) * scale_y; + for (x = selection.x1; x < selection.x2; x++) + { + cx = parameters.x1 + (x - selection.x1) * scale_x; + mandelbrot (cx, cy, &px, &py); + px = (px - parameters.x1) / scale_x + selection.x1; + py = (py - parameters.y1) / scale_y + selection.y1; + if (0 <= px && px < image.width && 0 <= py && py < image.height) + { + pixels_get_biliner (px, py, &pixel); + } + else + { + switch (parameters.outside_type) + { + case OUTSIDE_TYPE_WRAP: + px = fmod (px, image.width); + py = fmod (py, image.height); + if( px < 0.0) px += image.width; + if (py < 0.0) py += image.height; + pixels_get_biliner (px, py, &pixel); + break; + case OUTSIDE_TYPE_TRANSPARENT: + pixel.r = pixel.g = pixel.b = 0; + pixel.a = 0; + break; + case OUTSIDE_TYPE_BLACK: + pixel.r = pixel.g = pixel.b = 0; + pixel.a = 255; + break; + case OUTSIDE_TYPE_WHITE: + pixel.r = pixel.g = pixel.b = 255; + pixel.a = 255; + break; + } + } + pixels_set (x, y, &pixel); } - } - pixels_set( x, y, &pixel ); + gimp_progress_update ((gdouble) (y-selection.y1) / selection.height); } - gimp_progress_update( (gdouble)(y-selection.y1)/selection.height ); - } - pixels_store(); + pixels_store (); - gimp_drawable_flush( drawable ); - gimp_drawable_merge_shadow( drawable->id, TRUE ); - gimp_drawable_update( drawable->id, - selection.x1, selection.y1, selection.width, selection.height ); -} - -/* - GUI -*/ - -/******************************************************************************/ - -static int dialog_status; - -/******************************************************************************/ - -static void -dialog_entry_gint32_callback (GtkWidget *widget, - gpointer *data) -{ - gint32 value = (gint32)atof( gtk_entry_get_text( GTK_ENTRY( widget ) ) ); - if( *(gint32*)data != value ){ - *(gint32*)data = value; - dialog_preview_draw(); - } -} - -static void -dialog_entry_gint32_new (char *caption, - gint32 *value, - GtkWidget *table, - gint row ) -{ - GtkWidget *label; - GtkWidget *entry; - char buffer[256]; - - label = gtk_label_new( caption ); - gtk_table_attach_defaults( GTK_TABLE( table ), label, 0, 1, row, row + 1 ); - gtk_widget_show( label ); - - entry = gtk_entry_new(); - sprintf( buffer, "%d", *value ); - gtk_entry_set_text( GTK_ENTRY( entry ), buffer ); - gtk_signal_connect( GTK_OBJECT( entry ), "changed", - GTK_SIGNAL_FUNC( dialog_entry_gint32_callback ), value ); - gtk_table_attach_defaults( GTK_TABLE( table ), entry, 1, 2, row, row + 1 ); - gtk_widget_show( entry ); -} - -/******************************************************************************/ - -static void -dialog_entry_gdouble_callback (GtkWidget *widget, - gpointer *data) -{ - gdouble value = (gdouble)atof( gtk_entry_get_text( GTK_ENTRY( widget ) ) ); - if( *(gdouble*)data != value ){ - *(gdouble*)data = value; - dialog_preview_draw(); - } -} - -static void -dialog_entry_gdouble_new (char *caption, - gdouble *value, - GtkWidget *table, - gint row ) -{ - GtkWidget *label; - GtkWidget *entry; - char buffer[256]; - - label = gtk_label_new( caption ); - gtk_table_attach_defaults( GTK_TABLE( table ), label, 0, 1, row, row + 1 ); - gtk_widget_show( label ); - - entry = gtk_entry_new(); - sprintf( buffer, "%f", *value ); - gtk_entry_set_text( GTK_ENTRY( entry ), buffer ); - gtk_signal_connect( GTK_OBJECT( entry ), "changed", - GTK_SIGNAL_FUNC( dialog_entry_gdouble_callback ), value ); - gtk_table_attach_defaults( GTK_TABLE( table ), entry, 1, 2, row, row + 1 ); - gtk_widget_show( entry ); -} - -/******************************************************************************/ - -static GtkWidget* -dialog_entry_table (void) -{ - GtkWidget *table; - - table = gtk_table_new( 5, 2, FALSE ); - gtk_table_set_row_spacings( GTK_TABLE( table ), 2 ); - gtk_table_set_col_spacings( GTK_TABLE( table ), 10 ); - dialog_entry_gdouble_new( "X1", ¶meters.x1, table, 0 ); - dialog_entry_gdouble_new( "X2", ¶meters.x2, table, 1 ); - dialog_entry_gdouble_new( "Y1", ¶meters.y1, table, 2 ); - dialog_entry_gdouble_new( "Y2", ¶meters.y2, table, 3 ); - dialog_entry_gint32_new( _("DEPTH"), ¶meters.depth, table, 4 ); - - return table; -} - -/******************************************************************************/ - -static void -dialog_ok_callback (GtkWidget *widget, - gpointer data) -{ - dialog_status = TRUE; - gtk_widget_destroy( GTK_WIDGET( data ) ); -} - -static void -dialog_cancel_callback (GtkWidget *widget, - gpointer data) -{ - dialog_status = FALSE; - gtk_widget_destroy( GTK_WIDGET( data ) ); -} - -/******************************************************************************/ - -static void -dialog_outside_type_callback (GtkWidget *widget, - gpointer *data) -{ - gint32 value = *(gint32*)data; - - if( parameters.outside_type != value ){ - parameters.outside_type = value; - dialog_preview_draw(); - } + gimp_drawable_flush (drawable); + gimp_drawable_merge_shadow (drawable->id, TRUE); + gimp_drawable_update (drawable->id, + selection.x1, selection.y1, + selection.width, selection.height); } /******************************************************************************/ #define PREVIEW_SIZE 200 -typedef struct { +typedef struct +{ GtkWidget *preview; guchar **source; guchar **pixels; @@ -641,83 +531,87 @@ dialog_preview_setpixel (gint x, gint y, pixel_t *pixel) { - switch( preview.bpp ){ - case 1: - preview.pixels[y][x*preview.bpp] = pixel->r; - break; - case 3: - preview.pixels[y][x*preview.bpp] = pixel->r; - preview.pixels[y][x*preview.bpp+1] = pixel->g; - preview.pixels[y][x*preview.bpp+2] = pixel->b; - break; - } + switch (preview.bpp) + { + case 1: + preview.pixels[y][x*preview.bpp] = pixel->r; + break; + case 3: + preview.pixels[y][x*preview.bpp] = pixel->r; + preview.pixels[y][x*preview.bpp+1] = pixel->g; + preview.pixels[y][x*preview.bpp+2] = pixel->b; + break; + } } static void dialog_preview_store (void) { gint y; - for( y = 0; y < preview.height; y++ ){ - gtk_preview_draw_row( GTK_PREVIEW( preview.preview ), - preview.pixels[y], 0, y, preview.width ); - } - gtk_widget_draw( preview.preview, NULL ); - gdk_flush(); + + for (y = 0; y < preview.height; y++) + { + gtk_preview_draw_row (GTK_PREVIEW (preview.preview), + preview.pixels[y], 0, y, preview.width); + } + gtk_widget_draw (preview.preview, NULL); + gdk_flush (); } static void dialog_preview_init (void) { - { - guchar *cube; - gtk_preview_set_gamma( gimp_gamma() ); - gtk_preview_set_install_cmap( gimp_install_cmap() ); - cube = gimp_color_cube(); - gtk_preview_set_color_cube( cube[0], cube[1], cube[2], cube[3] ); - gtk_widget_set_default_visual( gtk_preview_get_visual() ); - gtk_widget_set_default_colormap( gtk_preview_get_cmap() ); - } + guchar *cube; + pixel_t pixel; + gint x, y; + gdouble cx, cy; - if( image.width < image.height ) + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + cube = gimp_color_cube (); + gtk_preview_set_color_cube (cube[0], cube[1], cube[2], cube[3]); + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); + + if(image.width < image.height) preview.scale = (gdouble)selection.height / (gdouble)PREVIEW_SIZE; else preview.scale = (gdouble)selection.width / (gdouble)PREVIEW_SIZE; preview.width = (gdouble)selection.width / preview.scale; preview.height = (gdouble)selection.height / preview.scale; - if( image.bpp < 3 ){ - preview.bpp = 1; - preview.preview = gtk_preview_new( GTK_PREVIEW_GRAYSCALE ); - } else { - preview.bpp = 3; - preview.preview = gtk_preview_new( GTK_PREVIEW_COLOR ); - } - gtk_preview_size( GTK_PREVIEW( preview.preview ), preview.width, preview.height ); - - { - gint y; - preview.source = (guchar**)g_malloc( preview.height * sizeof( guchar* ) ); - preview.pixels = (guchar**)g_malloc( preview.height * sizeof( guchar* ) ); - for( y = 0; y < preview.height; y++ ){ - preview.source[y] = (guchar*)g_malloc( preview.width * preview.bpp * sizeof( guchar ) ); - preview.pixels[y] = (guchar*)g_malloc( preview.width * preview.bpp * sizeof( guchar ) ); + if (image.bpp < 3) + { + preview.bpp = 1; + preview.preview = gtk_preview_new (GTK_PREVIEW_GRAYSCALE); } - } - - { - pixel_t pixel; - gint x, y; - gdouble cx, cy; - for( y = 0; y < preview.height; y++ ){ + else + { + preview.bpp = 3; + preview.preview = gtk_preview_new (GTK_PREVIEW_COLOR); + } + gtk_preview_size (GTK_PREVIEW (preview.preview), + preview.width, preview.height); + + preview.source = g_new (guchar *, preview.height); + preview.pixels = g_new (guchar *, preview.height); + for (y = 0; y < preview.height; y++) + { + preview.source[y] = g_new (guchar, preview.width * preview.bpp); + preview.pixels[y] = g_new (guchar, preview.width * preview.bpp); + } + + for (y = 0; y < preview.height; y++) + { cy = selection.y1 + (gdouble)y * preview.scale; - for( x = 0; x < preview.width; x++ ){ - cx = selection.x1 + (gdouble)x * preview.scale; - pixels_get_biliner( cx, cy, &pixel ); - dialog_preview_setpixel( x, y, &pixel ); - } + for (x = 0; x < preview.width; x++) + { + cx = selection.x1 + (gdouble)x * preview.scale; + pixels_get_biliner (cx, cy, &pixel); + dialog_preview_setpixel (x, y, &pixel); + } } - dialog_preview_store(); - } + dialog_preview_store (); } static void @@ -729,41 +623,94 @@ dialog_preview_draw (void) gdouble cx, cy; gdouble px, py; - scale_x = ( parameters.x2 - parameters.x1 ) / preview.width; - scale_y = ( parameters.y2 - parameters.y1 ) / preview.height; + scale_x = (parameters.x2 - parameters.x1) / preview.width; + scale_y = (parameters.y2 - parameters.y1) / preview.height; - for( y = 0; y < preview.height; y++ ){ - cy = parameters.y1 + y * scale_y; - for( x = 0; x < preview.width; x++ ){ - cx = parameters.x1 + x * scale_x; - mandelbrot( cx, cy, &px, &py ); - px = ( px - parameters.x1 ) / scale_x * preview.scale + selection.x1; - py = ( py - parameters.y1 ) / scale_y * preview.scale + selection.y1; - if( 0 <= px && px < image.width && 0 <= py && py < image.height ){ - pixels_get_biliner( px, py, &pixel ); - } else { - switch( parameters.outside_type ){ - case OUTSIDE_TYPE_WRAP: - px = fmod( px, image.width ); - py = fmod( py, image.height ); - if( px < 0.0 ) px += image.width; - if( py < 0.0 ) py += image.height; - pixels_get_biliner( px, py, &pixel ); - break; - case OUTSIDE_TYPE_TRANSPARENT: - case OUTSIDE_TYPE_BLACK: - pixel.r = pixel.g = pixel.b = 0; - break; - case OUTSIDE_TYPE_WHITE: - pixel.r = pixel.g = pixel.b = 255; - break; + for (y = 0; y < preview.height; y++) + { + cy = parameters.y1 + y * scale_y; + for (x = 0; x < preview.width; x++) + { + cx = parameters.x1 + x * scale_x; + mandelbrot(cx, cy, &px, &py); + px = (px - parameters.x1) / scale_x * preview.scale + selection.x1; + py = (py - parameters.y1) / scale_y * preview.scale + selection.y1; + if (0 <= px && px < image.width && 0 <= py && py < image.height) + { + pixels_get_biliner (px, py, &pixel); + } + else + { + switch (parameters.outside_type) + { + case OUTSIDE_TYPE_WRAP: + px = fmod (px, image.width); + py = fmod (py, image.height); + if (px < 0.0) px += image.width; + if (py < 0.0) py += image.height; + pixels_get_biliner (px, py, &pixel); + break; + case OUTSIDE_TYPE_TRANSPARENT: + pixel.r = pixel.g = pixel.b = + (((x % (GIMP_CHECK_SIZE * 2) < GIMP_CHECK_SIZE) ? + (y % (GIMP_CHECK_SIZE * 2) < GIMP_CHECK_SIZE) : + (y % (GIMP_CHECK_SIZE * 2) > GIMP_CHECK_SIZE)) ? + GIMP_CHECK_LIGHT : GIMP_CHECK_DARK) * 255; + break; + case OUTSIDE_TYPE_BLACK: + pixel.r = pixel.g = pixel.b = 0; + break; + case OUTSIDE_TYPE_WHITE: + pixel.r = pixel.g = pixel.b = 255; + break; + } + } + dialog_preview_setpixel (x, y, &pixel); } - } - dialog_preview_setpixel( x, y, &pixel ); } - } - dialog_preview_store(); + dialog_preview_store (); +} + +/******************************************************************************/ + +static gboolean dialog_status = FALSE; + +static void +dialog_int_adjustment_update (GtkAdjustment *adjustment, + gpointer data) +{ + gimp_int_adjustment_update (adjustment, data); + + dialog_preview_draw (); +} + +static void +dialog_double_adjustment_update (GtkAdjustment *adjustment, + gpointer data) +{ + gimp_double_adjustment_update (adjustment, data); + + dialog_preview_draw (); +} + +static void +dialog_ok_callback (GtkWidget *widget, + gpointer data) +{ + dialog_status = TRUE; + + gtk_widget_destroy (GTK_WIDGET (data)); +} + +static void +dialog_outside_type_callback (GtkWidget *widget, + gpointer *data) +{ + gimp_radio_button_update (widget, data); + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + dialog_preview_draw (); } /******************************************************************************/ @@ -773,16 +720,19 @@ dialog_show (void) { GtkWidget *dialog; GtkWidget *mainbox; + GtkWidget *hbox; + GtkWidget *table; + GtkWidget *frame; + GtkWidget *abox; + GtkWidget *pframe; + GtkObject *adj; - dialog_status = FALSE; + gint argc = 1; + gchar **argv = g_new (gchar *, 1); + argv[0] = "fractaltrace"; - { - gint argc = 1; - gchar **argv = g_new (gchar *, 1); - argv[0] = g_strdup (_("fractaltrace")); - gtk_init (&argc, &argv); - gtk_rc_parse (gimp_gtkrc()); - } + gtk_init (&argc, &argv); + gtk_rc_parse (gimp_gtkrc ()); dialog = gimp_dialog_new (_("Fractal Trace"), "fractaltrace", gimp_plugin_help_func, "filters/fractaltrace.html", @@ -791,8 +741,8 @@ dialog_show (void) _("OK"), dialog_ok_callback, NULL, NULL, NULL, TRUE, FALSE, - _("Cancel"), dialog_cancel_callback, - NULL, NULL, NULL, FALSE, TRUE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, NULL); @@ -800,119 +750,103 @@ dialog_show (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - mainbox = gtk_hbox_new (FALSE, 0); + mainbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (mainbox), 6); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), mainbox); gtk_widget_show (mainbox); - { - GtkWidget *vbox; - GtkWidget *frame; - - vbox = gtk_vbox_new (TRUE, 0); - gtk_container_border_width (GTK_CONTAINER (vbox), 10); - gtk_box_pack_start (GTK_BOX (mainbox), vbox, FALSE, FALSE, 0); - gtk_widget_show (vbox); + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (mainbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); + /* Preview */ + frame = gtk_frame_new (_("Preview")); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); - dialog_preview_init (); - gtk_container_add (GTK_CONTAINER (frame), preview.preview); - gtk_widget_show (preview.preview); - } - - { - GtkWidget *vbox; - GtkWidget *entrytable; - GtkWidget *separator; - GtkWidget *frame; - GtkWidget *framebox; - GtkWidget *button; - GSList *group; - - vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (vbox), 10); - gtk_box_pack_start (GTK_BOX (mainbox), vbox, FALSE, FALSE, 0); - gtk_widget_show (vbox); + abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_set_border_width (GTK_CONTAINER (abox), 4); + gtk_container_add (GTK_CONTAINER (frame), abox); + gtk_widget_show (abox); - entrytable = dialog_entry_table (); - gtk_box_pack_start (GTK_BOX (vbox), entrytable, FALSE, FALSE, 0); - gtk_widget_show (entrytable); - - separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox), separator, FALSE, FALSE, 0); - gtk_widget_show (entrytable); + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (pframe), GTK_SHADOW_IN); + gtk_container_add (GTK_CONTAINER (abox), pframe); + gtk_widget_show (pframe); - frame = gtk_frame_new (_("Outside Type")); - gtk_container_border_width (GTK_CONTAINER (frame), 5); - gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); + dialog_preview_init (); + gtk_container_add (GTK_CONTAINER (pframe), preview.preview); + gtk_widget_show (preview.preview); - framebox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (framebox), 5); - gtk_container_add (GTK_CONTAINER (frame), framebox); - gtk_widget_show (framebox); + /* Settings */ + frame = gimp_radio_group_new2 (TRUE, _("Outside Type"), + dialog_outside_type_callback, + ¶meters.outside_type, + (gpointer) parameters.outside_type, - group = NULL; - - button = gtk_radio_button_new_with_label (group, _("Wrap")); - gtk_box_pack_start (GTK_BOX (framebox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "toggled", - GTK_SIGNAL_FUNC (dialog_outside_type_callback), - &outside_type.wrap); - gtk_widget_show (button); - if (parameters.outside_type == OUTSIDE_TYPE_WRAP) - { - gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (button)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); - } - group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); + _("Warp"), + (gpointer) OUTSIDE_TYPE_WRAP, NULL, + _("Transparent"), + (gpointer) OUTSIDE_TYPE_TRANSPARENT, NULL, + _("Black"), + (gpointer) OUTSIDE_TYPE_BLACK, NULL, + _("White"), + (gpointer) OUTSIDE_TYPE_WHITE, NULL, - button = gtk_radio_button_new_with_label (group, _("Transparent")); - gtk_box_pack_start (GTK_BOX (framebox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "toggled", - GTK_SIGNAL_FUNC (dialog_outside_type_callback), - &outside_type.transparent); - gtk_widget_show (button); - if (parameters.outside_type == OUTSIDE_TYPE_TRANSPARENT) - { - gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (button)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); - } - if (!image.alpha) - { - gtk_widget_set_sensitive (button, FALSE); - } - group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); - - button = gtk_radio_button_new_with_label (group, _("Black")); - gtk_box_pack_start (GTK_BOX (framebox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "toggled", - GTK_SIGNAL_FUNC (dialog_outside_type_callback), - &outside_type.black); - gtk_widget_show (button); - if (parameters.outside_type == OUTSIDE_TYPE_BLACK) - { - gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (button)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); - } - group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); - - button = gtk_radio_button_new_with_label (group, _("White")); - gtk_box_pack_start (GTK_BOX (framebox), button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button), "toggled", - GTK_SIGNAL_FUNC (dialog_outside_type_callback), - &outside_type.white); - gtk_widget_show (button); - if (parameters.outside_type == OUTSIDE_TYPE_WHITE) - { - gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (button)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); - } - group = gtk_radio_button_group (GTK_RADIO_BUTTON (button)); - } + NULL); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + frame = gtk_frame_new (_("Mandelbrot Parameters")); + gtk_box_pack_start (GTK_BOX (mainbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + table = gtk_table_new (5, 3, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_widget_show (table); + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, + "X1:", 0, 0, + parameters.x1, -50, 50, 0.1, 0.5, 2, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (dialog_double_adjustment_update), + ¶meters.x1); + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, + "X2:", 0, 0, + parameters.x2, -50, 50, 0.1, 0.5, 2, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (dialog_double_adjustment_update), + ¶meters.x2); + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + "Y1:", 0, 0, + parameters.y1, -50, 50, 0.1, 0.5, 2, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (dialog_double_adjustment_update), + ¶meters.y1); + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + "Y2:", 0, 0, + parameters.y2, -50, 50, 0.1, 0.5, 2, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (dialog_double_adjustment_update), + ¶meters.y2); + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 4, + "Depth:", 0, 0, + parameters.depth, 1, 50, 1, 5, 0, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (dialog_int_adjustment_update), + ¶meters.depth); gtk_widget_show (dialog); dialog_preview_draw (); @@ -922,5 +856,3 @@ dialog_show (void) return dialog_status; } - -/******************************************************************************/ diff --git a/plug-ins/common/gbr.c b/plug-ins/common/gbr.c index 292b17121e..b287020b9d 100644 --- a/plug-ins/common/gbr.c +++ b/plug-ins/common/gbr.c @@ -37,19 +37,21 @@ #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include + +#include "app/brush_header.h" #include "libgimp/stdplugins-intl.h" -#include "app/brush_header.h" /* Declare local data types */ -typedef struct { - char description[256]; - unsigned int spacing; +typedef struct +{ + gchar description[256]; + gint spacing; } t_info; t_info info = @@ -58,19 +60,19 @@ t_info info = 10 }; -int run_flag = 0; +gint run_flag = FALSE; /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); @@ -83,17 +85,17 @@ static void entry_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -101,13 +103,13 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name of the file to load" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -119,7 +121,7 @@ query () { PARAM_INT32, "spacing", "Spacing of the brush" }, { PARAM_STRING, "description", "Short description of the brush" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -147,31 +149,35 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_gbr_load", "gbr", "", "20,string,GIMP"); - gimp_register_save_handler ("file_gbr_save", "gbr", ""); + gimp_register_magic_load_handler ("file_gbr_load", + "gbr", + "", + "20,string,GIMP"); + gimp_register_save_handler ("file_gbr_save", + "gbr", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; - GStatusType status = STATUS_SUCCESS; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; - + run_mode = param[0].data.d_int32; + *nreturn_vals = 1; *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = -1; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_gbr_load") == 0) { @@ -179,12 +185,14 @@ run (char *name, if (image_ID != -1) { - values[0].data.d_status = STATUS_SUCCESS; + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; - } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } - *nreturn_vals = 2; + } + else + { + status = STATUS_EXECUTION_ERROR; + } } else if (strcmp (name, "file_gbr_save") == 0) { @@ -196,59 +204,72 @@ run (char *name, { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: - INIT_I18N_UI(); + INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "GBR", CAN_HANDLE_GRAY); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: - INIT_I18N(); + INIT_I18N(); break; } switch (run_mode) { case RUN_INTERACTIVE: - /* Possibly retrieve data */ - gimp_get_data("file_gbr_save", &info); - if (!save_dialog()) - return; + /* Possibly retrieve data */ + gimp_get_data ("file_gbr_save", &info); + if (! save_dialog ()) + status = STATUS_CANCEL; break; + case RUN_NONINTERACTIVE: /* FIXME - need a real RUN_NONINTERACTIVE */ if (nparams != 7) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { info.spacing = (param[5].data.d_int32); strncpy (info.description, param[6].data.d_string, 256); } break; + case RUN_WITH_LAST_VALS: gimp_get_data ("file_gbr_save", &info); break; } - - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + + if (status == STATUS_SUCCESS) { - gimp_set_data ("file_gbr_save", &info, sizeof(info)); - values[0].data.d_status = STATUS_SUCCESS; - } else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + gimp_set_data ("file_gbr_save", &info, sizeof(info)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) +load_image (gchar *filename) { char *temp; int fd; @@ -323,7 +344,8 @@ load_image (char *filename) gimp_image_set_filename (image_ID, filename); layer_ID = gimp_layer_new (image_ID, _("Background"), ph.width, ph.height, - (ph.bytes >= 3) ? RGB_IMAGE : GRAY_IMAGE, 100, NORMAL_MODE); + (ph.bytes >= 3) ? RGB_IMAGE : GRAY_IMAGE, 100, + NORMAL_MODE); gimp_image_add_layer (image_ID, layer_ID, 0); drawable = gimp_drawable_get (layer_ID); @@ -378,7 +400,7 @@ save_image (char *filename, if (fd == -1) { g_message( _("Unable to open %s"), filename); - return 0; + return FALSE; } ph.header_size = g_htonl(sizeof(ph) + strlen(info.description) + 1); @@ -392,14 +414,14 @@ save_image (char *filename, if (write(fd, &ph, sizeof(ph)) != sizeof(ph)) { close(fd); - return 0; + return FALSE; } if (write(fd, info.description, strlen(info.description) + 1) != strlen(info.description) + 1) { close(fd); - return 0; + return FALSE; } buffer = g_malloc(drawable->width * drawable->bpp); @@ -409,7 +431,7 @@ save_image (char *filename, if (write(fd, buffer, drawable->width * drawable->bpp) != drawable->width * drawable->bpp) { close(fd); - return 0; + return FALSE; } gimp_progress_update((double) line / (double) drawable->height); } @@ -417,11 +439,11 @@ save_image (char *filename, close(fd); - return 1; + return TRUE; } static void -init_gtk () +init_gtk (void) { gchar **argv; gint argc; @@ -438,10 +460,10 @@ static gint save_dialog (void) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *entry; GtkWidget *table; - gchar buffer[12]; + GtkWidget *entry; + GtkWidget *spinbutton; + GtkObject *adj; dlg = gimp_dialog_new (_("Save as Brush"), "gbr", gimp_plugin_help_func, "filters/gbr.html", @@ -461,57 +483,30 @@ save_dialog (void) /* The main table */ table = gtk_table_new (2, 2, FALSE); - gtk_container_border_width (GTK_CONTAINER (table), 6); + gtk_container_set_border_width (GTK_CONTAINER (table), 6); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); gtk_widget_show (table); - gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - - /********************** - * label - **********************/ - label = gtk_label_new (_("Spacing:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - /************************ - * The entry - ************************/ - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, 200, 0); - g_snprintf (buffer, sizeof (buffer), "%i", info.spacing); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - GTK_SIGNAL_FUNC (entry_callback), + spinbutton = gimp_spin_button_new (&adj, + info.spacing, 1, 1000, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Spacing:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), &info.spacing); - gtk_widget_show (entry); - /********************** - * label - **********************/ - label = gtk_label_new (_("Description:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - /************************ - * The entry - ************************/ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_usize (entry, 200, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Description:"), 1.0, 0.5, + entry, FALSE); gtk_entry_set_text (GTK_ENTRY (entry), info.description); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (entry_callback), info.description); - gtk_widget_show (entry); gtk_widget_show (dlg); @@ -533,8 +528,5 @@ static void entry_callback (GtkWidget *widget, gpointer data) { - if (data == info.description) - strncpy (info.description, gtk_entry_get_text (GTK_ENTRY (widget)), 256); - else if (data == &info.spacing) - info.spacing = atoi (gtk_entry_get_text (GTK_ENTRY (widget))); + strncpy (info.description, gtk_entry_get_text (GTK_ENTRY (widget)), 256); } diff --git a/plug-ins/common/gicon.c b/plug-ins/common/gicon.c index 7a4397274e..d7d6a7b0ca 100644 --- a/plug-ins/common/gicon.c +++ b/plug-ins/common/gicon.c @@ -36,8 +36,8 @@ #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include #include "libgimp/stdplugins-intl.h" @@ -54,13 +54,13 @@ typedef struct /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); @@ -74,10 +74,10 @@ static void entry_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static GIconSaveVals givals = @@ -93,7 +93,7 @@ static GIconSaveInterface giint = MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -105,8 +105,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -117,7 +118,7 @@ query () { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, { PARAM_STRING, "icon_name", "The name of the icon" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -145,31 +146,34 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_load_handler ("file_gicon_load", "ico", ""); - gimp_register_save_handler ("file_gicon_save", "ico", ""); + gimp_register_load_handler ("file_gicon_load", + "ico", + ""); + gimp_register_save_handler ("file_gicon_save", + "ico", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; - GStatusType status = STATUS_SUCCESS; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = -1; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_gicon_load") == 0) { @@ -177,14 +181,14 @@ run (char *name, if (image_ID != -1) { - values[0].data.d_status = STATUS_SUCCESS; + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } - *nreturn_vals = 2; } else if (strcmp (name, "file_gicon_save") == 0) { @@ -196,18 +200,19 @@ run (char *name, { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: - INIT_I18N_UI(); + INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "GIcon", - (CAN_HANDLE_GRAY | CAN_HANDLE_ALPHA)); + (CAN_HANDLE_GRAY | + CAN_HANDLE_ALPHA)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: - INIT_I18N(); + INIT_I18N(); break; } @@ -219,15 +224,19 @@ run (char *name, /* First acquire information with a dialog */ if (! save_dialog ()) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 6) - status = STATUS_CALLING_ERROR; + { + status = STATUS_CALLING_ERROR; + } else - strncpy (givals.icon_name, param[5].data.d_string, 256); + { + strncpy (givals.icon_name, param[5].data.d_string, 256); + } break; case RUN_WITH_LAST_VALS: @@ -239,24 +248,32 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + if (status == STATUS_SUCCESS) { - /* Store persistent data */ - gimp_set_data ("file_gicon_save", &givals, sizeof (GIconSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + /* Store persistent data */ + gimp_set_data ("file_gicon_save", &givals, sizeof (GIconSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) +load_image (gchar *filename) { GDrawable *drawable; GPixelRgn pixel_rgn; @@ -427,9 +444,8 @@ static gint save_dialog (void) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *entry; GtkWidget *table; + GtkWidget *entry; dlg = gimp_dialog_new (_("Save as GIcon"), "gicon", gimp_plugin_help_func, "filters/gicon.html", @@ -449,29 +465,18 @@ save_dialog (void) /* The main table */ table = gtk_table_new (1, 2, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_container_set_border_width (GTK_CONTAINER (table), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); gtk_widget_show (table); - gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - /********************** - * label - **********************/ - label = gtk_label_new (_("Icon Name:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - /************************ - * The entry - ************************/ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_usize (entry, 200, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Icon Name:"), 1.0, 0.5, + entry, FALSE); gtk_entry_set_text (GTK_ENTRY (entry), givals.icon_name); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (entry_callback), @@ -491,6 +496,7 @@ ok_callback (GtkWidget *widget, gpointer data) { giint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } diff --git a/plug-ins/common/gif.c b/plug-ins/common/gif.c index df499d2b50..7a1f7c4159 100644 --- a/plug-ins/common/gif.c +++ b/plug-ins/common/gif.c @@ -270,8 +270,8 @@ #include #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include #include "libgimp/stdplugins-intl.h" @@ -286,13 +286,19 @@ /* PS: I know that technically facehuggers aren't parasites, the pupal-forms are. But facehuggers are ky00te. */ +enum +{ + DISPOSE_UNSPECIFIED, + DISPOSE_COMBINE, + DISPOSE_REPLACE +}; typedef struct { - int interlace; - int loop; - int default_delay; - int default_dispose; + gint interlace; + gint loop; + gint default_delay; + gint default_dispose; } GIFSaveVals; typedef struct @@ -305,12 +311,12 @@ typedef struct /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint save_image (char *filename, +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID, gint32 orig_image_ID); @@ -320,40 +326,31 @@ static gboolean boundscheck (gint32 image_ID); static gboolean badbounds_dialog (void); static void cropok_callback (GtkWidget *widget, gpointer data); -static void cropcancel_callback (GtkWidget *widget, gpointer data); static gint save_dialog (gint32 image_ID); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_cancel_callback (GtkWidget *widget, gpointer data); -static void disposal_select_callback (GtkWidget *widget, gpointer data); -static void save_toggle_update (GtkWidget *widget, gpointer data); -static void save_entry_callback (GtkWidget *widget, gpointer data); static void comment_entry_callback (GtkWidget *widget, gpointer data); - -static gint radio_pressed[3]; - static gboolean comment_was_edited = FALSE; -static gboolean can_crop; +static gboolean can_crop = FALSE; static GRunModeType run_mode; #ifdef FACEHUGGERS Parasite* comment_parasite = NULL; #endif /* For compression code */ -static int Interlace; - +static gint Interlace; GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static GIFSaveVals gsvals = @@ -370,11 +367,10 @@ static GIFSaveInterface gsint = }; - MAIN () static void -query () +query (void) { static GParamDef save_args[] = { @@ -388,7 +384,7 @@ query () { PARAM_INT32, "default_delay", "(animated gif) Default delay between framese in milliseconds" }, { PARAM_INT32, "default_dispose", "(animated gif) Default disposal type (0=`don't care`, 1=combine, 2=replace)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); gimp_install_procedure ("file_gif_save", @@ -403,38 +399,39 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_save_handler ("file_gif_save", "gif", ""); + gimp_register_save_handler ("file_gif_save", + "gif", + ""); } - static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; - *nreturn_vals = 2; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_gif_save") == 0) { INIT_I18N_UI(); init_gtk (); - image_ID = orig_image_ID = param[1].data.d_int32; - drawable_ID = param[2].data.d_int32; + image_ID = orig_image_ID = param[1].data.d_int32; + drawable_ID = param[2].data.d_int32; /* eventually export the image */ switch (run_mode) @@ -442,12 +439,13 @@ run (char *name, case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: export = gimp_export_image (&image_ID, &drawable_ID, "GIF", - (CAN_HANDLE_INDEXED | CAN_HANDLE_GRAY | - CAN_HANDLE_ALPHA | CAN_HANDLE_LAYERS_AS_ANIMATION)); + (CAN_HANDLE_INDEXED | + CAN_HANDLE_GRAY | + CAN_HANDLE_ALPHA | + CAN_HANDLE_LAYERS_AS_ANIMATION)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -462,42 +460,25 @@ run (char *name, switch (run_mode) { case RUN_INTERACTIVE: - { - /* Possibly retrieve data */ - gimp_get_data ("file_gif_save", &gsvals); + /* Possibly retrieve data */ + gimp_get_data ("file_gif_save", &gsvals); - /* First acquire information with a dialog */ - radio_pressed[0] = - radio_pressed[1] = - radio_pressed[2] = FALSE; - - radio_pressed[gsvals.default_dispose] = TRUE; - - if (! save_dialog (image_ID)) - { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; - fflush(stdout); - return; - } - - if (radio_pressed[0]) gsvals.default_dispose = 0x00; - else - if (radio_pressed[1]) gsvals.default_dispose = 0x01; - else - if (radio_pressed[2]) gsvals.default_dispose = 0x02; - } + /* First acquire information with a dialog */ + if (! save_dialog (image_ID)) + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 9) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { gsvals.interlace = (param[5].data.d_int32) ? TRUE : FALSE; - gsvals.loop = (param[6].data.d_int32) ? TRUE : FALSE; - gsvals.default_delay = param[7].data.d_int32; + gsvals.loop = (param[6].data.d_int32) ? TRUE : FALSE; + gsvals.default_delay = param[7].data.d_int32; gsvals.default_dispose = param[8].data.d_int32; } break; @@ -511,32 +492,34 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID)) + if (status == STATUS_SUCCESS) { - /* Store psvals data */ - gimp_set_data ("file_gif_save", &gsvals, sizeof (GIFSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID)) + { + /* Store psvals data */ + gimp_set_data ("file_gif_save", &gsvals, sizeof (GIFSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; } else /* Some layers were out of bounds and the user wishes to abort. */ { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_CANCEL; } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } -} + values[0].data.d_status = status; +} #define MAXCOLORMAPSIZE 256 @@ -546,12 +529,12 @@ run (char *name, #define GRAYSCALE 1 #define COLOR 2 -typedef unsigned char CMap[3][MAXCOLORMAPSIZE]; +typedef guchar CMap[3][MAXCOLORMAPSIZE]; -int verbose = FALSE; -char *globalcomment = NULL; -gint globalusecomment = TRUE; +gint verbose = FALSE; +gchar *globalcomment = NULL; +gint globalusecomment = TRUE; @@ -848,7 +831,7 @@ boundscheck (gint32 image_ID) static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID, gint32 orig_image_ID) @@ -1143,13 +1126,13 @@ save_image (char *filename, } static void -init_gtk () +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("gif"); gtk_init (&argc, &argv); @@ -1157,15 +1140,13 @@ init_gtk () } static gboolean -badbounds_dialog ( void ) +badbounds_dialog (void) { GtkWidget *dlg; GtkWidget *label; GtkWidget *frame; GtkWidget *vbox; - can_crop = FALSE; - dlg = gimp_dialog_new (_("GIF Warning"), "gif_warning", gimp_plugin_help_func, "filters/gif.html#warning", GTK_WIN_POS_MOUSE, @@ -1173,8 +1154,8 @@ badbounds_dialog ( void ) _("OK"), cropok_callback, NULL, NULL, NULL, TRUE, FALSE, - _("Cancel"), cropcancel_callback, - NULL, NULL, NULL, FALSE, TRUE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, NULL); @@ -1185,12 +1166,12 @@ badbounds_dialog ( void ) /* the warning message */ frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - vbox = gtk_vbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - gtk_container_add (GTK_CONTAINER (frame), vbox); + vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); label= gtk_label_new (_("The image which you are trying to save as a GIF\n" "contains layers which extend beyond the actual\n" @@ -1199,17 +1180,14 @@ badbounds_dialog ( void ) "You may choose whether to crop all of the layers to\n" "the image borders, or cancel this save.")); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); - gtk_widget_show(label); + gtk_widget_show (label); - gtk_widget_show(vbox); - gtk_widget_show(frame); + gtk_widget_show (vbox); + gtk_widget_show (frame); - gtk_widget_show(dlg); + gtk_widget_show (dlg); gtk_main (); - - gtk_widget_destroy (GTK_WIDGET (dlg)); - gdk_flush (); return can_crop; @@ -1220,14 +1198,15 @@ static gint save_dialog (gint32 image_ID) { GtkWidget *dlg; + GtkWidget *main_vbox; GtkWidget *toggle; GtkWidget *label; - GtkWidget *entry; + GtkWidget *spinbutton; + GtkObject *adj; GtkWidget *text; GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *menu; GtkWidget *disposal_option_menu; GtkWidget *com_table; GtkWidget *vscrollbar; @@ -1235,7 +1214,6 @@ save_dialog (gint32 image_ID) Parasite* GIF2_CMNT; #endif - gchar buffer[10]; gint32 nlayers; gimp_image_get_layers (image_ID, &nlayers); @@ -1247,8 +1225,8 @@ save_dialog (gint32 image_ID) _("OK"), save_ok_callback, NULL, NULL, NULL, TRUE, FALSE, - _("Cancel"), save_cancel_callback, - NULL, NULL, NULL, FALSE, TRUE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, NULL); @@ -1256,37 +1234,40 @@ save_dialog (gint32 image_ID) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + main_vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dlg)->vbox), main_vbox); + gtk_widget_show (main_vbox); + /* regular gif parameter settings */ frame = gtk_frame_new (_("GIF Options")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width (GTK_CONTAINER (frame), 10); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (vbox), 5); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0); + + vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); gtk_container_add (GTK_CONTAINER (frame), vbox); toggle = gtk_check_button_new_with_label (_("Interlace")); - gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &gsvals.interlace); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), gsvals.interlace); gtk_widget_show (toggle); - hbox = gtk_hbox_new(FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (hbox), 0); + hbox = gtk_hbox_new (FALSE, 4); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); - toggle = gtk_check_button_new_with_label (_("GIF Comment: ")); + toggle = gtk_check_button_new_with_label (_("GIF Comment:")); gtk_box_pack_start (GTK_BOX (hbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &globalusecomment); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), 1); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), TRUE); gtk_widget_show (toggle); com_table = gtk_table_new (1, 1, FALSE); - /* gtk_container_border_width (GTK_CONTAINER (com_table), 10);*/ gtk_box_pack_start (GTK_BOX (hbox), com_table, TRUE, TRUE, 0); text = gtk_text_new (NULL, NULL); @@ -1296,129 +1277,108 @@ save_dialog (gint32 image_ID) GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); - if (globalcomment!=NULL) + if (globalcomment != NULL) { - g_free(globalcomment); + g_free (globalcomment); } #ifdef FACEHUGGERS GIF2_CMNT = gimp_image_parasite_find (image_ID, "gimp-comment"); - if (GIF2_CMNT) - { - globalcomment = g_malloc(GIF2_CMNT->size); - strcpy(globalcomment, GIF2_CMNT->data); - } - else - { + if (GIF2_CMNT) + { + globalcomment = g_malloc (GIF2_CMNT->size); + strcpy (globalcomment, GIF2_CMNT->data); + } + else + { #endif - /* globalcomment = g_malloc(1+strlen(_("Made with GIMP"))); + /* globalcomment = g_malloc(1+strlen(_("Made with GIMP"))); strcpy(globalcomment, _("Made with GIMP")); */ - globalcomment = NULL; + globalcomment = NULL; #ifdef FACEHUGGERS - } - parasite_free (GIF2_CMNT); + } + parasite_free (GIF2_CMNT); #endif - if (globalcomment) - gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,globalcomment,-1); - gtk_signal_connect (GTK_OBJECT (text), "changed", - (GtkSignalFunc) comment_entry_callback, - NULL); + if (globalcomment) + gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, globalcomment, -1); + gtk_signal_connect (GTK_OBJECT (text), "changed", + GTK_SIGNAL_FUNC (comment_entry_callback), + NULL); - vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); - gtk_table_attach (GTK_TABLE (com_table), vscrollbar, 1, 2, 0, 1, - GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (vscrollbar); - gtk_widget_show (text); - gtk_widget_show (com_table); - - gtk_widget_show (hbox); - - gtk_widget_show (vbox); - gtk_widget_show (frame); + vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); + gtk_table_attach (GTK_TABLE (com_table), vscrollbar, 1, 2, 0, 1, + GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + gtk_widget_show (vscrollbar); + gtk_widget_show (text); + gtk_widget_show (com_table); + gtk_widget_show (hbox); + + gtk_widget_show (vbox); + gtk_widget_show (frame); /* additional animated gif parameter settings */ frame = gtk_frame_new (_("Animated GIF Options")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width (GTK_CONTAINER (frame), 8); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + vbox = gtk_vbox_new (FALSE, 4); - gtk_container_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); gtk_container_add (GTK_CONTAINER (frame), vbox); toggle = gtk_check_button_new_with_label (_("Loop forever")); - gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &gsvals.loop); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), gsvals.loop); gtk_widget_show (toggle); - /* default_delay entry field */ hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - label = gtk_label_new (_("Delay between frames where unspecified: ")); + label = gtk_label_new (_("Delay between Frames where Unspecified:")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); - entry = gtk_entry_new (); - gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0); - gtk_widget_set_usize (entry, 80, 0); - g_snprintf (buffer, sizeof (buffer), "%d", gsvals.default_delay); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) save_entry_callback, - NULL); - gtk_widget_show (entry); + spinbutton = gimp_spin_button_new (&adj, gsvals.default_delay, + 0, 65000, 10, 100, 0, 1, 0); + gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &gsvals.default_delay); + gtk_widget_show (spinbutton); - label = gtk_label_new (_(" milliseconds")); + label = gtk_label_new (_("Milliseconds")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); gtk_widget_show (hbox); - /* Disposal selector */ hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - label = gtk_label_new (_("Frame disposal where unspecified: ")); + label = gtk_label_new (_("Frame Disposal where Unspecified: ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); - disposal_option_menu = gtk_option_menu_new(); - { - GtkWidget *menu_item; + disposal_option_menu = + gimp_option_menu_new (gimp_menu_item_update, + &gsvals.default_dispose, + (gpointer) gsvals.default_dispose, - menu = gtk_menu_new(); - { - menu_item = gtk_menu_item_new_with_label (_("I don't care")); - gtk_signal_connect( GTK_OBJECT(menu_item), "activate", - (GtkSignalFunc) disposal_select_callback, - &radio_pressed[0]); - gtk_container_add(GTK_CONTAINER(menu), menu_item); - gtk_widget_show(menu_item); - menu_item = gtk_menu_item_new_with_label (_("Cumulative layers (combine)")); - gtk_signal_connect( GTK_OBJECT(menu_item), "activate", - (GtkSignalFunc) disposal_select_callback, - &radio_pressed[1]); - gtk_container_add(GTK_CONTAINER(menu), menu_item); - gtk_widget_show(menu_item); - menu_item = gtk_menu_item_new_with_label (_("One frame per layer (replace)")); - gtk_signal_connect( GTK_OBJECT(menu_item), "activate", - (GtkSignalFunc) disposal_select_callback, - &radio_pressed[2]); - gtk_container_add(GTK_CONTAINER(menu), menu_item); - gtk_widget_show(menu_item); - } - } - gtk_option_menu_set_menu (GTK_OPTION_MENU(disposal_option_menu), menu); - gtk_option_menu_set_history(GTK_OPTION_MENU(disposal_option_menu), - gsvals.default_dispose); - gtk_widget_show(disposal_option_menu); - gtk_box_pack_start(GTK_BOX(hbox), disposal_option_menu, TRUE, TRUE, 2); + _("I don't Care"), + (gpointer) DISPOSE_UNSPECIFIED, NULL, + _("Cumulative Layers (Combine)"), + (gpointer) DISPOSE_COMBINE, NULL, + _("One Frame per Layer (Replace)"), + (gpointer) DISPOSE_REPLACE, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (hbox), disposal_option_menu, FALSE, FALSE, 0); + gtk_widget_show (disposal_option_menu); gtk_widget_show (hbox); gtk_widget_show (vbox); @@ -1430,8 +1390,6 @@ save_dialog (gint32 image_ID) gtk_widget_show (frame); - - gtk_widget_show (dlg); gtk_main (); @@ -1508,16 +1466,16 @@ GetPixel (int x, * *****************************************************************************/ -static int Width, Height; -static int curx, cury; -static long CountDown; -static int Pass = 0; +static gint Width, Height; +static gint curx, cury; +static glong CountDown; +static gint Pass = 0; /* * Bump the 'curx' and 'cury' to point to the next pixel */ static void -BumpPixel () +BumpPixel (void) { /* * Bump the current X position @@ -2444,7 +2402,7 @@ char_out (int c) * Flush the packet to disk, and reset the accumulator */ static void -flush_char () +flush_char (void) { if (a_count > 0) { @@ -2462,18 +2420,10 @@ cropok_callback (GtkWidget *widget, gpointer data) { can_crop = TRUE; - gtk_main_quit (); -} -static void -cropcancel_callback (GtkWidget *widget, - gpointer data) -{ - can_crop = FALSE; - gtk_main_quit (); + gtk_widget_destroy (GTK_WIDGET (data)); } - /* Save interface functions */ static void @@ -2481,56 +2431,10 @@ save_ok_callback (GtkWidget *widget, gpointer data) { gsint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } -static void -save_cancel_callback (GtkWidget *widget, - gpointer data) -{ - gsint.run = FALSE; - gtk_widget_destroy (GTK_WIDGET (data)); -} - -static void -disposal_select_callback (GtkWidget *widget, - gpointer data) -{ - int* valptr; - - valptr = (int*) data; - - radio_pressed[0] = radio_pressed[1] = radio_pressed[2] = 0; - *valptr = 1; -} - -static void -save_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -static void -save_entry_callback (GtkWidget *widget, - gpointer data) -{ - gsvals.default_delay = atoi (gtk_entry_get_text (GTK_ENTRY (widget))); - - if (gsvals.default_delay < 0) - gsvals.default_delay = 0; - - if (gsvals.default_delay > 65000) - gsvals.default_delay = 65000; -} - static void comment_entry_callback (GtkWidget *widget, gpointer data) @@ -2538,27 +2442,25 @@ comment_entry_callback (GtkWidget *widget, gint ssize; gchar* str; - str = gtk_editable_get_chars(GTK_EDITABLE (widget),0,-1); - ssize = strlen(str); + str = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1); + ssize = strlen (str); /* Temporary kludge for overlength strings - just return */ - if (ssize>240) + if (ssize > 240) { g_message (_("GIF save: Your comment string is too long.\n")); - g_free(str); + g_free (str); return; } - if (globalcomment!=NULL) g_free(globalcomment); - globalcomment = g_malloc(ssize+1); + if (globalcomment != NULL) g_free (globalcomment); + globalcomment = g_malloc (ssize + 1); /*strcpy(globalcomment, gtk_entry_get_text (GTK_ENTRY (widget)));*/ - strcpy(globalcomment, str); - g_free(str); + strcpy (globalcomment, str); + g_free (str); comment_was_edited = TRUE; /*g_print ("COMMENT: %s\n",globalcomment);*/ } - -/* The End */ diff --git a/plug-ins/common/gifload.c b/plug-ins/common/gifload.c index d068de0151..fd9ea08c68 100644 --- a/plug-ins/common/gifload.c +++ b/plug-ins/common/gifload.c @@ -61,14 +61,17 @@ /* | provided "as is" without express or implied warranty. | */ /* +-------------------------------------------------------------------+ */ - #include "config.h" + #include #include #include #include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" + +#include + +#include + #include "libgimp/stdplugins-intl.h" @@ -85,19 +88,15 @@ the pupal-forms are. But facehuggers are ky00te. */ - - /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); - - +static gint32 load_image (gchar *filename); static guchar used_cmap[3][256]; @@ -110,22 +109,19 @@ Parasite* comment_parasite = NULL; #endif - - GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; - MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -137,8 +133,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); INIT_I18N(); @@ -154,26 +151,30 @@ query () nload_args, nload_return_vals, load_args, load_return_vals); - gimp_register_magic_load_handler ("file_gif_load", "gif", "", "0,string,GIF8"); + gimp_register_magic_load_handler ("file_gif_load", + "gif", + "", + "0,string,GIF8"); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - gint32 image_ID; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; run_mode = param[0].data.d_int32; - *nreturn_vals = 2; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_gif_load") == 0) { @@ -201,15 +202,21 @@ run (char *name, if (image_ID != -1) { - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + *nreturn_vals = 1; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } @@ -271,7 +278,7 @@ static gint32 ReadImage (FILE *, char *, int, int, CMap, int, int, int, int, static gint32 -load_image (char *filename) +load_image (gchar *filename) { FILE *fd; char * name_buf; diff --git a/plug-ins/common/gpb.c b/plug-ins/common/gpb.c index 948f9903eb..d6413ff560 100644 --- a/plug-ins/common/gpb.c +++ b/plug-ins/common/gpb.c @@ -119,7 +119,8 @@ query (void) { PARAM_INT32, "spacing", "Spacing of the brush" }, { PARAM_STRING, "description", "Short description of the brush" }, }; - static int ngpb_save_args = sizeof (gpb_save_args) / sizeof (gpb_save_args[0]); + static gint ngpb_save_args = (sizeof (gpb_save_args) / + sizeof (gpb_save_args[0])); static GParamDef gih_save_args[] = { @@ -131,7 +132,8 @@ query (void) { PARAM_INT32, "spacing", "Spacing of the brush" }, { PARAM_STRING, "description", "Short description of the brush pipe" }, }; - static int ngih_save_args = sizeof (gih_save_args) / sizeof (gih_save_args[0]); + static gint ngih_save_args = (sizeof (gih_save_args) / + sizeof (gih_save_args[0])); INIT_I18N(); @@ -147,7 +149,9 @@ query (void) ngpb_save_args, 0, gpb_save_args, NULL); - gimp_register_save_handler ("file_gpb_save", "gpb", ""); + gimp_register_save_handler ("file_gpb_save", + "gpb", + ""); gimp_install_procedure ("file_gih_save", _("saves images in GIMP pixmap brush pipe format"), @@ -161,30 +165,25 @@ query (void) ngih_save_args, 0, gih_save_args, NULL); - gimp_register_save_handler ("file_gih_save", "gih", ""); + gimp_register_save_handler ("file_gih_save", + "gih", + ""); } static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; + + argc = 1; + argv = g_new (gchar *, 1); + argv[0] = g_strdup ("gpb"); - argc = 1; - argv = g_new (gchar *, 1); - argv[0] = g_strdup ("gpb_save"); - gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } -static void -adjustment_callback (GtkWidget *widget, - gpointer data) -{ - *((gint *) data) = GTK_ADJUSTMENT (widget)->value; -} - static void size_adjustment_callback (GtkWidget *widget, gpointer data) @@ -278,9 +277,7 @@ static void common_save_dialog (GtkWidget *dlg, GtkWidget *table) { - GtkWidget *label; GtkObject *adjustment; - GtkWidget *box; GtkWidget *spinbutton; GtkWidget *entry; @@ -296,55 +293,27 @@ common_save_dialog (GtkWidget *dlg, /* * Spacing: __ */ - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, - GTK_TABLE (table)->ncols); - - label = gtk_label_new (_("Spacing (Percent):")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - spinbutton = gimp_spin_button_new (&adjustment, - info.spacing, 1, 1000, 1, 10, 10, - 1, 0); - - box = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0); - gtk_table_attach (GTK_TABLE (table), box, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + spinbutton = gimp_spin_button_new (&adjustment, info.spacing, + 1, 1000, 1, 10, 10, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Spacing (Percent):"), 1.0, 0.5, + spinbutton, TRUE); gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", - GTK_SIGNAL_FUNC (adjustment_callback), + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), &info.spacing); - gtk_widget_show (spinbutton); - gtk_widget_show (box); /* * Description: ___________ */ - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols); - - label = gtk_label_new (_("Description:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_usize (entry, 200, 0); gtk_entry_set_text (GTK_ENTRY (entry), info.description); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Description:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (entry_callback), info.description); - gtk_widget_show (entry); } static gint @@ -365,15 +334,14 @@ gpb_save_dialog (void) /* The main table */ table = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 4); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_container_set_border_width (GTK_CONTAINER (table), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); gtk_widget_show (table); common_save_dialog (dlg, table); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_widget_show (dlg); gtk_main (); @@ -422,8 +390,10 @@ gih_save_dialog (gint32 image_ID) NULL); /* The main table */ - table = gtk_table_new (2, 2, FALSE); - gtk_container_border_width (GTK_CONTAINER (table), 10); + table = gtk_table_new (8, 2, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 4); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_container_set_border_width (GTK_CONTAINER (table), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); gtk_widget_show (table); @@ -432,17 +402,6 @@ gih_save_dialog (gint32 image_ID) /* * Cell size: __ x __ pixels */ - - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols); - - label = gtk_label_new ( _("Cell Size:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - box = gtk_hbox_new (FALSE, 4); spinbutton = gimp_spin_button_new (&adjustment, @@ -486,42 +445,25 @@ gih_save_dialog (gint32 image_ID) label = gtk_label_new ( _("Pixels")); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); gtk_widget_show (label); - - gtk_table_attach (GTK_TABLE (table), box, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (box); + + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Cell Size:"), 1.0, 0.5, + box, FALSE); g_free (layer_ID); /* * Number of cells: ___ */ - - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols); - - label = gtk_label_new (_("Number of Cells:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - box = gtk_hbox_new (FALSE, 0); - gtk_table_attach (GTK_TABLE (table), box, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (box); - spinbutton = gimp_spin_button_new (&adjustment, gihparms.ncells, 1, 1000, 1, 10, 10, 1, 0); - gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Number of Cells:"), 1.0, 0.5, + spinbutton, TRUE); gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", - GTK_SIGNAL_FUNC (adjustment_callback), + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), &gihparms.ncells); - gtk_widget_show (spinbutton); if (gihparms.dim == 1) cellw_adjust.ncells = cellh_adjust.ncells = adjustment; @@ -531,16 +473,6 @@ gih_save_dialog (gint32 image_ID) /* * Display as: __ rows x __ cols */ - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols); - - label = gtk_label_new (_("Display as:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - box = gtk_hbox_new (FALSE, 0); g_snprintf (buffer, sizeof (buffer), "%2d", gihparms.rows); @@ -574,56 +506,26 @@ gih_save_dialog (gint32 image_ID) label = gtk_label_new (_(" (Height Mismatch!) ")); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); cellh_adjust.warning_label = label; - - gtk_table_attach (GTK_TABLE (table), box, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (box); + + gimp_table_attach_aligned (GTK_TABLE (table), 4, + _("Display as:"), 1.0, 0.5, + box, FALSE); /* * Dimension: ___ */ - - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols); - - label = gtk_label_new (_("Dimension:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - adjustment = gtk_adjustment_new (gihparms.dim, 1, 5, 1, 1, 1); - spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 1, 0); - gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinbutton), - GTK_SHADOW_NONE); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); - gtk_widget_set_usize (spinbutton, 75, 0); - box = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, FALSE, 0); - gtk_table_attach (GTK_TABLE (table), box, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + spinbutton = gimp_spin_button_new (&adjustment, gihparms.dim, + 1, 5, 1, 1, 1, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 5, + _("Dimension:"), 1.0, 0.5, + spinbutton, TRUE); gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", - (GtkSignalFunc) adjustment_callback, &gihparms.dim); - gtk_widget_show (spinbutton); - gtk_widget_show (box); + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &gihparms.dim); /* * Ranks: __ __ __ __ __ */ - - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols); - - label = gtk_label_new (_("Ranks:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - dimtable = gtk_table_new (1, PIXPIPE_MAXDIM, FALSE); gtk_table_set_col_spacings (GTK_TABLE (dimtable), 4); for (i = 0; i < PIXPIPE_MAXDIM; i++) @@ -638,7 +540,7 @@ gih_save_dialog (gint32 image_ID) 1, 0); gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", - GTK_SIGNAL_FUNC (adjustment_callback), + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), &gihparms.rank[i]); gtk_widget_show (spinbutton); if (i == 0) @@ -649,25 +551,13 @@ gih_save_dialog (gint32 image_ID) cellw_adjust.rank0 = cellh_adjust.rank0 = NULL; } } - gtk_table_attach (GTK_TABLE (table), dimtable, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (dimtable); + gimp_table_attach_aligned (GTK_TABLE (table), 6, + _("Ranks:"), 1.0, 0.5, + dimtable, FALSE); /* * Selection: ______ ______ ______ ______ ______ */ - - gtk_table_resize (GTK_TABLE (table), - GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols); - - label = gtk_label_new (_("Selection:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - cbitems = g_list_append (cbitems, "incremental"); cbitems = g_list_append (cbitems, "angular"); cbitems = g_list_append (cbitems, "random"); @@ -676,7 +566,7 @@ gih_save_dialog (gint32 image_ID) cbitems = g_list_append (cbitems, "xtilt"); cbitems = g_list_append (cbitems, "ytilt"); - box = gtk_hbox_new (FALSE, 4); + box = gtk_hbox_new (TRUE, 4); for (i = 0; i < PIXPIPE_MAXDIM; i++) { cb = gtk_combo_new (); @@ -694,14 +584,9 @@ gih_save_dialog (gint32 image_ID) &gihparms.selection[i]); gtk_widget_show (cb); } - - gtk_table_attach (GTK_TABLE (table), box, 1, 2, - GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows, - GTK_SHRINK, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (box); - - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gimp_table_attach_aligned (GTK_TABLE (table), 7, + _("Selection:"), 1.0, 0.5, + box, FALSE); gtk_widget_show (dlg); @@ -1028,22 +913,23 @@ run (char *name, GParam **return_vals) { static GParam values[1]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - Parasite *pipe_parasite; - gint32 image_ID; - gint32 orig_image_ID; - gint32 drawable_ID, *layer_ID; - gint nlayers, layer; - gchar *layer_name; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + Parasite *pipe_parasite; + gint32 image_ID; + gint32 orig_image_ID; + gint32 drawable_ID; + gint32 *layer_ID; + gint nlayers, layer; + gchar *layer_name; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; - *return_vals = values; + *return_vals = values; *nreturn_vals = 1; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (run_mode == RUN_INTERACTIVE) { @@ -1066,12 +952,12 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "GPB", - (CAN_HANDLE_RGB | CAN_HANDLE_ALPHA | + (CAN_HANDLE_RGB | + CAN_HANDLE_ALPHA | NEEDS_ALPHA )); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -1085,37 +971,38 @@ run (char *name, /* Possibly retrieve data */ gimp_get_data ("file_gpb_save", &info); if (!gpb_save_dialog ()) - goto finish_gpb; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* FIXME - need a real RUN_NONINTERACTIVE */ if (nparams != 7) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { info.spacing = param[5].data.d_int32; strncpy (info.description, param[6].data.d_string, MAXDESCLEN); info.description[MAXDESCLEN] = 0; } break; - + case RUN_WITH_LAST_VALS: gimp_get_data ("file_gpb_save", &info); break; } - - if (gpb_save_image (param[3].data.d_string, image_ID, drawable_ID)) + + if (status == STATUS_SUCCESS) { - gimp_set_data ("file_gpb_save", &info, sizeof (info)); - status = STATUS_SUCCESS; + if (gpb_save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + gimp_set_data ("file_gpb_save", &info, sizeof (info)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - status = STATUS_EXECUTION_ERROR; - - finish_gpb: - - if (export == EXPORT_EXPORT) - gimp_image_delete (image_ID); } else if (strcmp (name, "file_gih_save") == 0) { @@ -1129,12 +1016,13 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "GIH", - (CAN_HANDLE_RGB | CAN_HANDLE_ALPHA | - CAN_HANDLE_LAYERS | NEEDS_ALPHA)); + (CAN_HANDLE_RGB | + CAN_HANDLE_ALPHA | + CAN_HANDLE_LAYERS | + NEEDS_ALPHA)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -1149,13 +1037,13 @@ run (char *name, if (!gimp_drawable_has_alpha (layer_ID[layer])) { layer_name = gimp_layer_get_name (layer_ID[layer]); - g_message ( _("Layer %s doesn't have an alpha channel, skipped"), + g_message (_("Layer %s doesn't have an alpha channel, skipped"), layer_name); g_free (layer_name); } num_layers_with_alpha++; } - + IFDBG(2) g_message ("nlayers:%d num_layers_with_alpha:%d", nlayers, num_layers_with_alpha); switch (run_mode) @@ -1163,19 +1051,23 @@ run (char *name, case RUN_INTERACTIVE: /* Possibly retrieve data */ gimp_get_data ("file_gih_save", &info); - pipe_parasite = gimp_image_parasite_find (orig_image_ID, "gimp-brush-pipe-parameters"); + pipe_parasite = + gimp_image_parasite_find (orig_image_ID, + "gimp-brush-pipe-parameters"); pixpipeparams_init (&gihparms); if (pipe_parasite) pixpipeparams_parse (pipe_parasite->data, &gihparms); if (!gih_save_dialog (image_ID)) - goto finish_gih; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* FIXME - need a real RUN_NONINTERACTIVE */ if (nparams != 7) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { info.spacing = param[5].data.d_int32; strncpy (info.description, param[6].data.d_string, MAXDESCLEN); @@ -1185,27 +1077,31 @@ run (char *name, case RUN_WITH_LAST_VALS: gimp_get_data ("file_gih_save", &info); - pipe_parasite = gimp_image_parasite_find (orig_image_ID, "gimp-brush-pipe-parameters"); + pipe_parasite = + gimp_image_parasite_find (orig_image_ID, + "gimp-brush-pipe-parameters"); pixpipeparams_init (&gihparms); if (pipe_parasite) pixpipeparams_parse (pipe_parasite->data, &gihparms); break; } - - if (gih_save_image (param[3].data.d_string, - image_ID, orig_image_ID, drawable_ID)) + + if (status == STATUS_SUCCESS) { - gimp_set_data ("file_gih_save", &info, sizeof (info)); - status = STATUS_SUCCESS; + if (gih_save_image (param[3].data.d_string, + image_ID, orig_image_ID, drawable_ID)) + { + gimp_set_data ("file_gih_save", &info, sizeof (info)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - status = STATUS_EXECUTION_ERROR; - - finish_gih: - - if (export == EXPORT_EXPORT) - gimp_image_delete (image_ID); } + if (export == EXPORT_EXPORT) + gimp_image_delete (image_ID); + values[0].data.d_status = status; } diff --git a/plug-ins/common/gqbist.c b/plug-ins/common/gqbist.c index c7daaf4438..615a581b4c 100644 --- a/plug-ins/common/gqbist.c +++ b/plug-ins/common/gqbist.c @@ -46,13 +46,13 @@ #include #include #include -#include #include #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include +#include #include "libgimp/stdplugins-intl.h" @@ -70,11 +70,12 @@ typedef gfloat vreg[3]; -typedef struct _info { - int transformSequence [MAX_TRANSFORMS]; - int source [MAX_TRANSFORMS]; - int control [MAX_TRANSFORMS]; - int dest [MAX_TRANSFORMS]; +typedef struct _info +{ + gint transformSequence [MAX_TRANSFORMS]; + gint source [MAX_TRANSFORMS]; + gint control [MAX_TRANSFORMS]; + gint dest [MAX_TRANSFORMS]; } s_info; #define PROJECTION 0 @@ -89,20 +90,26 @@ typedef struct _info { /** prototypes **************************************************************/ -void query (void); -void run (char *name, int nparams, GParam *param, int *nreturn_vals, GParam **return_vals); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -void dialog_cancel (); -void dialog_new_variations (GtkWidget *widget, gpointer data); -void dialog_update_previews (GtkWidget *widget, gpointer data); -void dialog_select_preview (GtkWidget *widget, s_info *n_info); -int dialog_create (); +static gint dialog_create (void); +static void dialog_new_variations (GtkWidget *widget, + gpointer data); +static void dialog_update_previews (GtkWidget *widget, + gpointer data); +static void dialog_select_preview (GtkWidget *widget, + s_info *n_info); -s_info qbist_info; +static s_info qbist_info; /** qbist functions *********************************************************/ -void +static void create_info (s_info *info) { int k; @@ -116,7 +123,7 @@ create_info (s_info *info) info->dest[rand() % MAX_TRANSFORMS]=0; } -void +static void modify_info (s_info *o_info, s_info *n_info) { @@ -138,10 +145,10 @@ modify_info (s_info *o_info, /* * Optimizer */ -int used_trans_flag[MAX_TRANSFORMS]; -int used_reg_flag[NUM_REGISTERS]; +static gint used_trans_flag[MAX_TRANSFORMS]; +static gint used_reg_flag[NUM_REGISTERS]; -void +static void check_last_modified (s_info info, int p, int n) @@ -158,7 +165,7 @@ check_last_modified (s_info info, } } -void +static void optimize (s_info info) { int i; @@ -182,14 +189,15 @@ optimize (s_info info) check_last_modified(info, MAX_TRANSFORMS, 0); } -void qbist (s_info info, - gchar *buffer, - int xp, - int yp, - int num, - int width, - int height, - int bpp) +static void +qbist (s_info info, + gchar *buffer, + int xp, + int yp, + int num, + int width, + int height, + int bpp) { gushort gx; vreg reg [NUM_REGISTERS]; @@ -302,55 +310,48 @@ void qbist (s_info info, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run /* run_proc */ }; -/* Definition of parameters */ -GParamDef args[] = -{ - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image (unused)" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" } -}; - -GParamDef *return_vals = NULL; -int nargs = sizeof(args) / sizeof(args[0]); -int nreturn_vals = 0; - MAIN() -void +static void query (void) { + GParamDef args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image (unused)" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" } + }; + gint nargs = sizeof (args) / sizeof (args[0]); + INIT_I18N(); - gimp_install_procedure (PLUG_IN_NAME, - _("Create images based on a random genetic formula"), - _("This Plug-in is based on an article by Jörn Loviscach (appeared in c't 10/95, page 326). It generates modern art pictures from a random genetic formula."), - "Jörn Loviscach, Jens Ch. Restemeier", - "Jörn Loviscach, Jens Ch. Restemeier", - PLUG_IN_VERSION, - N_("/Filters/Render/Pattern/Qbist..."), - "RGB*", - PROC_PLUG_IN, - nargs, - nreturn_vals, - args, - return_vals); + gimp_install_procedure (PLUG_IN_NAME, + _("Create images based on a random genetic formula"), + _("This Plug-in is based on an article by Jörn Loviscach (appeared in c't 10/95, page 326). It generates modern art pictures from a random genetic formula."), + "Jörn Loviscach, Jens Ch. Restemeier", + "Jörn Loviscach, Jens Ch. Restemeier", + PLUG_IN_VERSION, + N_("/Filters/Render/Pattern/Qbist..."), + "RGB*", + PROC_PLUG_IN, + nargs, 0, + args, NULL); } -/* Return values */ -GParam values[1]; - -void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals) +static void +run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals) { + static GParam values[1]; gint sel_x1, sel_y1, sel_x2, sel_y2; gint img_height, img_width, img_bpp, img_has_alpha; @@ -458,26 +459,20 @@ void run (char *name, /** User interface ***********************************************************/ -GtkWidget *preview[9]; -s_info info[9]; -gint result; +static GtkWidget *preview[9]; +static s_info info[9]; +static gint result = FALSE; -void -dialog_cancel (GtkWidget *widget, - gpointer data) -{ - gtk_widget_destroy (GTK_WIDGET (data)); -} - -void dialog_ok (GtkWidget *widget, - gpointer data) +static void +dialog_ok (GtkWidget *widget, + gpointer data) { result = TRUE; gtk_widget_destroy (GTK_WIDGET (data)); } -void +static void dialog_new_variations (GtkWidget *widget, gpointer data) { @@ -487,7 +482,7 @@ dialog_new_variations (GtkWidget *widget, modify_info (&(info[0]), &(info[i])); } -void +static void dialog_update_previews (GtkWidget *widget, gpointer data) { @@ -508,7 +503,7 @@ dialog_update_previews (GtkWidget *widget, } } -void +static void dialog_select_preview (GtkWidget *widget, s_info *n_info) { @@ -525,8 +520,8 @@ dialog_select_preview (GtkWidget *widget, #define GETMACUSHORT(f) ((fgetc(f)<<8)+(fgetc(f))) #define PUTMACUSHORT(u, f) fprintf(f, "%c%c", HIBITE(u), LOBITE(u)); -int -load_data (char *name) +static gint +load_data (gchar *name) { int i; FILE *f; @@ -544,8 +539,8 @@ load_data (char *name) return 1; } -void -save_data (char *name) +static void +save_data (gchar *name) { int i=0; FILE *f; @@ -560,7 +555,7 @@ save_data (char *name) fclose (f); } -void +static void file_selection_save (GtkWidget *widget, GtkWidget *file_select) { @@ -568,7 +563,7 @@ file_selection_save (GtkWidget *widget, gtk_widget_destroy (file_select); } -void +static void file_selection_load (GtkWidget *widget, GtkWidget *file_select) { @@ -578,16 +573,9 @@ file_selection_load (GtkWidget *widget, dialog_update_previews (widget, NULL); } -void -file_selection_cancel (GtkWidget *widget, - GtkWidget *file_select) -{ - gtk_widget_destroy (file_select); -} - -void +static void dialog_load (GtkWidget *widget, - gpointer d) + gpointer data) { GtkWidget *file_select; @@ -597,18 +585,20 @@ dialog_load (GtkWidget *widget, "filters/gqbist.html"); gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_select)->ok_button), - "clicked", (GtkSignalFunc) file_selection_load, - (gpointer)file_select); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_select)->cancel_button), - "clicked", (GtkSignalFunc) file_selection_cancel, - (gpointer)file_select); + "clicked", + GTK_SIGNAL_FUNC (file_selection_load), + (gpointer) file_select); + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (file_select)->cancel_button), + "clicked", + GTK_SIGNAL_FUNC (gtk_widget_destroy), + GTK_OBJECT (file_select)); gtk_widget_show (file_select); } -void +static void dialog_save (GtkWidget *widget, - gpointer d) + gpointer data) { GtkWidget *file_select; @@ -618,20 +608,24 @@ dialog_save (GtkWidget *widget, gimp_help_connect_help_accel (file_select, gimp_plugin_help_func, "filters/gqbist.html"); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_select)->ok_button), - "clicked", (GtkSignalFunc) file_selection_save, - (gpointer)file_select); - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_select)->cancel_button), - "clicked", (GtkSignalFunc) file_selection_cancel, + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (file_select)->ok_button), + "clicked", + GTK_SIGNAL_FUNC (file_selection_save), (gpointer)file_select); + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (file_select)->cancel_button), + "clicked", + GTK_SIGNAL_FUNC (gtk_widget_destroy), + GTK_OBJECT (file_select)); gtk_widget_show (file_select); } -int +static gint dialog_create (void) { GtkWidget *dialog; + GtkWidget *vbox; + GtkWidget *bbox; GtkWidget *button; GtkWidget *table; @@ -667,12 +661,8 @@ dialog_create (void) _("OK"), dialog_ok, NULL, NULL, NULL, TRUE, FALSE, - _("Load"), dialog_load, - NULL, NULL, NULL, FALSE, FALSE, - _("Save"), dialog_save, - NULL, NULL, NULL, FALSE, FALSE, - _("Cancel"), dialog_cancel, - NULL, NULL, NULL, FALSE, TRUE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, NULL); @@ -680,12 +670,16 @@ dialog_create (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + vbox = gtk_vbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), vbox, + FALSE, FALSE, 0); + gtk_widget_show (vbox); + table = gtk_table_new (3, 3, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 5); gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), table, - TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); memcpy ((char *) &(info[0]), (char *) &qbist_info, sizeof (s_info)); @@ -693,12 +687,12 @@ dialog_create (void) for (i = 0; i < 9; i++) { - button = gtk_button_new(); + button = gtk_button_new (); gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) dialog_select_preview, + GTK_SIGNAL_FUNC (dialog_select_preview), (gpointer) &(info[(i+5)%9])); gtk_table_attach (GTK_TABLE (table), button, i%3, (i%3)+1, i/3, (i/3)+1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (button); preview[i] = gtk_preview_new (GTK_PREVIEW_COLOR); @@ -707,11 +701,29 @@ dialog_create (void) gtk_widget_show (preview[i]); } + bbox = gtk_hbutton_box_new (); + gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 0); + gtk_widget_show (bbox); + + button = gtk_button_new_with_label (_("Load")); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_container_add (GTK_CONTAINER (bbox), button); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (dialog_load), + NULL); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Save")); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_container_add (GTK_CONTAINER (bbox), button); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (dialog_save), + NULL); + gtk_widget_show (button); + dialog_update_previews (NULL, NULL); gtk_widget_show (dialog); - result = FALSE; - gtk_main (); gdk_flush (); diff --git a/plug-ins/common/gtm.c b/plug-ins/common/gtm.c index 405f5ccf93..126b582083 100644 --- a/plug-ins/common/gtm.c +++ b/plug-ins/common/gtm.c @@ -56,28 +56,30 @@ #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include #include "libgimp/stdplugins-intl.h" /* Typedefs */ -typedef struct { - char captiontxt[256]; - char cellcontent[256]; - char clwidth[256]; - char clheight[256]; - gint fulldoc; - gint caption; - gint border; - gint spantags; - gint tdcomp; - gint cellpadding; - gint cellspacing; +typedef struct +{ + gchar captiontxt[256]; + gchar cellcontent[256]; + gchar clwidth[256]; + gchar clheight[256]; + gint fulldoc; + gint caption; + gint border; + gint spantags; + gint tdcomp; + gint cellpadding; + gint cellspacing; } GTMValues; -typedef struct { +typedef struct +{ gint run; } GTMInterface; @@ -106,37 +108,42 @@ static GTMValues gtmvals = /* Declare some local functions */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint save_image (char *filename, - GDrawable *drawable); -static gint save_dialog (); -static gint color_comp (guchar *buffer, guchar *buf2); -static void gtm_entry_callback (GtkWidget *widget, gpointer data); -static void gtm_toggle_callback (GtkWidget *widget, gpointer data); -static void save_ok_callback (GtkWidget *widget, gpointer data); -static void gtm_caption_callback (GtkWidget *widget, gpointer data); -static void gtm_cellcontent_callback (GtkWidget *widget, gpointer data); -static void gtm_clwidth_callback (GtkWidget *widget, gpointer data); -static void gtm_clheight_callback (GtkWidget *widget, gpointer data); +static gint save_image (gchar *filename, + GDrawable *drawable); +static gint save_dialog (void); + +static gint color_comp (guchar *buffer, + guchar *buf2); +static void save_ok_callback (GtkWidget *widget, + gpointer data); +static void gtm_caption_callback (GtkWidget *widget, + gpointer data); +static void gtm_cellcontent_callback (GtkWidget *widget, + gpointer data); +static void gtm_clwidth_callback (GtkWidget *widget, + gpointer data); +static void gtm_clheight_callback (GtkWidget *widget, + gpointer data); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef save_args[] = { @@ -146,8 +153,7 @@ query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, }; - - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -163,17 +169,20 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_save_handler ("file_GTM_save", "html,htm", ""); + gimp_register_save_handler ("file_GTM_save", + "html,htm", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; + GStatusType status = STATUS_SUCCESS; GDrawable *drawable; INIT_I18N_UI(); @@ -181,24 +190,34 @@ run (char *name, drawable = gimp_drawable_get (param[2].data.d_int32); *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; gimp_get_data ("file_GTM_save", >mvals); - if (save_dialog ()) { - save_image (param[3].data.d_string, drawable); - values[0].data.d_status = STATUS_SUCCESS; - } + if (save_dialog ()) + { + if (save_image (param[3].data.d_string, drawable)) + { + gimp_set_data ("file_GTM_save", >mvals, sizeof (GTMValues)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } + else + { + status = STATUS_CANCEL; + } - gimp_set_data ("file_GTM_save", >mvals, sizeof (GTMValues)); + values[0].data.d_status = status; } static gint -save_image (char *filename, - GDrawable *drawable) +save_image (gchar *filename, + GDrawable *drawable) { int row,col, cols, rows, x, y; int colcount, colspan, rowspan; @@ -334,13 +353,15 @@ static gint save_dialog (void) { GtkWidget *dlg; + GtkWidget *main_vbox; GtkWidget *frame; + GtkWidget *vbox; GtkWidget *table; - GtkWidget *label; + GtkWidget *spinbutton; + GtkObject *adj; GtkWidget *entry; GtkWidget *toggle; gchar **argv; - gchar buffer[32]; gint argc; bint.run = FALSE; @@ -371,17 +392,25 @@ save_dialog (void) /* Initialize Tooltips */ gimp_help_init (); - /* HTML Page Options */ + main_vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_vbox, + TRUE, TRUE, 0); + /* HTML Page Options */ frame = gtk_frame_new (_("HTML Page Options")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_set_border_width (GTK_CONTAINER (frame), 10); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg) -> vbox), frame, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); toggle = gtk_check_button_new_with_label (_("Generate Full HTML Document")); - gtk_container_add (GTK_CONTAINER (frame), toggle); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (gtm_toggle_callback), + GTK_SIGNAL_FUNC (gimp_toggle_button_update), >mvals.fulldoc); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), gtmvals.fulldoc); gtk_widget_show (toggle); @@ -391,24 +420,25 @@ save_dialog (void) "the table html."), NULL); + gtk_widget_show (main_vbox); gtk_widget_show (frame); /* HTML Table Creation Options */ - frame = gtk_frame_new (_("Table Creation Options")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_set_border_width (GTK_CONTAINER (frame), 10); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg) -> vbox), frame, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - table = gtk_table_new (3, 2, FALSE); - gtk_container_border_width (GTK_CONTAINER (table), 10); + table = gtk_table_new (4, 2, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); toggle = gtk_check_button_new_with_label (_("Use Cellspan")); - gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 0, 1, GTK_FILL, 0, 5, 0); + gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 0, 1, GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (gtm_toggle_callback), - >mvals.spantags); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + >mvals.spantags); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), gtmvals.spantags); gtk_widget_show (toggle); gimp_help_set_help_data (toggle, @@ -418,9 +448,9 @@ save_dialog (void) NULL); toggle = gtk_check_button_new_with_label (_("Compress TD tags")); - gtk_table_attach (GTK_TABLE (table), toggle, 1, 2, 0, 1, GTK_FILL, 0, 5, 0); + gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 1, 2, GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (gtm_toggle_callback), + GTK_SIGNAL_FUNC (gimp_toggle_button_update), >mvals.tdcomp); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), gtmvals.tdcomp); gtk_widget_show (toggle); @@ -432,10 +462,10 @@ save_dialog (void) NULL); toggle = gtk_check_button_new_with_label (_("Caption")); - gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 1, 2, GTK_FILL, 0, 5, 0); + gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 2, 3, GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (gtm_toggle_callback), - >mvals.caption); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + >mvals.caption); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), gtmvals.caption); gtk_widget_show (toggle); gimp_help_set_help_data (toggle, @@ -444,8 +474,9 @@ save_dialog (void) NULL); entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, GTK_FILL, 0, 5, 0); - gtk_widget_set_usize (entry, 100, 0); + gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3, + GTK_FILL | GTK_EXPAND, 0, 0, 0); + gtk_widget_set_usize (entry, 200, 0); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (gtm_caption_callback), NULL); @@ -453,13 +484,14 @@ save_dialog (void) gtk_widget_show (entry); gimp_help_set_help_data (entry, _("The text for the table caption."), NULL); - label = gtk_label_new (_("Cell Content")); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, 0, 5, 0); - gtk_widget_show (label); + gtk_object_set_data (GTK_OBJECT (toggle), "set_sensitive", entry); + gtk_widget_set_sensitive (entry, gtmvals.caption); entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3, GTK_FILL, 0, 5, 0); - gtk_widget_set_usize (entry, 100, 0); + gtk_widget_set_usize (entry, 200, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Cell Content:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (gtm_cellcontent_callback), NULL); @@ -471,111 +503,81 @@ save_dialog (void) gtk_widget_show (frame); /* HTML Table Options */ - - frame = gtk_frame_new ( _("Table Options")); + frame = gtk_frame_new (_("Table Options")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_set_border_width (GTK_CONTAINER (frame), 10); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg) -> vbox), frame, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); - table = gtk_table_new (5, 4, FALSE); - gtk_container_border_width (GTK_CONTAINER (table), 10); + table = gtk_table_new (5, 2, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - label = gtk_label_new (_("Border")); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 5, 0); - gtk_widget_show (label); - - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, 35, 0); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - GTK_SIGNAL_FUNC (gtm_entry_callback), + spinbutton = gimp_spin_button_new (&adj, gtmvals.border, + 0, 1000, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Border:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), >mvals.border); - g_snprintf (buffer, sizeof (buffer), "%d", gtmvals.border); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_widget_show (entry); - gimp_help_set_help_data (entry, - _("The number of pixels in the table border. " - "Can only be a number."), + gimp_help_set_help_data (spinbutton, + _("The number of pixels in the table border."), NULL); - label = gtk_label_new (_("Width")); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, 0, 5, 0); - gtk_widget_show (label); - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, 35, 0); + gtk_widget_set_usize (entry, 60, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Width:"), 1.0, 0.5, + entry, TRUE); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (gtm_clwidth_callback), NULL); gtk_entry_set_text (GTK_ENTRY (entry), gtmvals.clwidth); - gtk_widget_show (entry); gimp_help_set_help_data (entry, _("The width for each table cell. " "Can be a number or a percent."), NULL); - label = gtk_label_new (_("Height")); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, 0, 5, 0); - gtk_widget_show (label); - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, 35, 0); + gtk_widget_set_usize (entry, 60, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Height:"), 1.0, 0.5, + entry, TRUE); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (gtm_clheight_callback), NULL); gtk_entry_set_text (GTK_ENTRY (entry), gtmvals.clheight); - gtk_widget_show (entry); gimp_help_set_help_data (entry, _("The height for each table cell. " "Can be a number or a percent."), NULL); - label = gtk_label_new (_("Cell-Padding")); - gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1, GTK_FILL, 0, 5, 0); - gtk_widget_show (label); - - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, 35, 0); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - GTK_SIGNAL_FUNC (gtm_entry_callback), + spinbutton = gimp_spin_button_new (&adj, gtmvals.cellpadding, + 0, 1000, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Cell-Padding:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), >mvals.cellpadding); - g_snprintf (buffer, sizeof (buffer), "%d", gtmvals.cellpadding); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_widget_show (entry); - gimp_help_set_help_data (entry, - _("The amount of cellpadding. " - "Can only be a number."), - NULL); + gimp_help_set_help_data (spinbutton, + _("The amount of cellpadding."), NULL); - label = gtk_label_new (_("Cell-Spacing")); - gtk_table_attach (GTK_TABLE (table), label, 2, 3, 1, 2, GTK_FILL, 0, 5, 0); - gtk_widget_show (label); - - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, 35, 0); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - GTK_SIGNAL_FUNC (gtm_entry_callback), + spinbutton = gimp_spin_button_new (&adj, gtmvals.cellspacing, + 0, 1000, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 4, + _("Cell-Spacing:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), >mvals.cellspacing); - g_snprintf (buffer, sizeof (buffer), "%d", gtmvals.cellspacing); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_widget_show (entry); - gimp_help_set_help_data (entry, - _("The amount of cellspacing. " - "Can only be a number."), - NULL); + gimp_help_set_help_data (spinbutton, + _("The amount of cellspacing."), NULL); - gtk_widget_show (frame); gtk_widget_show (table); + gtk_widget_show (frame); + gtk_widget_show (dlg); gtk_main (); @@ -596,35 +598,12 @@ color_comp (guchar *buffer, /* Save interface functions */ -static void -gtm_toggle_callback (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -static void -gtm_entry_callback (GtkWidget *widget, - gpointer data) -{ - gint *text_val; - - text_val = (gint*)data; - *text_val = atoi (gtk_entry_get_text (GTK_ENTRY (widget))); -} - static void save_ok_callback (GtkWidget *widget, gpointer data) { bint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } diff --git a/plug-ins/common/gz.c b/plug-ins/common/gz.c index 9367ecf0e1..7150f9ff02 100644 --- a/plug-ins/common/gz.c +++ b/plug-ins/common/gz.c @@ -88,10 +88,11 @@ #include #endif -#include "config.h" -#include "libgimp/gimp.h" +#include + #include "libgimp/stdplugins-intl.h" + /* Author 1: Josh MacDonald (url.c) */ /* Author 2: Daniel Risacher (gz.c) */ @@ -100,34 +101,37 @@ * that metric, I figure this plug-in is worth about $10,000 USD */ /* But you got it free. Magic of Gnu. */ -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (char *filename, gint32 run_mode); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID, - gint32 run_mode); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -static int valid_file (char* filename) ; -static char* find_extension (char* filename); +static gint32 load_image (gchar *filename, + gint32 run_mode, + GStatusType *status /* return value */); +static GStatusType save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID, + gint32 run_mode); + +static gboolean valid_file (gchar *filename); +static gchar * find_extension (gchar *filename); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -135,14 +139,13 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -152,7 +155,7 @@ query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -179,50 +182,50 @@ query () PROC_PLUG_IN, nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_gz_load", "xcf.gz,gz,xcfgz", - "", "0,string,\037\213"); - gimp_register_save_handler ("file_gz_save", "xcf.gz,gz,xcfgz", ""); + gimp_register_magic_load_handler ("file_gz_load", + "xcf.gz,gz,xcfgz", + "", + "0,string,\037\213"); + gimp_register_save_handler ("file_gz_save", + "xcf.gz,gz,xcfgz", + ""); } - static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; run_mode = param[0].data.d_int32; INIT_I18N(); *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_gz_load") == 0) { image_ID = load_image (param[1].data.d_string, - param[0].data.d_int32); - if (image_ID != -1) + param[0].data.d_int32, + &status); + + if (image_ID != -1 && + status == STATUS_SUCCESS) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } } else if (strcmp (name, "file_gz_save") == 0) { @@ -234,7 +237,7 @@ run (char *name, /* Make sure all the arguments are there! */ if (nparams != 4) status = STATUS_CALLING_ERROR; - + break; case RUN_WITH_LAST_VALS: break; @@ -242,70 +245,76 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - param[1].data.d_int32, - param[2].data.d_int32, - param[0].data.d_int32 )) + if (status == STATUS_SUCCESS) { - values[0].data.d_status = STATUS_SUCCESS; - } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = save_image (param[3].data.d_string, + param[1].data.d_int32, + param[2].data.d_int32, + param[0].data.d_int32); + } } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } #ifdef __EMX__ -static int spawn_gzip(char *filename, char* tmpname, char *parms, int *pid) +static gint +spawn_gzip (gchar *filename, + gchar *tmpname, + gchar *parms, + gint *pid) { FILE *f; - int tfd; + gint tfd; - if (!(f = fopen(filename,"w"))){ - g_message("gz: fopen failed: %s\n", g_strerror(errno)); - return -1; - } + if (!(f = fopen (filename,"w"))) + { + g_message ("gz: fopen failed: %s\n", g_strerror (errno)); + return -1; + } /* save fileno(stdout) */ - tfd = dup(fileno(stdout)); + tfd = dup (fileno (stdout)); /* make stdout for this process be the output file */ - if (dup2(fileno(f),fileno(stdout)) == -1) + if (dup2 (fileno (f), fileno (stdout)) == -1) { - g_message ("gz: dup2 failed: %s\n", g_strerror(errno)); - close(tfd); + g_message ("gz: dup2 failed: %s\n", g_strerror (errno)); + close (tfd); return -1; } - fcntl(tfd, F_SETFD, FD_CLOEXEC); + fcntl (tfd, F_SETFD, FD_CLOEXEC); *pid = spawnlp (P_NOWAIT, "gzip", "gzip", parms, tmpname, NULL); - fclose(f); + fclose (f); /* restore fileno(stdout) */ - dup2(tfd,fileno(stdout)); - close(tfd); + dup2 (tfd, fileno (stdout)); + close (tfd); if (*pid == -1) { - g_message ("gz: spawn failed: %s\n", g_strerror(errno)); + g_message ("gz: spawn failed: %s\n", g_strerror (errno)); return -1; } - return 0; + return 0; } #endif -static gint -save_image (char *filename, +static GStatusType +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID, gint32 run_mode) { GParam* params; gint retvals; - char* ext; - char* tmpname; + gchar *ext; + gchar *tmpname; #ifndef G_OS_WIN32 - FILE* f; - int pid; - int status; + FILE *f; + gint pid; + gint status; #else SECURITY_ATTRIBUTES secattr; HANDLE f; @@ -314,11 +323,11 @@ save_image (char *filename, gchar *cmdline; #endif - ext = find_extension(filename); - if (0 == *ext) { - g_message( _("gz: no sensible extension, saving as gzip'd xcf\n")); - ext = ".xcf"; - } + if (NULL == (ext = find_extension (filename))) + { + g_message (_("gz: no sensible extension, saving as gzip'd xcf\n")); + ext = ".xcf"; + } /* get a temp name with the right extension and save into it. */ @@ -326,6 +335,7 @@ save_image (char *filename, &retvals, PARAM_STRING, ext + 1, PARAM_END); + tmpname = g_strdup (params[1].data.d_string); gimp_destroy_params (params, retvals); @@ -338,11 +348,13 @@ save_image (char *filename, PARAM_STRING, tmpname, PARAM_END); - if (params[0].data.d_status == FALSE || !valid_file(tmpname)) { - unlink (tmpname); - g_free (tmpname); - return -1; - } + if (!valid_file (tmpname) || + params[0].data.d_status != STATUS_SUCCESS) + { + unlink (tmpname); + g_free (tmpname); + return params[0].data.d_status; + } /* if (! file_save(image_ID, tmpname, tmpname)) { */ /* unlink (tmpname); */ @@ -350,48 +362,47 @@ save_image (char *filename, /* } */ #ifndef G_OS_WIN32 - #ifndef __EMX__ - /* fork off a gzip process */ - if ((pid = fork()) < 0) + if ((pid = fork ()) < 0) { - g_message ("gz: fork failed: %s\n", g_strerror(errno)); + g_message ("gz: fork failed: %s\n", g_strerror (errno)); g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } else if (pid == 0) { - if (!(f = fopen(filename,"w"))) { - g_message("gz: fopen failed: %s\n", g_strerror(errno)); - g_free (tmpname); - _exit(127); - } + if (!(f = fopen (filename, "w"))) + { + g_message ("gz: fopen failed: %s\n", g_strerror (errno)); + g_free (tmpname); + _exit (127); + } /* make stdout for this process be the output file */ - if (-1 == dup2(fileno(f),fileno(stdout))) - g_message ("gz: dup2 failed: %s\n", g_strerror(errno)); + if (-1 == dup2 (fileno (f), fileno (stdout))) + g_message ("gz: dup2 failed: %s\n", g_strerror (errno)); /* and gzip into it */ execlp ("gzip", "gzip", "-cf", tmpname, NULL); - g_message ("gz: exec failed: gzip: %s\n", g_strerror(errno)); + g_message ("gz: exec failed: gzip: %s\n", g_strerror (errno)); g_free (tmpname); _exit(127); } else -#else /* __EMX__ */ - if (spawn_gzip(filename, tmpname, "-cf", &pid) == -1) +#else /* __EMX__ */ + if (spawn_gzip (filename, tmpname, "-cf", &pid) == -1) { g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } #endif { waitpid (pid, &status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (status) || + WEXITSTATUS (status) != 0) { g_message ("gz: gzip exited abnormally on file %s\n", tmpname); g_free (tmpname); @@ -402,7 +413,7 @@ save_image (char *filename, secattr.nLength = sizeof (SECURITY_ATTRIBUTES); secattr.lpSecurityDescriptor = NULL; secattr.bInheritHandle = TRUE; - + if ((f = CreateFile (filename, GENERIC_WRITE, FILE_SHARE_READ, &secattr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) @@ -438,25 +449,26 @@ save_image (char *filename, CloseHandle (f); CloseHandle (processinfo.hThread); WaitForSingleObject (processinfo.hProcess, INFINITE); - #endif /* G_OS_WIN32 */ unlink (tmpname); g_free (tmpname); - return TRUE; + return STATUS_SUCCESS; } static gint32 -load_image (char *filename, gint32 run_mode) +load_image (gchar *filename, + gint32 run_mode, + GStatusType *status /* return value */) { GParam* params; gint retvals; - char* ext; - char* tmpname; + gchar *ext; + gchar *tmpname; #ifndef G_OS_WIN32 - int pid; - int status; + gint pid; + gint process_status; #else SECURITY_ATTRIBUTES secattr; HANDLE f; @@ -465,10 +477,10 @@ load_image (char *filename, gint32 run_mode) gchar *cmdline; #endif - ext = find_extension(filename); - if (0 == *ext) { - g_message( _("gz: no sensible extension, attempting to load with file magic\n")); - } + if (NULL == (ext = find_extension (filename))) + { + g_message (_("gz: no sensible extension, attempting to load with file magic\n")); + } /* find a temp name */ params = gimp_run_procedure ("gimp_temp_name", @@ -480,54 +492,56 @@ load_image (char *filename, gint32 run_mode) gimp_destroy_params (params, retvals); #ifndef G_OS_WIN32 - #ifndef __EMX__ - /* fork off a g(un)zip and wait for it */ - if ((pid = fork()) < 0) + if ((pid = fork ()) < 0) { - g_message ("gz: fork failed: %s\n", g_strerror(errno)); + g_message ("gz: fork failed: %s\n", g_strerror (errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } else if (pid == 0) /* child process */ { - FILE* f; - if (!(f = fopen(tmpname,"w"))){ - g_message("gz: fopen failed: %s\n", g_strerror(errno)); - g_free (tmpname); - _exit(127); - } + FILE *f; + if (!(f = fopen (tmpname, "w"))) + { + g_message ("gz: fopen failed: %s\n", g_strerror (errno)); + g_free (tmpname); + _exit(127); + } /* make stdout for this child process be the temp file */ - if (-1 == dup2(fileno(f),fileno(stdout))) + if (-1 == dup2 (fileno (f), fileno (stdout))) { g_free (tmpname); - g_message ("gz: dup2 failed: %s\n", g_strerror(errno)); + g_message ("gz: dup2 failed: %s\n", g_strerror (errno)); } - + /* and unzip into it */ execlp ("gzip", "gzip", "-cfd", filename, NULL); - g_message ("gz: exec failed: gunzip: %s\n", g_strerror(errno)); + g_message ("gz: exec failed: gunzip: %s\n", g_strerror (errno)); g_free (tmpname); _exit(127); } else /* parent process */ #else /* __EMX__ */ - if (spawn_gzip(tmpname, filename, "-cfd", &pid) == -1) + if (spawn_gzip (tmpname, filename, "-cfd", &pid) == -1) { g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } #endif { - waitpid (pid, &status, 0); + waitpid (pid, &process_status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (process_status) || + WEXITSTATUS (process_status) != 0) { g_message ("gz: gzip exited abnormally on file %s\n", filename); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } } @@ -535,7 +549,7 @@ load_image (char *filename, gint32 run_mode) secattr.nLength = sizeof (SECURITY_ATTRIBUTES); secattr.lpSecurityDescriptor = NULL; secattr.bInheritHandle = TRUE; - + if ((f = CreateFile (tmpname, GENERIC_WRITE, FILE_SHARE_READ, &secattr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) @@ -571,7 +585,6 @@ load_image (char *filename, gint32 run_mode) CloseHandle (f); CloseHandle (processinfo.hThread); WaitForSingleObject (processinfo.hProcess, INFINITE); - #endif /* G_OS_WIN32 */ /* now that we un-gziped it, load the temp file */ @@ -585,8 +598,12 @@ load_image (char *filename, gint32 run_mode) unlink (tmpname); g_free (tmpname); - if (params[0].data.d_status == FALSE) - return -1; + *status = params[0].data.d_status; + + if (params[0].data.d_status != STATUS_SUCCESS) + { + return -1; + } else { gimp_image_set_filename (params[1].data.d_int32, filename); @@ -594,46 +611,52 @@ load_image (char *filename, gint32 run_mode) } } - -static int valid_file (char* filename) +static gboolean +valid_file (gchar *filename) { - int stat_res; + gint stat_res; struct stat buf; stat_res = stat(filename, &buf); if ((0 == stat_res) && (buf.st_size > 0)) - return 1; + return TRUE; else - return 0; + return FALSE; } -static char* find_extension (char* filename) +static gchar * +find_extension (gchar *filename) { - char* filename_copy; - char* ext; + gchar *filename_copy; + gchar *ext; /* we never free this copy - aren't we evil! */ - filename_copy = malloc(strlen(filename)+1); - strcpy(filename_copy, filename); + filename_copy = g_malloc (strlen (filename) + 1); + strcpy (filename_copy, filename); /* find the extension, boy! */ ext = strrchr (filename_copy, '.'); - while (1) { - if (!ext || ext[1] == 0 || strchr(ext, '/')) - { - return ""; - } - if (0 == strcmp(ext, ".xcfgz")) { - return ".xcf"; /* we've found it */ + while (1) + { + if (!ext || ext[1] == 0 || strchr (ext, '/')) + { + return NULL; + } + if (0 == strcmp (ext, ".xcfgz")) + { + return ".xcf"; /* we've found it */ + } + if (0 != strcmp (ext,".gz")) + { + return ext; + } + else + { + /* we found ".gz" so strip it, loop back, and look again */ + *ext = 0; + ext = strrchr (filename_copy, '.'); + } } - if (0 != strcmp(ext,".gz")) { - return ext; - } else { - /* we found ".gz" so strip it, loop back, and look again */ - *ext = 0; - ext = strrchr (filename_copy, '.'); - } - } } diff --git a/plug-ins/common/header.c b/plug-ins/common/header.c index a4d246df6c..a4f47a8ed3 100644 --- a/plug-ins/common/header.c +++ b/plug-ins/common/header.c @@ -1,39 +1,61 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * 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; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + #include #include #include -#include "config.h" -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" + +#include + +#include +#include + #include "libgimp/stdplugins-intl.h" /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); static void init_gtk (void); -static int save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef save_args[] = { @@ -43,7 +65,7 @@ query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -59,32 +81,34 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_save_handler ("file_header_save", "h", ""); + gimp_register_save_handler ("file_header_save", + "h", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_header_save") == 0) { - *nreturn_vals = 1; image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; @@ -93,13 +117,14 @@ run (char *name, { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: - INIT_I18N_UI(); + INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "Header", - (CAN_HANDLE_RGB | CAN_HANDLE_INDEXED)); + (CAN_HANDLE_RGB | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -107,32 +132,38 @@ run (char *name, break; } - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) - values[0].data.d_status = STATUS_SUCCESS; - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + if (! save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + status = STATUS_EXECUTION_ERROR; + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static void -init_gtk () +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("header"); - + gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } static int -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) { @@ -140,22 +171,23 @@ save_image (char *filename, GDrawable *drawable; GDrawableType drawable_type; FILE *fp; - int x, y, b, c; + gint x, y, b, c; gchar *backslash = "\\\\"; gchar *quote = "\\\""; gchar *newline = "\"\n\t\""; gchar buf[4]; guchar *d = NULL; guchar *data; - unsigned char *cmap; - int colors; + guchar *cmap; + gint colors; if ((fp = fopen (filename, "w")) == NULL) return FALSE; drawable = gimp_drawable_get (drawable_ID); drawable_type = gimp_drawable_type (drawable_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, FALSE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, drawable->width, drawable->height, FALSE, FALSE); fprintf (fp, "/* GIMP header image file format (%s): %s */\n\n", RGB_IMAGE == drawable_type ? "RGB" : "INDEXED", filename); diff --git a/plug-ins/common/hrz.c b/plug-ins/common/hrz.c index 1f46f12792..36be90f4cd 100644 --- a/plug-ins/common/hrz.c +++ b/plug-ins/common/hrz.c @@ -61,15 +61,14 @@ #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include #include "libgimp/stdplugins-intl.h" /* Declare local data types */ - typedef struct { gint run; /* run */ @@ -79,29 +78,25 @@ typedef struct /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID); +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); -static void init_gtk (void); -static gint save_dialog (void); - -static void save_ok_callback (GtkWidget *widget, - gpointer data); +static void init_gtk (void); /* -static void save_toggle_update (GtkWidget *widget, - gpointer data); +static gint save_dialog (void); +static void save_ok_callback (GtkWidget *widget, + gpointer data); */ - #define hrzscanner_eof(s) ((s)->eof) -#define hrzscanner_fp(s) ((s)->fp) +#define hrzscanner_fp(s) ((s)->fp) /* Checks for a fatal error */ #define CHECK_FOR_ERROR(predicate, jmpbuf, errmsg) \ @@ -110,22 +105,24 @@ static void save_toggle_update (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; +/* static HRZSaveInterface psint = { - FALSE /* run */ + FALSE / * run * / }; +*/ MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -137,8 +134,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -148,7 +146,7 @@ query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -176,30 +174,35 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_hrz_load", "hrz", "", "0,size,184320"); - gimp_register_save_handler ("file_hrz_save", "hrz", ""); + gimp_register_magic_load_handler ("file_hrz_load", + "hrz", + "", + "0,size,184320"); + gimp_register_save_handler ("file_hrz_save", + "hrz", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_hrz_load") == 0) { @@ -209,13 +212,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_hrz_save") == 0) @@ -231,10 +233,11 @@ run (char *name, INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "HRZ", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -246,16 +249,18 @@ run (char *name, switch (run_mode) { case RUN_INTERACTIVE: - /* First acquire information with a dialog */ + /* Save dialog has no options (yet???) if (! save_dialog ()) - return; + status = STATUS_CANCEL; + */ break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 4) status = STATUS_CALLING_ERROR; + break; case RUN_WITH_LAST_VALS: break; @@ -264,17 +269,23 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + if (status == STATUS_SUCCESS) { - values[0].data.d_status = STATUS_SUCCESS; + if (! save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } /************ load HRZ image row *********************/ @@ -283,8 +294,8 @@ do_hrz_load (void *mapped, GPixelRgn *pixel_rgn) { guchar *data, *d; - int x, y; - int start, end, scanlines; + gint x, y; + gint start, end, scanlines; data = g_malloc (gimp_tile_height () * 256 * 3); @@ -296,10 +307,14 @@ do_hrz_load (void *mapped, scanlines = end - start; d = data; - memcpy(d, ((unsigned char *) mapped)+256*3*y, 256*3*scanlines); /* this is gross */ + memcpy (d, ((guchar *) mapped) + 256 * 3 * y, + 256 * 3 * scanlines); /* this is gross */ + /* scale 0..63 into 0..255 properly */ - for (x=0; x<256*3*scanlines; x++) d[x] = (d[x]>>4) | (d[x]<<2); - d += 256*3*y; + for (x = 0; x < 256 * 3 * scanlines; x++) + d[x] = (d[x]>>4) | (d[x]<<2); + + d += 256 * 3 * y; gimp_progress_update ((double) y / 240.0); gimp_pixel_rgn_set_rect (pixel_rgn, data, 0, y, 256, scanlines); @@ -311,14 +326,14 @@ do_hrz_load (void *mapped, /********************* Load HRZ image **********************/ static gint32 -load_image (char *filename) +load_image (gchar *filename) { GPixelRgn pixel_rgn; gint32 image_ID; gint32 layer_ID; GDrawable *drawable; - int filedes; - char *temp; + gint filedes; + gchar *temp; void *mapped; /* memory mapped file data */ struct stat statbuf; /* must check file size */ @@ -327,7 +342,7 @@ load_image (char *filename) g_free (temp); /* open the file */ - filedes = open(filename, O_RDONLY | _O_BINARY); + filedes = open (filename, O_RDONLY | _O_BINARY); if (filedes == -1) { @@ -336,24 +351,24 @@ load_image (char *filename) return -1; } /* stat the file to see if it is the right size */ - fstat(filedes, &statbuf); - if(statbuf.st_size != 256*240*3) + fstat (filedes, &statbuf); + if (statbuf.st_size != 256*240*3) { - fprintf(stderr, "hrz filter: file is not HRZ type\n"); + g_message ("hrz: file is not HRZ type"); return -1; } #ifdef HAVE_MMAP mapped = mmap(NULL, 256*240*3, PROT_READ, MAP_PRIVATE, filedes, 0); - if(mapped == (void *)(-1)) + if (mapped == (void *)(-1)) { - fprintf(stderr, "hrz filter: could not map file\n"); + g_message ("hrz: could not map file"); return -1; } #else mapped = g_malloc(256*240*3); - if (read(filedes, mapped, 256*240*3) != 256*240*3) + if (read (filedes, mapped, 256*240*3) != 256*240*3) { - fprintf(stderr, "hrz filter: file read error\n"); + g_message ("hrz: file read error"); return -1; } #endif @@ -369,16 +384,16 @@ load_image (char *filename) gimp_image_add_layer (image_ID, layer_ID, 0); drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, drawable->width, drawable->height, TRUE, FALSE); - - do_hrz_load(mapped, &pixel_rgn); + do_hrz_load (mapped, &pixel_rgn); /* close the file */ #ifdef HAVE_MMAP - munmap(mapped, 256*240*3); + munmap (mapped, 256*240*3); #else - g_free(mapped); + g_free (mapped); #endif /* Tell the GIMP to display the image. @@ -388,37 +403,37 @@ load_image (char *filename) return image_ID; } - /************** Writes out RGB raw rows ************/ static void -saverow (FILE *fp, unsigned char *data) +saverow (FILE *fp, + guchar *data) { - int loop = 256*3; - unsigned char *walk = data; - while(loop--) + gint loop = 256*3; + guchar *walk = data; + while (loop--) { *walk = (*walk >> 2); walk++; } - fwrite(data, 1, 256*3, fp); + fwrite (data, 1, 256 * 3, fp); } /********************* save image *********************/ static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) { GPixelRgn pixel_rgn; GDrawable *drawable; GDrawableType drawable_type; - unsigned char *data; - unsigned char *d; /* FIX */ - unsigned char *rowbuf; - char *temp; - int np = 3; - int xres, yres; - int ypos, yend; + guchar *data; + guchar *d; /* FIX */ + guchar *rowbuf; + gchar *temp; + gint np = 3; + gint xres, yres; + gint ypos, yend; FILE *fp; /* initialize */ @@ -427,7 +442,8 @@ save_image (char *filename, drawable = gimp_drawable_get (drawable_ID); drawable_type = gimp_drawable_type (drawable_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, FALSE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, drawable->width, drawable->height, FALSE, FALSE); /* Make sure we're not saving an image with an alpha channel */ if (gimp_drawable_has_alpha (drawable_ID)) @@ -437,11 +453,11 @@ save_image (char *filename, } /* open the file */ - fp = fopen(filename, "wb"); + fp = fopen (filename, "wb"); if (fp == NULL) { /* Ought to pass errno back... */ - fprintf (stderr, "hrz: can't open \"%s\"\n", filename); + g_message ("hrz: can't open \"%s\"\n", filename); return FALSE; } @@ -450,12 +466,12 @@ save_image (char *filename, if ((xres != 256) || (yres != 240)) { - fprintf (stderr, "hrz: Image must be 256x240 for HRZ format.\n"); + g_message ("hrz: Image must be 256x240 for HRZ format."); return FALSE; } if (drawable_type == INDEXED_IMAGE) { - fprintf (stderr, "hrz: Image must be RGB for HRZ format.\n"); + g_message ("hrz: Image must be RGB or GRAY for HRZ format."); return FALSE; } @@ -463,11 +479,11 @@ save_image (char *filename, gimp_progress_init (temp); g_free (temp); - /* allocate a buffer for retrieving information from the pixel region */ - data = (unsigned char *) g_malloc (gimp_tile_height () * drawable->width * drawable->bpp); + data = (guchar *) g_malloc (gimp_tile_height () * drawable->width * + drawable->bpp); - rowbuf = g_malloc(256*3); + rowbuf = g_malloc (256 * 3); /* Write the body out */ for (ypos = 0; ypos < yres; ypos++) @@ -476,22 +492,23 @@ save_image (char *filename, { yend = ypos + gimp_tile_height (); yend = MIN (yend, yres); - gimp_pixel_rgn_get_rect (&pixel_rgn, data, 0, ypos, xres, (yend - ypos)); + gimp_pixel_rgn_get_rect (&pixel_rgn, data, + 0, ypos, xres, (yend - ypos)); d = data; } - saverow(fp, d); - d += xres*np; + saverow (fp, d); + d += xres * np; if (!(ypos & 0x0f)) - gimp_progress_update( (double)ypos / 240.0 ); + gimp_progress_update ((double)ypos / 240.0 ); } /* close the file */ fclose (fp); - g_free(rowbuf); - g_free(data); + g_free (rowbuf); + g_free (data); gimp_drawable_detach (drawable); @@ -502,17 +519,18 @@ static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("hrz"); - + gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } /*********** Save dialog ************/ +/* static gint save_dialog (void) { @@ -540,9 +558,6 @@ save_dialog (void) return psint.run; } - -/********** Save interface functions **********/ - static void save_ok_callback (GtkWidget *widget, gpointer data) @@ -551,19 +566,4 @@ save_ok_callback (GtkWidget *widget, gtk_widget_destroy (GTK_WIDGET (data)); } - -/* -static void -save_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} */ diff --git a/plug-ins/common/illusion.c b/plug-ins/common/illusion.c index 237f8fb980..2a5a0fb7c1 100644 --- a/plug-ins/common/illusion.c +++ b/plug-ins/common/illusion.c @@ -297,6 +297,7 @@ static int dialog (void) { GtkWidget *window; + GtkWidget *frame; GtkWidget *table; GtkWidget *spinbutton; GtkObject *adj; @@ -326,13 +327,17 @@ dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - /* table */ + frame = gtk_frame_new (_("Parameter Settings")); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), frame, + FALSE, FALSE, 0 ); + gtk_widget_show (frame); + table = gtk_table_new (1, 2, FALSE); - gtk_container_set_border_width (GTK_CONTAINER (table), 6); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), table, - TRUE, TRUE, 0 ); + gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show (table); spinbutton = gimp_spin_button_new (&adj, parameters.division, diff --git a/plug-ins/common/jpeg.c b/plug-ins/common/jpeg.c index 09e6569ffb..d25d1cbfa4 100644 --- a/plug-ins/common/jpeg.c +++ b/plug-ins/common/jpeg.c @@ -164,21 +164,21 @@ #define DEFAULT_COMMENT "Created with The GIMP" /* sg - these should not be global... */ -gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; -GtkWidget *preview_size = NULL; -GDrawable *drawable_global = NULL; +static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; +static GtkWidget *preview_size = NULL; +static GDrawable *drawable_global = NULL; typedef struct { gdouble quality; gdouble smoothing; - gint optimize; - gint progressive; - gint baseline; - gint subsmp; - gint restart; - gint dct; - gint preview; + gint optimize; + gint progressive; + gint baseline; + gint subsmp; + gint restart; + gint dct; + gint preview; } JpegSaveVals; typedef struct @@ -189,25 +189,21 @@ typedef struct typedef struct { struct jpeg_compress_struct cinfo; - gint tile_height; - FILE *outfile; - gint has_alpha; - gint rowstride; - guchar *temp; - guchar *data; - guchar *src; + gint tile_height; + FILE *outfile; + gint has_alpha; + gint rowstride; + guchar *temp; + guchar *data; + guchar *src; GDrawable *drawable; - GPixelRgn pixel_rgn; - char *file_name; - - gint abort_me; + GPixelRgn pixel_rgn; + gchar *file_name; + gint abort_me; } preview_persistent; gint *abort_me = NULL; -typedef void (*MenuItemCallback) (GtkWidget *widget, - gpointer user_data); - /* Declare local functions. */ static void query (void); @@ -228,7 +224,7 @@ static gint save_image (gchar *filename, static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback); + GtkSignalFunc callback); static void init_gtk (void); static gint save_dialog (void); @@ -263,10 +259,10 @@ static void dct_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static JpegSaveVals jsvals = @@ -295,7 +291,7 @@ static GtkWidget *restart_markers_label = NULL; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -307,8 +303,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -327,7 +324,7 @@ query () { PARAM_INT32, "restart", "Frequency of restart markers (in rows, 0 = no restart markers)" }, { PARAM_INT32, "dct", "DCT algorithm to use (speed/quality tradeoff)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -355,41 +352,41 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_jpeg_load", "jpg,jpeg", "", "6,string,JFIF"); - gimp_register_save_handler ("file_jpeg_save", "jpg,jpeg", ""); + gimp_register_magic_load_handler ("file_jpeg_load", + "jpg,jpeg", + "", + "6,string,JFIF"); + gimp_register_save_handler ("file_jpeg_save", + "jpg,jpeg", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; - gint32 display_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; + gint32 display_ID = -1; #ifdef GIMP_HAVE_PARASITES - Parasite *parasite; + Parasite *parasite; #endif /* GIMP_HAVE_PARASITES */ - int err; + gint err; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - -#if 0 - printf ("JPEG: Waiting (pid %d)...\n", getpid()); - kill (getpid(), SIGSTOP); -#endif + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_jpeg_load") == 0) { @@ -400,13 +397,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_jpeg_save") == 0) @@ -423,7 +419,8 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "JPEG", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); switch (export) { case EXPORT_EXPORT: @@ -434,8 +431,7 @@ run (char *name, case EXPORT_IGNORE: break; case EXPORT_CANCEL: - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; break; } @@ -443,7 +439,7 @@ run (char *name, default: break; } - + if (image_comment) { g_free (image_comment); @@ -460,16 +456,16 @@ run (char *name, if (!image_comment) image_comment = g_strdup (DEFAULT_COMMENT); - jsvals.quality = DEFAULT_QUALITY; - jsvals.smoothing = DEFAULT_SMOOTHING; - jsvals.optimize = DEFAULT_OPTIMIZE; + jsvals.quality = DEFAULT_QUALITY; + jsvals.smoothing = DEFAULT_SMOOTHING; + jsvals.optimize = DEFAULT_OPTIMIZE; jsvals.progressive = DEFAULT_PROGRESSIVE; - jsvals.baseline = DEFAULT_BASELINE; - jsvals.subsmp = DEFAULT_SUBSMP; - jsvals.restart = DEFAULT_RESTART; - jsvals.dct = DEFAULT_DCT; - jsvals.preview = DEFAULT_PREVIEW; - + jsvals.baseline = DEFAULT_BASELINE; + jsvals.subsmp = DEFAULT_SUBSMP; + jsvals.restart = DEFAULT_RESTART; + jsvals.dct = DEFAULT_DCT; + jsvals.preview = DEFAULT_PREVIEW; + switch (run_mode) { case RUN_INTERACTIVE: @@ -478,7 +474,8 @@ run (char *name, #ifdef GIMP_HAVE_PARASITES /* load up the previously used values */ - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -493,7 +490,7 @@ run (char *name, parasite_free(parasite); } #endif /* GIMP_HAVE_PARASITES */ - + /* we start an undo_group and immediately freeze undo saving so that we can avoid sucking up tile cache with our unneeded preview steps. */ @@ -513,7 +510,7 @@ run (char *name, gimp_undo_push_group_end (image_ID); if (!err) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -521,8 +518,10 @@ run (char *name, /* pw - added two more progressive and comment */ /* sg - added subsampling, preview, baseline, restarts and DCT */ if (nparams != 14) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { jsvals.quality = param[5].data.d_float; jsvals.smoothing = param[6].data.d_float; @@ -540,26 +539,24 @@ run (char *name, if (image_comment) g_free (image_comment); image_comment = g_strdup (param[9].data.d_string); + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.subsmp < 0 || jsvals.subsmp > 2) + status = STATUS_CALLING_ERROR; + else if (jsvals.dct < 0 || jsvals.dct > 2) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.subsmp < 0 || jsvals.subsmp > 2)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.dct < 0 || jsvals.dct > 2)) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ gimp_get_data ("file_jpeg_save", &jsvals); #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -580,26 +577,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID, - FALSE)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID, + FALSE)) + { + /* Store mvals data */ + gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) { /* If the image was exported, delete the new display. */ /* This also deletes the image. */ - + if (display_ID > -1) gimp_display_delete (display_ID); else @@ -607,7 +606,6 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - /* pw - now we need to change the defaults to be whatever * was used to save this image. Dump the old parasites * and add new ones. */ @@ -627,14 +625,18 @@ run (char *name, parasite = parasite_new ("jpeg-save-options", 0, sizeof (jsvals), &jsvals); gimp_image_parasite_attach (orig_image_ID, parasite); parasite_free (parasite); - #endif /* Have Parasites */ } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - /* Read next byte */ -static unsigned int +static guint jpeg_getc (j_decompress_ptr cinfo) { struct jpeg_source_mgr * datasrc = cinfo->src; @@ -889,7 +891,8 @@ load_image (char *filename, } else { - image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, image_type); + image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, + image_type); gimp_image_set_filename (image_ID, filename); } @@ -899,7 +902,7 @@ load_image (char *filename, cinfo.output_width, cinfo.output_height, layer_type, 100, NORMAL_MODE); - } + } else { layer_ID = gimp_layer_new (image_ID, _("Background"), @@ -909,47 +912,49 @@ load_image (char *filename, } drawable_global = drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); - /* Step 5.1: if the file had resolution information, set it on the - * image */ #ifdef GIMP_HAVE_RESOLUTION_INFO + /* Step 5.1: if the file had resolution information, set it on the image */ if (!preview && cinfo.saw_JFIF_marker) - { - float xresolution; - float yresolution; - float asymmetry; + { + gdouble xresolution; + gdouble yresolution; + gdouble asymmetry; - xresolution = cinfo.X_density; - yresolution = cinfo.Y_density; + xresolution = cinfo.X_density; + yresolution = cinfo.Y_density; - switch (cinfo.density_unit) - { - case 0: /* unknown */ - asymmetry = xresolution / yresolution; - xresolution = 72 * asymmetry; - yresolution = 72; - break; - - case 1: /* dots per inch */ - break; + switch (cinfo.density_unit) + { + case 0: /* unknown -> set the aspect ratio but use the default + * image resolution + */ + asymmetry = xresolution / yresolution; + gimp_image_get_resolution (image_ID, &xresolution, &yresolution); + xresolution *= asymmetry; + break; - case 2: /* dots per cm */ - xresolution *= 2.54; - yresolution *= 2.54; - break; + case 1: /* dots per inch */ + break; - default: - g_message ("unknown density unit %d\nassuming dots per inch", - cinfo.density_unit); - break; - } + case 2: /* dots per cm */ + xresolution *= 2.54; + yresolution *= 2.54; + gimp_image_set_unit (image_ID, UNIT_MM); + break; - gimp_image_set_resolution (image_ID, xresolution, yresolution); - } + default: + g_message ("unknown density unit %d\nassuming dots per inch", + cinfo.density_unit); + break; + } + + gimp_image_set_resolution (image_ID, xresolution, yresolution); + } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ @@ -1345,20 +1350,36 @@ save_image (char *filename, #ifdef GIMP_HAVE_RESOLUTION_INFO { - double xresolution; - double yresolution; + gdouble xresolution; + gdouble yresolution; gimp_image_get_resolution (orig_image_ID, &xresolution, &yresolution); if (xresolution > 1e-5 && yresolution > 1e-5) { - cinfo.density_unit = 1; /* dots per inch */ + gdouble factor; + + factor = gimp_unit_get_factor (gimp_image_get_unit (orig_image_ID)); + + if (factor == 2.54 /* cm */ || + factor == 25.4 /* mm */) + { + cinfo.density_unit = 2; /* dots per cm */ + + xresolution /= 2.54; + yresolution /= 2.54; + } + else + { + cinfo.density_unit = 1; /* dots per inch */ + } + cinfo.X_density = xresolution; cinfo.Y_density = yresolution; } } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - + /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. @@ -1526,7 +1547,7 @@ static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback) + GtkSignalFunc callback) { GtkWidget *menu_item = gtk_menu_item_new_with_label (label); gtk_container_add (GTK_CONTAINER (menu), menu_item); diff --git a/plug-ins/common/lic.c b/plug-ins/common/lic.c index 5506042ac2..f2e8db242c 100644 --- a/plug-ins/common/lic.c +++ b/plug-ins/common/lic.c @@ -33,6 +33,7 @@ /* Some of the code is based on code by Steinar Haugen (thanks!), the Perlin */ /* noise function is practically ripped as is :) */ /*********************************************************************************/ + #include "config.h" #include @@ -82,25 +83,32 @@ rgbpixel background; gdouble G[numx][numy][2]; -typedef struct { - glong filtlen,noisemag,intsteps,minv,maxv; +typedef struct +{ + gdouble filtlen; + gdouble noisemag; + gdouble intsteps; + gdouble minv; + gdouble maxv; gboolean create_new_image; - guchar effect_channel; - guchar effect_operator; - guchar effect_convolve; - gint32 effect_image_id; + gint effect_channel; + gint effect_operator; + gint effect_convolve; + gint32 effect_image_id; } LicValues; LicValues licvals; gdouble l=10.0,dx=2.0,dy=2.0,minv=-2.5,maxv=2.5,isteps=20.0; -GDrawable *input_drawable,*output_drawable; -GPixelRgn source_region,dest_region; +GDrawable *input_drawable; +GDrawable *output_drawable; +GPixelRgn source_region; +GPixelRgn dest_region; -gint imgtype,width,height,in_channels,out_channels; -gint border_x1,border_y1,border_x2,border_y2; -glong maxcounter; +gint imgtype,width,height,in_channels,out_channels; +gint border_x1,border_y1,border_x2,border_y2; +glong maxcounter; guchar *scalarfield; GtkWidget *dialog; @@ -109,21 +117,26 @@ GtkWidget *dialog; /* Convenience routines */ /************************/ -void rgb_add(rgbpixel *a,rgbpixel *b) +static void +rgb_add (rgbpixel *a, + rgbpixel *b) { a->r=a->r+b->r; a->g=a->g+b->g; a->b=a->b+b->b; } -void rgb_mul(rgbpixel *a,gdouble b) +static void +rgb_mul (rgbpixel *a, + gdouble b) { a->r=a->r*b; a->g=a->g*b; a->b=a->b*b; } -void rgb_clamp(rgbpixel *a) +static void +rgb_clamp (rgbpixel *a) { if (a->r>1.0) a->r=1.0; @@ -144,25 +157,9 @@ void rgb_clamp(rgbpixel *a) a->b=0.0; } -void set_color(rgbpixel *a,gdouble r,gdouble g,gdouble b) -{ - a->r=r; a->g=g; a->b=b; -} - -glong xy_to_index(gint x,gint y) -{ - return((glong)in_channels*((glong)x+(glong)y*(glong)width)); -} - -gboolean checkbounds(gint x,gint y) -{ - if (x<0 || y<0 || x>width-1 || y>height-1) - return(FALSE); - - return(TRUE); -} - -rgbpixel peek(gint x,gint y) +static rgbpixel +peek (gint x, + gint y) { static guchar data[4]; rgbpixel color; @@ -186,7 +183,10 @@ rgbpixel peek(gint x,gint y) return(color); } -void poke(gint x,gint y,rgbpixel *color) +static void +poke (gint x, + gint y, + rgbpixel *color) { static guchar data[4]; @@ -198,17 +198,13 @@ void poke(gint x,gint y,rgbpixel *color) gimp_pixel_rgn_set_pixel(&dest_region,data,x,y); } -void pos_to_int(gdouble x,gdouble y,gint *scr_x,gint *scr_y) -{ - *scr_x=(gint)((x*(gdouble)width)); - *scr_y=(gint)((y*(gdouble)height)); -} - /****************************************/ /* Allocate memory for temporary images */ /****************************************/ -gint image_setup(GDrawable *drawable,gint interactive) +static gint +image_setup (GDrawable *drawable, + gint interactive) { /* Get some useful info on the input drawable */ /* ========================================== */ @@ -241,7 +237,10 @@ gint image_setup(GDrawable *drawable,gint interactive) return(TRUE); } -guchar peekmap(guchar *image,gint x,gint y) +static guchar +peekmap (guchar *image, + gint x, + gint y) { glong index; @@ -263,7 +262,10 @@ guchar peekmap(guchar *image,gint x,gint y) /* (It's a varation of the Sobel kernels, really) */ /***************************************************/ -gint gradx(guchar *image,gint x,gint y) +static gint +gradx (guchar *image, + gint x, + gint y) { gint val=0; @@ -285,7 +287,10 @@ gint gradx(guchar *image,gint x,gint y) return(val); } -gint grady(guchar *image,gint x,gint y) +static gint +grady (guchar *image, + gint x, + gint y) { gint val=0; @@ -310,7 +315,8 @@ gint grady(guchar *image,gint x,gint y) /* A nice 2nd order cubic spline :) */ /************************************/ -gdouble cubic(gdouble t) +static gdouble +cubic (gdouble t) { gdouble at=fabs(t); @@ -320,7 +326,11 @@ gdouble cubic(gdouble t) return(0.0); } -gdouble omega(gdouble u,gdouble v,gint i,gint j) +static gdouble +omega (gdouble u, + gdouble v, + gint i, + gint j) { while (i<0) i+=numx; @@ -338,7 +348,9 @@ gdouble omega(gdouble u,gdouble v,gint i,gint j) /* The noise function (2D variant of Perlins noise function) */ /*************************************************************/ -gdouble noise(gdouble x,gdouble y) +static gdouble +noise (gdouble x, + gdouble y) { gint i,sti=(gint)floor(x/dx); gint j,stj=(gint)floor(y/dy); @@ -361,7 +373,8 @@ gdouble noise(gdouble x,gdouble y) /* Generates pseudo-random vectors with length 1 */ /*************************************************/ -void generatevectors(void) +static void +generatevectors (void) { gdouble alpha; gint i,j; @@ -380,7 +393,8 @@ void generatevectors(void) /* A simple triangle filter */ /* ======================== */ -gdouble filter(gdouble u) +static gdouble +filter (gdouble u) { gdouble f=1.0-fabs(u)/l; @@ -394,7 +408,11 @@ gdouble filter(gdouble u) /* Compute the Line Integral Convolution (LIC) at x,y */ /******************************************************/ -gdouble lic_noise(gint x,gint y,gdouble vx,gdouble vy) +static gdouble +lic_noise (gint x, + gint y, + gdouble vx, + gdouble vy) { gdouble i=0.0; gdouble f1=0.0,f2=0.0; @@ -433,7 +451,10 @@ gdouble lic_noise(gint x,gint y,gdouble vx,gdouble vy) return(i); } -static rgbpixel bilinear(gdouble x, gdouble y, rgbpixel *p) +static rgbpixel +bilinear (gdouble x, + gdouble y, + rgbpixel *p) { gdouble m0, m1; gdouble ix, iy; @@ -478,7 +499,10 @@ static rgbpixel bilinear(gdouble x, gdouble y, rgbpixel *p) return(v); } /* bilinear */ -void getpixel(rgbpixel *p,gdouble u,gdouble v) +static void +getpixel (rgbpixel *p, + gdouble u, + gdouble v) { register gint x1, y1, x2, y2; static rgbpixel pp[4]; @@ -507,7 +531,12 @@ void getpixel(rgbpixel *p,gdouble u,gdouble v) *p=bilinear(u,v,pp); } -void lic_image(gint x,gint y,gdouble vx,gdouble vy,rgbpixel *color) +static void +lic_image (gint x, + gint y, + gdouble vx, + gdouble vy, + rgbpixel *color) { gdouble u,step=2.0*l/isteps; gdouble xx=(gdouble)x,yy=(gdouble)y; @@ -546,7 +575,10 @@ void lic_image(gint x,gint y,gdouble vx,gdouble vy,rgbpixel *color) *color=col; } -gdouble maximum(gdouble a,gdouble b,gdouble c) +static gdouble +maximum (gdouble a, + gdouble b, + gdouble c) { gdouble max=a; @@ -558,7 +590,10 @@ gdouble maximum(gdouble a,gdouble b,gdouble c) return(max); } -gdouble minimum(gdouble a,gdouble b,gdouble c) +static gdouble +minimum (gdouble a, + gdouble b, + gdouble c) { gdouble min=a; @@ -570,7 +605,9 @@ gdouble minimum(gdouble a,gdouble b,gdouble c) return(min); } -void get_hue(rgbpixel *col,gdouble *hue) +static void +get_hue (rgbpixel *col, + gdouble *hue) { gdouble max,min,delta; @@ -594,7 +631,9 @@ void get_hue(rgbpixel *col,gdouble *hue) } } -void get_saturation(rgbpixel *col,gdouble *sat) +static void +get_saturation (rgbpixel *col, + gdouble *sat) { gdouble max,min,l; @@ -613,7 +652,9 @@ void get_saturation(rgbpixel *col,gdouble *sat) } } -void get_brightness(rgbpixel *col,gdouble *bri) +static void +get_brightness (rgbpixel *col, + gdouble *bri) { gdouble max,min; @@ -623,7 +664,9 @@ void get_brightness(rgbpixel *col,gdouble *bri) *bri=(max+min)/2.0; } -void rgb_to_hue(GDrawable *image,guchar **map) +static void +rgb_to_hue (GDrawable *image, + guchar **map) { guchar *themap,data[4]; gint w,h,x,y; @@ -661,7 +704,9 @@ void rgb_to_hue(GDrawable *image,guchar **map) *map=themap; } -void rgb_to_saturation(GDrawable *image,guchar **map) +static void +rgb_to_saturation (GDrawable *image, + guchar **map) { guchar *themap,data[4]; gint w,h,x,y; @@ -699,7 +744,9 @@ void rgb_to_saturation(GDrawable *image,guchar **map) *map=themap; } -void rgb_to_brightness(GDrawable *image,guchar **map) +static void +rgb_to_brightness (GDrawable *image, + guchar **map) { guchar *themap,data[4]; gint w,h,x,y; @@ -737,7 +784,8 @@ void rgb_to_brightness(GDrawable *image,guchar **map) *map=themap; } -void compute_lic_derivative(void) +static void +compute_lic_derivative (void) { gint xcount,ycount; glong counter=0; @@ -783,7 +831,8 @@ void compute_lic_derivative(void) } } -void compute_lic_gradient(void) +static void +compute_lic_gradient (void) { gint xcount,ycount; glong counter=0; @@ -831,7 +880,8 @@ void compute_lic_gradient(void) } } -void compute_image(void) +static void +compute_image (void) { gint32 new_image_id=-1,new_layer_id=-1; GDrawable *effect; @@ -913,68 +963,47 @@ void compute_image(void) /* Below is only UI stuff */ /**************************/ -void ok_button_clicked(GtkWidget *widget, gpointer client_data) +static void +ok_button_clicked (GtkWidget *widget, + gpointer data) { - gtk_widget_hide((GtkWidget *)client_data); - gdk_flush(); - compute_image(); - gtk_main_quit(); + gtk_widget_hide (GTK_WIDGET (data)); + gdk_flush (); + compute_image (); + gtk_main_quit (); } -void effect_channel_callback(GtkWidget *widget,gpointer client_data) -{ - if (GTK_TOGGLE_BUTTON(widget)->active) - { - licvals.effect_channel=(guchar)((glong)client_data); - } -} - -void effect_operator_callback(GtkWidget *widget,gpointer client_data) -{ - if (GTK_TOGGLE_BUTTON(widget)->active) - { - licvals.effect_operator=(guchar)((glong)client_data); - } -} - -void effect_convolve_callback(GtkWidget *widget,gpointer client_data) -{ - if (GTK_TOGGLE_BUTTON(widget)->active) - licvals.effect_convolve=(guchar)((glong)client_data); -} - -gint effect_image_constrain(gint32 image_id, gint32 drawable_id, gpointer data) +static gint +effect_image_constrain (gint32 image_id, + gint32 drawable_id, + gpointer data) { if (drawable_id == -1) return(TRUE); - return(gimp_drawable_is_rgb(drawable_id)); + return gimp_drawable_is_rgb (drawable_id); } -void effect_image_callback(gint32 id, gpointer data) +static void +effect_image_callback (gint32 id, + gpointer data) { - licvals.effect_image_id=id; + licvals.effect_image_id = id; } -void effect_parameter_update(GtkAdjustment *adjustment, gpointer client_data) -{ - *((glong *)client_data)=(gdouble)adjustment->value; -} - -void create_main_dialog(void) +static void +create_main_dialog (void) { + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *vbox2; GtkWidget *frame; - GtkWidget *vbox,*hbox,*vbox2,*hbox2; - GtkWidget *label; + GtkWidget *table; GtkWidget *option_menu; GtkWidget *menu; GtkWidget *button; - GtkWidget *scale; GtkObject *scale_data; - GSList *group=NULL; - /* Dialog */ - dialog = gimp_dialog_new (_("Van Gogh (LIC)"), "lic", gimp_plugin_help_func, "filters/lic.html", GTK_WIN_POS_MOUSE, @@ -987,271 +1016,148 @@ void create_main_dialog(void) NULL); - hbox = gtk_hbox_new(FALSE,5); - gtk_container_border_width(GTK_CONTAINER(hbox),5); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),hbox); + vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox); + gtk_widget_show (vbox); - vbox=gtk_vbox_new(FALSE,0); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5); + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); - frame = gtk_frame_new( _("Options")); - gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_ETCHED_IN); - gtk_container_add(GTK_CONTAINER(vbox),frame); + frame = gtk_frame_new (_("Options")); + gtk_container_add (GTK_CONTAINER (hbox), frame); + gtk_widget_show (frame); - hbox2=gtk_hbox_new(FALSE,5); - gtk_container_add(GTK_CONTAINER(frame),hbox2); + vbox2 = gtk_vbox_new (FALSE, 1); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 2); + gtk_container_add (GTK_CONTAINER (frame), vbox2); + gtk_widget_show (vbox2); - button = gtk_check_button_new_with_label( _("Create new image")); - if (licvals.create_new_image==TRUE) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),TRUE); - gtk_container_add(GTK_CONTAINER(hbox2),button); + button = gtk_check_button_new_with_label( _("Create\nNew Image")); + gtk_label_set_justify (GTK_LABEL (GTK_BIN (button)->child), GTK_JUSTIFY_LEFT); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + licvals.create_new_image == TRUE); + gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0); gtk_widget_show(button); - gtk_widget_show(hbox2); - gtk_widget_show(frame); - - frame = gtk_frame_new( _("Effect channel")); - gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_ETCHED_IN); - gtk_container_add(GTK_CONTAINER(vbox),frame); + frame = gimp_radio_group_new2 (TRUE, _("Effect Channel"), + gimp_radio_button_update, + &licvals.effect_channel, + (gpointer) licvals.effect_channel, - vbox2=gtk_vbox_new(FALSE,0); - gtk_container_add(GTK_CONTAINER(frame),vbox2); + _("Hue"), (gpointer) 0, NULL, + _("Saturation"), (gpointer) 1, NULL, + _("Brightness"), (gpointer) 2, NULL, - button = gtk_radio_button_new_with_label(NULL, _("Hue")); - group = gtk_radio_button_group(GTK_RADIO_BUTTON(button)); - if (licvals.effect_channel==0) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + NULL); + gtk_container_add (GTK_CONTAINER (hbox), frame); + gtk_widget_show (frame); - gtk_signal_connect(GTK_OBJECT(button), "toggled", - (GtkSignalFunc)effect_channel_callback, - (gpointer)0); + frame = gimp_radio_group_new2 (TRUE, _("Effect Operator"), + gimp_radio_button_update, + &licvals.effect_operator, + (gpointer) licvals.effect_operator, - gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); - gtk_widget_show(button); + _("Derivative"), (gpointer) 0, NULL, + _("Gradient"), (gpointer) 1, NULL, - button = gtk_radio_button_new_with_label(group, _("Saturation")); - if (licvals.effect_channel==1) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + NULL); + gtk_container_add (GTK_CONTAINER (hbox), frame); + gtk_widget_show (frame); - gtk_signal_connect(GTK_OBJECT(button), "toggled", - (GtkSignalFunc)effect_channel_callback, - (gpointer)1); + frame = gimp_radio_group_new2 (TRUE, _("Convolve"), + gimp_radio_button_update, + &licvals.effect_convolve, + (gpointer) licvals.effect_convolve, - gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); - gtk_widget_show(button); + _("With White Noise"), (gpointer) 0, NULL, + _("With Source Image"), (gpointer) 1, NULL, - button = gtk_radio_button_new_with_label(group, _("Brightness")); - if (licvals.effect_channel==2) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + NULL); + gtk_container_add (GTK_CONTAINER (hbox), frame); + gtk_widget_show (frame); - gtk_signal_connect(GTK_OBJECT(button), "toggled", - (GtkSignalFunc)effect_channel_callback, - (gpointer)2); + frame = gtk_frame_new (_("Parameters")); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); - gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - gtk_widget_show(vbox2); - gtk_widget_show(frame); - - frame = gtk_frame_new( _("Effect operator")); - gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_ETCHED_IN); - gtk_container_add(GTK_CONTAINER(vbox),frame); - - vbox2=gtk_vbox_new(FALSE,0); - gtk_container_add(GTK_CONTAINER(frame),vbox2); - - button = gtk_radio_button_new_with_label(NULL, _("Derivative")); - group = gtk_radio_button_group(GTK_RADIO_BUTTON(button)); - if (licvals.effect_operator==0) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - - gtk_signal_connect(GTK_OBJECT(button), "toggled", - (GtkSignalFunc)effect_operator_callback, - (gpointer)0); - - gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - button = gtk_radio_button_new_with_label(group, _("Gradient")); - if (licvals.effect_operator==1) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - - gtk_signal_connect(GTK_OBJECT(button), "toggled", - (GtkSignalFunc)effect_operator_callback, - (gpointer)1); - - gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - gtk_widget_show(vbox2); - gtk_widget_show(frame); - - frame = gtk_frame_new( _("Convolve")); - gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_ETCHED_IN); - gtk_container_add(GTK_CONTAINER(vbox),frame); - - vbox2=gtk_vbox_new(FALSE,0); - gtk_container_add(GTK_CONTAINER(frame),vbox2); - - button = gtk_radio_button_new_with_label(NULL, _("With white noise")); - group = gtk_radio_button_group(GTK_RADIO_BUTTON(button)); - if (licvals.effect_convolve==0) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - - gtk_signal_connect(GTK_OBJECT(button), "toggled", - (GtkSignalFunc)effect_convolve_callback, - (gpointer)0); - - gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - button = gtk_radio_button_new_with_label(group, _("With source image")); - if (licvals.effect_convolve==1) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - - gtk_signal_connect(GTK_OBJECT(button), "toggled", - (GtkSignalFunc)effect_convolve_callback, - (gpointer)1); - - gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - gtk_widget_show(vbox2); - gtk_widget_show(frame); - - gtk_widget_show(vbox); - - vbox=gtk_vbox_new(FALSE,0); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5); - - frame = gtk_frame_new( _("Parameters")); - gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_ETCHED_IN); - gtk_container_add(GTK_CONTAINER(vbox),frame); + table = gtk_table_new (6, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_widget_show (table); /* Effect image menu */ - - vbox2=gtk_vbox_new(FALSE,0); - gtk_container_add(GTK_CONTAINER(frame),vbox2); - - hbox2=gtk_hbox_new(FALSE,0); - gtk_container_add(GTK_CONTAINER(vbox2),hbox2); - - label = gtk_label_new( _("Effect image:")); - gtk_container_add(GTK_CONTAINER(hbox2),label); - gtk_widget_show(label); - - option_menu = gtk_option_menu_new(); - + option_menu = gtk_option_menu_new (); menu = gimp_drawable_menu_new(effect_image_constrain, effect_image_callback, NULL, licvals.effect_image_id); + gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Effect Image:"), 1.0, 0.5, + option_menu, TRUE); - gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, + _("Filter Length"), 0, 0, + licvals.filtlen, 0, 64, 1.0, 8.0, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT(scale_data), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &licvals.filtlen); - gtk_container_add(GTK_CONTAINER(hbox2),option_menu); - gtk_widget_show(option_menu); - - gtk_widget_show(hbox2); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + _("Noise Magnitude:"), 0, 0, + licvals.noisemag, 1, 5, 0.1, 1.0, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT(scale_data), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &licvals.noisemag); - label = gtk_label_new( _("Filter length:")); - gtk_misc_set_alignment(GTK_MISC(label), 0.5, 1.0); - gtk_container_add(GTK_CONTAINER(vbox2),label); - gtk_widget_show(label); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + _("Integration Steps:"), 0, 0, + licvals.intsteps, 1, 40, 1.0, 5.0, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT(scale_data), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &licvals.intsteps); - scale_data = gtk_adjustment_new(licvals.filtlen, 0, 64, 1.0, 1.0, 0.0); - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc)effect_parameter_update, - (gpointer)&licvals.filtlen); - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_container_add(GTK_CONTAINER(vbox2),scale); - gtk_widget_show(scale); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 4, + _("Minimum Value:"), 0, 0, + licvals.minv, -100, 0, 1, 10, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT(scale_data), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &licvals.minv); - label = gtk_label_new( _("Noise magnitude:")); - gtk_misc_set_alignment(GTK_MISC(label), 0.5, 1.0); - gtk_container_add(GTK_CONTAINER(vbox2),label); - gtk_widget_show(label); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 5, + _("Maximum Value:"), 0, 0, + licvals.maxv, 0, 100, 1, 10, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT(scale_data), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &licvals.maxv); - scale_data = gtk_adjustment_new(licvals.noisemag, 1, 5, 1.0, 1.0, 0.0); - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc)effect_parameter_update, - (gpointer)&licvals.noisemag); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_container_add(GTK_CONTAINER(vbox2),scale); - gtk_widget_show(scale); - - label = gtk_label_new( _("Integration steps:")); - gtk_misc_set_alignment(GTK_MISC(label), 0.5, 1.0); - gtk_container_add(GTK_CONTAINER(vbox2),label); - gtk_widget_show(label); - - scale_data = gtk_adjustment_new(licvals.intsteps, 1, 40, 1.0, 1.0, 0.0); - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc)effect_parameter_update, - (gpointer)&licvals.intsteps); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_container_add(GTK_CONTAINER(vbox2),scale); - gtk_widget_show(scale); - - label = gtk_label_new( _("Minimum value:")); - gtk_misc_set_alignment(GTK_MISC(label), 0.5, 1.0); - gtk_container_add(GTK_CONTAINER(vbox2),label); - gtk_widget_show(label); - - scale_data = gtk_adjustment_new(licvals.minv, -100, 0, 1.0, 1.0, 0.0); - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc)effect_parameter_update, - (gpointer)&licvals.minv); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_container_add(GTK_CONTAINER(vbox2),scale); - gtk_widget_show(scale); - - label = gtk_label_new( _("Maximum value:")); - gtk_misc_set_alignment(GTK_MISC(label), 0.5, 1.0); - gtk_container_add(GTK_CONTAINER(vbox2),label); - gtk_widget_show(label); - - scale_data = gtk_adjustment_new(licvals.maxv, 0, 100, 1.0, 1.0, 0.0); - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc)effect_parameter_update, - (gpointer)&licvals.maxv); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_container_add(GTK_CONTAINER(vbox2),scale); - gtk_widget_show(scale); - - gtk_widget_show(vbox2); - gtk_widget_show(frame); - - gtk_widget_show(vbox); - gtk_widget_show(hbox); - - /* Done */ - - gtk_widget_show(dialog); + gtk_widget_show (dialog); } /******************/ /* Implementation */ /******************/ -void lic_interactive (GDrawable *drawable); -void lic_noninteractive (GDrawable *drawable); +static void lic_interactive (GDrawable *drawable); +/* +static void lic_noninteractive (GDrawable *drawable); +*/ /*************************************/ /* Set parameters to standard values */ /*************************************/ -void set_default_settings(void) +static void +set_default_settings (void) { licvals.filtlen=5; licvals.noisemag=2; @@ -1265,14 +1171,15 @@ void set_default_settings(void) licvals.effect_image_id=0; } -static void query(void) +static void +query (void) { static GParamDef args[] = - { - { PARAM_INT32, "run_mode", "Interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - }; + { + { PARAM_INT32, "run_mode", "Interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + }; static GParamDef *return_vals = NULL; static gint nargs = sizeof (args) / sizeof (args[0]); @@ -1293,11 +1200,12 @@ static void query(void) args, return_vals); } -static void run(gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals) +static void +run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals) { static GParam values[1]; GDrawable *drawable; @@ -1369,13 +1277,14 @@ static void run(gchar *name, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; -void lic_interactive(GDrawable *drawable) +static void +lic_interactive (GDrawable *drawable) { gchar **argv; gint argc; @@ -1387,29 +1296,31 @@ void lic_interactive(GDrawable *drawable) gtk_init (&argc, &argv); gtk_rc_parse(gimp_gtkrc()); - gdk_set_use_xshm(gimp_use_xshm()); + gdk_set_use_xshm (gimp_use_xshm()); /* Create application window */ /* ========================= */ - create_main_dialog(); + create_main_dialog (); /* Prepare images */ /* ============== */ - image_setup(drawable,TRUE); + image_setup (drawable, TRUE); /* Gtk main event loop */ /* =================== */ - gtk_main(); - gdk_flush(); + gtk_main (); + gdk_flush (); } -void lic_noninteractive(GDrawable *drawable) +/* +static void +lic_noninteractive (GDrawable *drawable) { - printf("Noninteractive not yet implemented! Sorry.\n"); + g_message ("Noninteractive not yet implemented! Sorry.\n"); } +*/ MAIN() - diff --git a/plug-ins/common/mail.c b/plug-ins/common/mail.c index e14ada2090..ac00fb7313 100644 --- a/plug-ins/common/mail.c +++ b/plug-ins/common/mail.c @@ -101,6 +101,8 @@ #define ENCAPSULATION_UUENCODE 0 #define ENCAPSULATION_MIME 1 +#define BUFFER_SIZE 256 + #include "config.h" #include @@ -131,27 +133,29 @@ static void run (gchar *name, gint *nreturn_vals, GParam **return_vals); -static gint save_image (gchar *filename, - gint32 image_ID, - gint32 drawable_ID, - gint32 run_mode); +static GStatusType save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID, + gint32 run_mode); -static gint save_dialog (void); -static void ok_callback (GtkWidget *widget, gpointer data); -static void encap_callback (GtkWidget *widget, gpointer data); -static void receipt_callback (GtkWidget *widget, gpointer data); -static void from_callback (GtkWidget *widget, gpointer data); -static void subject_callback (GtkWidget *widget, gpointer data); -static void comment_callback (GtkWidget *widget, gpointer data); -static void filename_callback (GtkWidget *widget, gpointer data); -static void mesg_body_callback (GtkWidget *widget, gpointer data); +static gint save_dialog (void); +static void ok_callback (GtkWidget *widget, + gpointer data); +static void mail_entry_callback (GtkWidget *widget, + gpointer data); +static void mesg_body_callback (GtkWidget *widget, + gpointer data); static gint valid_file (gchar *filename); -static void create_headers (FILE * mailpipe); +static void create_headers (FILE *mailpipe); static char * find_extension (gchar *filename); -static gint to64 (FILE *infile, FILE *outfile); -static void output64chunk (gint c1, gint c2, gint c3, gint pads, - FILE *outfile); +static gint to64 (FILE *infile, + FILE *outfile); +static void output64chunk (gint c1, + gint c2, + gint c3, + gint pads, + FILE *outfile); GPlugInInfo PLUG_IN_INFO = { @@ -163,11 +167,11 @@ GPlugInInfo PLUG_IN_INFO = typedef struct { - gchar receipt[256]; - gchar subject[256]; - gchar comment[256]; - gchar from[256]; - gchar filename[256]; + gchar receipt[BUFFER_SIZE]; + gchar subject[BUFFER_SIZE]; + gchar comment[BUFFER_SIZE]; + gchar from[BUFFER_SIZE]; + gchar filename[BUFFER_SIZE]; gint encapsulation; } m_info; @@ -231,21 +235,21 @@ run (gchar *name, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 drawable_ID; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; INIT_I18N_UI(); - run_mode = param[0].data.d_int32; + run_mode = param[0].data.d_int32; + image_ID = param[1].data.d_image; drawable_ID = param[2].data.d_drawable; - image_ID = param[1].data.d_image; - *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "plug_in_mail_image") == 0) { @@ -254,23 +258,27 @@ run (gchar *name, case RUN_INTERACTIVE: gimp_get_data ("plug_in_mail_image", &mail_info); if (!save_dialog ()) - return; + status = STATUS_CANCEL; break; + case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 9) - status = STATUS_CALLING_ERROR; - if(status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { /* this hasnt been tested yet */ - strncpy (mail_info.filename, param[3].data.d_string,256); - strncpy (mail_info.receipt, param[4].data.d_string,256); - strncpy (mail_info.receipt, param[5].data.d_string,256); - strncpy (mail_info.subject, param[6].data.d_string,256); - strncpy (mail_info.comment, param[7].data.d_string,256); + strncpy (mail_info.filename, param[3].data.d_string, BUFFER_SIZE); + strncpy (mail_info.receipt, param[4].data.d_string, BUFFER_SIZE); + strncpy (mail_info.receipt, param[5].data.d_string, BUFFER_SIZE); + strncpy (mail_info.subject, param[6].data.d_string, BUFFER_SIZE); + strncpy (mail_info.comment, param[7].data.d_string, BUFFER_SIZE); mail_info.encapsulation = param[8].data.d_int32; } break; + case RUN_WITH_LAST_VALS: gimp_get_data ("plug_in_mail_image", &mail_info); break; @@ -279,48 +287,53 @@ run (gchar *name, break; } - if (run_mode == RUN_INTERACTIVE) - gimp_set_data ("plug_in_mail_image", &mail_info, sizeof(m_info)); - - *nreturn_vals = 1; - if (save_image (mail_info.filename, - image_ID, - drawable_ID, - run_mode)) + if (status == STATUS_SUCCESS) { - values[0].data.d_status = STATUS_SUCCESS; + status = save_image (mail_info.filename, + image_ID, + drawable_ID, + run_mode); + + if (status == STATUS_SUCCESS) + { + gimp_set_data ("plug_in_mail_image", &mail_info, sizeof(m_info)); + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } -static gint +static GStatusType save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID, gint32 run_mode) { GParam *params; - gint retvals; - char *ext; - char *tmpname; - char mailcmdline[512]; - int pid; - int status; - FILE *mailpipe; - FILE *infile; + gint retvals; + gchar *ext; + gchar *tmpname; + gchar mailcmdline[512]; + gint pid; + gint status; + gint process_status; + FILE *mailpipe; + FILE *infile; if (NULL == (ext = find_extension (filename))) - return -1; + return STATUS_CALLING_ERROR; /* get a temp name with the right extension and save into it. */ params = gimp_run_procedure ("gimp_temp_name", &retvals, PARAM_STRING, ext + 1, PARAM_END); + tmpname = g_strdup (params[1].data.d_string); gimp_destroy_params (params, retvals); @@ -348,45 +361,48 @@ save_image (gchar *filename, PARAM_STRING, tmpname, PARAM_STRING, tmpname, PARAM_END); - - /* need to figure a way to make sure the user is trying to save in an approriate format */ - /* but this can wait.... */ + /* need to figure a way to make sure the user is trying to save + * in an approriate format but this can wait.... + */ - if (params[0].data.d_status == FALSE || !valid_file (tmpname)) + status = params[0].data.d_status; + + if (! valid_file (tmpname) || + status != STATUS_SUCCESS) { unlink (tmpname); g_free (tmpname); - return -1; + return status; } - if( mail_info.encapsulation == ENCAPSULATION_UUENCODE ) { + if (mail_info.encapsulation == ENCAPSULATION_UUENCODE) + { #ifndef __EMX__ /* fork off a uuencode process */ if ((pid = fork ()) < 0) - { - g_message ("mail: fork failed: %s\n", g_strerror (errno)); - g_free (tmpname); - return -1; - } + { + g_message ("mail: fork failed: %s\n", g_strerror (errno)); + g_free (tmpname); + return STATUS_EXECUTION_ERROR; + } else if (pid == 0) - { - if (-1 == dup2 (fileno (mailpipe), fileno (stdout))) - { - g_message ("mail: dup2 failed: %s\n", g_strerror (errno)); - } - - execlp (UUENCODE, UUENCODE, tmpname, filename, NULL); - /* What are we doing here? exec must have failed */ - g_message ("mail: exec failed: uuencode: %s\n", g_strerror (errno)); - - - /* close the pipe now */ - pclose (mailpipe); - g_free (tmpname); - _exit (127); - } + { + if (-1 == dup2 (fileno (mailpipe), fileno (stdout))) + { + g_message ("mail: dup2 failed: %s\n", g_strerror (errno)); + } + + execlp (UUENCODE, UUENCODE, tmpname, filename, NULL); + /* What are we doing here? exec must have failed */ + g_message ("mail: exec failed: uuencode: %s\n", g_strerror (errno)); + + /* close the pipe now */ + pclose (mailpipe); + g_free (tmpname); + _exit (127); + } else #else /* __EMX__ */ int tfd; @@ -395,75 +411,73 @@ save_image (gchar *filename, if (dup2 (fileno (mailpipe), fileno (stdout)) == -1) { g_message ("mail: dup2 failed: %s\n", g_strerror (errno)); - close(tfd); + close (tfd); g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } - fcntl(tfd, F_SETFD, FD_CLOEXEC); + fcntl (tfd, F_SETFD, FD_CLOEXEC); pid = spawnlp (P_NOWAIT, UUENCODE, UUENCODE, tmpname, filename, NULL); /* restore fileno(stdout) */ dup2 (tfd, fileno (stdout)); - close(tfd); + close (tfd); if (pid == -1) { g_message ("mail: spawn failed: %s\n", g_strerror (errno)); g_free (tmpname); - return -1; + return STATUS_EXECUTION_ERROR; } #endif - { - waitpid (pid, &status, 0); - - if (!WIFEXITED (status) || - WEXITSTATUS (status) != 0) - { - g_message ("mail: mail didnt work or something on file %s\n", tmpname); - g_free (tmpname); - return 0; - } - } - } - else { /* This must be MIME stuff. Base64 away... */ + { + waitpid (pid, &process_status, 0); + + if (!WIFEXITED (process_status) || + WEXITSTATUS (process_status) != 0) + { + g_message ("mail: mail didnt work or something on file %s\n", tmpname); + g_free (tmpname); + return STATUS_EXECUTION_ERROR; + } + } + } + else + { /* This must be MIME stuff. Base64 away... */ infile = fopen(tmpname,"r"); to64(infile,mailpipe); /* close off mime */ - if( mail_info.encapsulation == ENCAPSULATION_MIME ) { - fprintf(mailpipe, "\n--GUMP-MIME-boundary--\n"); - } - } + if( mail_info.encapsulation == ENCAPSULATION_MIME ) + { + fprintf (mailpipe, "\n--GUMP-MIME-boundary--\n"); + } + } + /* delete the tmpfile that was generated */ unlink (tmpname); g_free (tmpname); - return TRUE; + return STATUS_SUCCESS; } static gint save_dialog (void) { - /* argh, guess this all needs to be struct that i can pass to the ok_callback - so i can get the text from it then. Seems a bit ugly, but maybe its better. - I dunno. */ GtkWidget *dlg; GtkWidget *entry; GtkWidget *table; GtkWidget *table2; GtkWidget *label; - GtkWidget *button1; - GtkWidget *button2; + GtkWidget *vbox; GtkWidget *text; GtkWidget *vscrollbar; - GSList *group; gint argc; gchar **argv; - gchar buffer[32]; + gchar buffer[BUFFER_SIZE]; gint nreturn_vals; GParam *return_vals; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("mail"); gtk_init (&argc, &argv); @@ -478,7 +492,7 @@ save_dialog (void) /* check to see if we actually got a value */ if (return_vals[0].data.d_status == STATUS_SUCCESS && return_vals[1].data.d_string != NULL) - strncpy (mail_info.from, return_vals[1].data.d_string , 256); + strncpy (mail_info.from, return_vals[1].data.d_string , BUFFER_SIZE); gimp_destroy_params (return_vals, nreturn_vals); @@ -507,137 +521,71 @@ save_dialog (void) gtk_table_set_row_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - /* To: Label */ - label = gtk_label_new ("To:"); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 0, 1, 0, 1, - GTK_SHRINK | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); - gtk_widget_show (label); - /* to: dialog */ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, - 1, 2, 0, 1, - GTK_EXPAND | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); gtk_widget_set_usize (entry, 200, 0); - sprintf (buffer, "%s", mail_info.receipt); + g_snprintf (buffer, sizeof (buffer), "%s", mail_info.receipt); gtk_entry_set_text (GTK_ENTRY (entry), buffer); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("To:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) receipt_callback, &mail_info.receipt); - gtk_widget_show (entry); - - - /* From Label */ - label = gtk_label_new ("From:"); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 0, 1, 1, 2, - GTK_SHRINK | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); - gtk_widget_show (label); + GTK_SIGNAL_FUNC (mail_entry_callback), + &mail_info.receipt); /* From entry */ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, - 1, 2, 1, 2, - GTK_EXPAND | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); gtk_widget_set_usize (entry, 200, 0); - - sprintf (buffer, "%s", mail_info.from); + g_snprintf (buffer, sizeof (buffer), "%s", mail_info.from); gtk_entry_set_text (GTK_ENTRY (entry), buffer); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("From:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) from_callback, &mail_info.from); - gtk_widget_show (entry); - - - /* Subject Label */ - label = gtk_label_new ("Subject:"); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 0, 1, 2, 3, - GTK_SHRINK | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); - gtk_widget_show (label); + GTK_SIGNAL_FUNC (mail_entry_callback), + &mail_info.from); /* Subject entry */ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, - 1, 2, 2, 3, - GTK_EXPAND | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); gtk_widget_set_usize (entry, 200, 0); - sprintf (buffer, "%s", mail_info.subject); + g_snprintf (buffer, sizeof (buffer), "%s", mail_info.subject); gtk_entry_set_text (GTK_ENTRY (entry), buffer); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Subject:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) subject_callback, &mail_info.subject); - gtk_widget_show (entry); - - - /* Comment label */ - label = gtk_label_new ("Comment:"); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 0, 1, 3, 4, - GTK_SHRINK | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); - gtk_widget_show (label); + GTK_SIGNAL_FUNC (mail_entry_callback), + &mail_info.subject); /* Comment entry */ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, - 1, 2, 3, 4, - GTK_EXPAND | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); gtk_widget_set_usize (entry, 200, 0); - sprintf (buffer, "%s", mail_info.comment); + g_snprintf (buffer, sizeof (buffer), "%s", mail_info.comment); gtk_entry_set_text (GTK_ENTRY (entry), buffer); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Comment:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) comment_callback, &mail_info.comment); - gtk_widget_show (entry); - - - /* Filename label */ - label = gtk_label_new (_("Filename:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, - 0, 1, 4, 5, - GTK_SHRINK | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); - gtk_widget_show (label); + GTK_SIGNAL_FUNC (mail_entry_callback), + &mail_info.comment); /* Filename entry */ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, - 1, 2, 4, 5, - GTK_EXPAND | GTK_FILL, - GTK_SHRINK | GTK_FILL, - 0, 0); gtk_widget_set_usize (entry, 200, 0); - sprintf (buffer, "%s", mail_info.filename); + g_snprintf (buffer, sizeof (buffer), "%s", mail_info.filename); gtk_entry_set_text (GTK_ENTRY (entry), buffer); + gimp_table_attach_aligned (GTK_TABLE (table), 4, + _("Filename:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) filename_callback, &mail_info.filename); - gtk_widget_show (entry); + GTK_SIGNAL_FUNC (mail_entry_callback), + &mail_info.filename); /* comment */ table2 = gtk_table_new (2, 2, FALSE); gtk_table_set_row_spacing (GTK_TABLE (table2), 0, 2); gtk_table_set_col_spacing (GTK_TABLE (table2), 0, 2); - /* gtk_box_pack_start (GTK_BOX (box2), table2, TRUE, TRUE, 0); - gtk_widget_show (table2); */ + gtk_table_attach (GTK_TABLE (table), table2, 0, 2, 5, 6, GTK_EXPAND | GTK_FILL, @@ -654,14 +602,14 @@ save_dialog (void) gtk_widget_set_usize (text, 200, 100); gtk_widget_show (text); gtk_signal_connect (GTK_OBJECT (text), "changed", - (GtkSignalFunc) mesg_body_callback, mesg_body); + GTK_SIGNAL_FUNC (mesg_body_callback), + mesg_body); gtk_widget_show (table2); vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); gtk_table_attach (GTK_TABLE (table2), vscrollbar, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (vscrollbar); - /* Encapsulation label */ label = gtk_label_new (_("Encapsulation:")); @@ -670,32 +618,21 @@ save_dialog (void) GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (label); - /* Encapsulation radiobutton */ - button1 = gtk_radio_button_new_with_label( NULL, _("Uuencode")); - group = gtk_radio_button_group( GTK_RADIO_BUTTON( button1 ) ); - button2 = gtk_radio_button_new_with_label( group, _("MIME" )); - if (mail_info.encapsulation == ENCAPSULATION_UUENCODE) - { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button1), TRUE); - } - else - { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button2), TRUE); - } - gtk_signal_connect (GTK_OBJECT (button1), "toggled", - (GtkSignalFunc) encap_callback, - (gpointer) "uuencode" ); - gtk_signal_connect (GTK_OBJECT (button2), "toggled", - (GtkSignalFunc) encap_callback, - (gpointer) "mime" ); + /* Encapsulation radiobuttons */ + vbox = gimp_radio_group_new2 (FALSE, NULL, + gimp_radio_button_update, + &mail_info.encapsulation, + (gpointer) mail_info.encapsulation, - gtk_table_attach (GTK_TABLE (table), button1, 1, 2, 6, 7, - GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (button1); + _("Uuencode"), + (gpointer) ENCAPSULATION_UUENCODE, NULL, + _("MIME"), + (gpointer) ENCAPSULATION_MIME, NULL, - gtk_table_attach (GTK_TABLE (table), button2, 1, 2, 7, 8, + NULL); + gtk_table_attach (GTK_TABLE (table), vbox, 1, 2, 6, 8, GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0); - gtk_widget_show (button2); + gtk_widget_show (vbox); gtk_widget_show (dlg); @@ -719,7 +656,7 @@ valid_file (gchar *filename) return 0; } -gchar * +static gchar * find_content_type (gchar *filename) { /* This function returns a MIME Content-type: value based on the @@ -817,54 +754,10 @@ ok_callback (GtkWidget *widget, } static void -encap_callback (GtkWidget *widget, - gpointer data) +mail_entry_callback (GtkWidget *widget, + gpointer data) { - /* Ignore the toggle-off signal, we are only interested in - what is being set */ - if (! GTK_TOGGLE_BUTTON (widget)->active) - { - return; - } - if (strcmp (data, "uuencode") == 0) - mail_info.encapsulation = ENCAPSULATION_UUENCODE; - if (strcmp (data, "mime") == 0) - mail_info.encapsulation = ENCAPSULATION_MIME; -} - -static void -receipt_callback (GtkWidget *widget, - gpointer data) -{ - strncpy (mail_info.receipt, gtk_entry_get_text (GTK_ENTRY (widget)), 256); -} - -static void -from_callback (GtkWidget *widget, - gpointer data) -{ - strncpy (mail_info.from, gtk_entry_get_text (GTK_ENTRY (widget)), 256); -} - -static void -subject_callback (GtkWidget *widget, - gpointer data) -{ - strncpy (mail_info.subject, gtk_entry_get_text (GTK_ENTRY (widget)), 256); -} - -static void -comment_callback (GtkWidget *widget, - gpointer data) -{ - strncpy (mail_info.comment, gtk_entry_get_text (GTK_ENTRY (widget)), 256); -} - -static void -filename_callback (GtkWidget *widget, - gpointer data) -{ - strncpy (mail_info.filename, gtk_entry_get_text (GTK_ENTRY (widget)), 256); + strncpy ((gchar *) data, gtk_entry_get_text (GTK_ENTRY (widget)), BUFFER_SIZE); } static void @@ -967,7 +860,7 @@ static gint to64 (FILE *infile, FILE *outfile) { - int c1, c2, c3, ct=0, written=0; + gint c1, c2, c3, ct = 0, written = 0; while ((c1 = getc (infile)) != EOF) { @@ -1014,6 +907,7 @@ output64chunk (gint c1, { putc (basis_64[c1>>2], outfile); putc (basis_64[((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)], outfile); + if (pads == 2) { putc ('=', outfile); diff --git a/plug-ins/common/mapcolor.c b/plug-ins/common/mapcolor.c index 47d6bdafff..8fbf5acee8 100644 --- a/plug-ins/common/mapcolor.c +++ b/plug-ins/common/mapcolor.c @@ -301,7 +301,7 @@ static gint dialog (void) { GtkWidget *dlg; - GtkWidget *hbox; + GtkWidget *frame; GtkWidget *table; guchar *color_cube; gchar **argv; @@ -341,17 +341,18 @@ dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - hbox = gtk_hbox_new (FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), hbox, TRUE, TRUE, 0); - gtk_widget_show (hbox); + frame = gtk_frame_new (_("Colors")); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); /* The table keeps the color selections */ table = gtk_table_new (2, 4, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 6); - gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show (table); add_color_button (0, 0, 0, table); diff --git a/plug-ins/common/mosaic.c b/plug-ins/common/mosaic.c index 909ec15eed..4b5424cc36 100644 --- a/plug-ins/common/mosaic.c +++ b/plug-ins/common/mosaic.c @@ -26,27 +26,27 @@ #include #include -#include "gtk/gtk.h" -#include "config.h" + +#include + +#include +#include +#include + #include "libgimp/stdplugins-intl.h" -#include "libgimp/gimp.h" /* The mosaic logo */ #include "mosaic_logo.h" -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - #define SCALE_WIDTH 150 -#define HORIZONTAL 0 -#define VERTICAL 1 +#define HORIZONTAL 0 +#define VERTICAL 1 #define OPAQUE 255 -#define SUPERSAMPLE 3 -#define MAG_THRESHOLD 7.5 -#define COUNT_THRESHOLD 0.1 -#define MAX_POINTS 12 +#define SUPERSAMPLE 3 +#define MAG_THRESHOLD 7.5 +#define COUNT_THRESHOLD 0.1 +#define MAX_POINTS 12 #define SQUARES 0 #define HEXAGONS 1 @@ -99,15 +99,17 @@ typedef struct /* Declare local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); static void mosaic (GDrawable *drawable); /* user interface functions */ -static gint mosaic_dialog (void); +static gint mosaic_dialog (void); +static void mosaic_ok_callback (GtkWidget *widget, + gpointer data); /* gradient finding machinery */ static void find_gradients (GDrawable *drawable, @@ -234,14 +236,6 @@ static gint polygon_extents (Polygon * poly, gdouble * max_y); static void polygon_reset (Polygon * poly); -static void mosaic_close_callback (GtkWidget *widget, - gpointer data); -static void mosaic_ok_callback (GtkWidget *widget, - gpointer data); -static void mosaic_toggle_update (GtkWidget *widget, - gpointer data); -static void mosaic_scale_update (GtkAdjustment *adjustment, - double *scale_val); /* * Some static variables */ @@ -286,17 +280,17 @@ static MosaicInterface mint = GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef args[] = { @@ -336,24 +330,23 @@ query () } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[1]; - GDrawable *active_drawable; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + GDrawable *active_drawable; run_mode = param[0].data.d_int32; - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - *nreturn_vals = 1; - *return_vals = values; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; switch (run_mode) { @@ -411,10 +404,12 @@ run (char *name, /* Create the mosaic */ if ((status == STATUS_SUCCESS) && - (gimp_drawable_is_rgb (active_drawable->id) || gimp_drawable_is_gray (active_drawable->id))) + (gimp_drawable_is_rgb (active_drawable->id) || + gimp_drawable_is_gray (active_drawable->id))) { /* set the tile cache size so that the gaussian blur works well */ - gimp_tile_cache_ntiles (2 * (MAX (active_drawable->width, active_drawable->height) / + gimp_tile_cache_ntiles (2 * (MAX (active_drawable->width, + active_drawable->height) / gimp_tile_width () + 1)); /* run the effect */ @@ -511,14 +506,10 @@ mosaic (GDrawable *drawable) } static gint -mosaic_dialog () +mosaic_dialog (void) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *hbbox; - GtkWidget *button; GtkWidget *toggle; - GtkWidget *scale; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *logo_box; @@ -528,17 +519,13 @@ mosaic_dialog () GtkWidget *preview; GtkWidget *table; GtkObject *scale_data; - GSList *group = NULL; guchar *color_cube; gchar **argv; - gint argc; - gint use_squares = (mvals.tile_type == SQUARES); - gint use_hexagons = (mvals.tile_type == HEXAGONS); - gint use_octagons = (mvals.tile_type == OCTAGONS); - gint y; + gint argc; + gint y; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("mosaic"); gtk_init (&argc, &argv); @@ -554,50 +541,35 @@ mosaic_dialog () gtk_widget_set_default_visual (gtk_preview_get_visual ()); gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); - dlg = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (dlg), _("Mosaic")); - gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE); + dlg = gimp_dialog_new (_("Mosaic"), "mosaic", + gimp_plugin_help_func, "filters/mosaic.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, + + _("OK"), mosaic_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, + + NULL); + gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - (GtkSignalFunc) mosaic_close_callback, + GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - /* Action area */ - gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dlg)->action_area), 2); - gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dlg)->action_area), FALSE); - hbbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbbox), 4); - gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dlg)->action_area), hbbox, FALSE, FALSE, 0); - gtk_widget_show (hbbox); - - button = gtk_button_new_with_label (_("OK")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) mosaic_ok_callback, - dlg); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Cancel")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) gtk_widget_destroy, - GTK_OBJECT (dlg)); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - /* The main hbox -- splits the scripts and the info vbox */ - main_hbox = gtk_hbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (main_hbox), 10); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_hbox, TRUE, TRUE, 0); + main_hbox = gtk_hbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_hbox, + TRUE, TRUE, 0); /* The vbox for first column of options */ - vbox = gtk_vbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (main_hbox), vbox, TRUE, TRUE, 0); + vbox = gtk_vbox_new (FALSE, 4); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); /* The logo frame & drawing area */ - hbox = gtk_hbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); logo_box = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), logo_box, FALSE, FALSE, 0); @@ -622,15 +594,16 @@ mosaic_dialog () /* the vertical box and its toggle buttons */ frame = gtk_frame_new ("Options"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); + + toggle_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 2); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - toggle = gtk_check_button_new_with_label ( _("Antialiasing")); + toggle = gtk_check_button_new_with_label (_("Antialiasing")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.antialiasing); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), mvals.antialiasing); gtk_widget_show (toggle); @@ -638,25 +611,28 @@ mosaic_dialog () toggle = gtk_check_button_new_with_label ( _("Color Averaging")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.color_averaging); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), mvals.color_averaging); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + mvals.color_averaging); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label ( _("Pitted Surfaces")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.tile_surface); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), (mvals.tile_surface == ROUGH)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + (mvals.tile_surface == ROUGH)); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label ( _("FG/BG Lighting")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.grout_color); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), (mvals.grout_color == FG_BG)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + (mvals.grout_color == FG_BG)); gtk_widget_show (toggle); gtk_widget_show (toggle_vbox); @@ -664,163 +640,103 @@ mosaic_dialog () gtk_widget_show (hbox); /* tiling primitive */ - frame = gtk_frame_new ( _("Tiling Primitives")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + frame = gimp_radio_group_new2 (TRUE, _("Tiling Primitives"), + gimp_radio_button_update, + &mvals.tile_type, (gpointer) mvals.tile_type, - toggle = gtk_radio_button_new_with_label (group, _("Squares")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, - &use_squares); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_squares); - gtk_widget_show (toggle); + _("Squares"), + (gpointer) SQUARES, NULL, + _("Hexagons"), + (gpointer) HEXAGONS, NULL, + _("Octagons & Squares"), + (gpointer) OCTAGONS, NULL, - toggle = gtk_radio_button_new_with_label (group, _("Hexagons")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, - &use_hexagons); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_hexagons); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("Octagons & Squares")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, - &use_octagons); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_octagons); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); + gtk_widget_show (vbox); /* parameter settings */ - frame = gtk_frame_new ( _("Parameter Settings")); + frame = gtk_frame_new (_("Parameter Settings")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (main_hbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (6, 2, FALSE); - gtk_container_border_width (GTK_CONTAINER (table), 5); + + table = gtk_table_new (6, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - label = gtk_label_new ( _("Tile Size")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_size, 5.0, 100.0, 1.0, 1.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, + _("Tile Size:"), SCALE_WIDTH, 0, + mvals.tile_size, 5.0, 100.0, 1.0, 10.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_size); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Tile Height")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_height, 1.0, 50.0, 1.0, 1.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, + _("Tile Height:"), SCALE_WIDTH, 0, + mvals.tile_height, 1.0, 50.0, 1.0, 10.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_height); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Tile Spacing")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_spacing, 1.0, 50.0, 1.0, 1.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 2, 3, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + _("Tile Spacing:"), SCALE_WIDTH, 0, + mvals.tile_spacing, 1.0, 50.0, 1.0, 10.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_spacing); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Tile Neatness")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_neatness, 0.0, 1.0, 0.01, 0.01, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 3, 4, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 2); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + _("Tile Neatness:"), SCALE_WIDTH, 0, + mvals.tile_neatness, + 0.0, 1.0, 0.10, 0.1, 2, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_neatness); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Light Direction")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.light_dir, 0.0, 360.0, 5.0, 5.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 4, 5, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 4, + _("Light Direction:"), SCALE_WIDTH, 0, + mvals.light_dir, 0.0, 360.0, 1.0, 15.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.light_dir); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Color Variation")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.color_variation, 0.0, 1.0, 0.01, 0.01, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 5, 6, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 2); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 5, + _("Color Variation:"), SCALE_WIDTH, 0, + mvals.color_variation, + 0.0, 1.0, 0.01, 0.1, 2, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.color_variation); - gtk_widget_show (label); - gtk_widget_show (scale); gtk_widget_show (frame); gtk_widget_show (table); + gtk_widget_show (main_hbox); gtk_widget_show (dlg); gtk_main (); gdk_flush (); - /* determine tile type */ - if (use_squares) - mvals.tile_type = SQUARES; - else if (use_hexagons) - mvals.tile_type = HEXAGONS; - else if (use_octagons) - mvals.tile_type = OCTAGONS; - return mint.run; } +static void +mosaic_ok_callback (GtkWidget *widget, + gpointer data) +{ + mint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); +} /* * Gradient finding machinery @@ -1284,7 +1200,7 @@ fp_rand (gdouble val) { gdouble rand_val; - rand_val = (gdouble) rand () / (gdouble) (RAND_MAX - 1); + rand_val = (gdouble) rand () / (gdouble) (G_MAXRAND - 1); return rand_val * val; } @@ -2500,7 +2416,7 @@ calc_spec_contrib (SpecVec *vecs, if (mvals.tile_surface == ROUGH) { /* If the surface is rough, randomly perturb the distance */ - dist -= dist * ((gdouble) rand () / (gdouble) RAND_MAX); + dist -= dist * ((gdouble) rand () / (gdouble) G_MAXRAND); } /* If the distance to an edge is less than the tile_spacing, there @@ -2656,42 +2572,3 @@ polygon_reset (Polygon *poly) { poly->npts = 0; } - - -/* Mosaic interface functions */ - -static void -mosaic_close_callback (GtkWidget *widget, - gpointer data) -{ - gtk_main_quit (); -} - -static void -mosaic_ok_callback (GtkWidget *widget, - gpointer data) -{ - mint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (data)); -} - -static void -mosaic_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -static void -mosaic_scale_update (GtkAdjustment *adjustment, - double *scale_val) -{ - *scale_val = adjustment->value; -} diff --git a/plug-ins/common/mpeg.c b/plug-ins/common/mpeg.c index 31a3d6df23..dabe9a97f8 100644 --- a/plug-ins/common/mpeg.c +++ b/plug-ins/common/mpeg.c @@ -83,27 +83,27 @@ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); static gint32 load_image (char *filename); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -115,8 +115,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); INIT_I18N(); @@ -131,52 +132,59 @@ query () PROC_PLUG_IN, nload_args, nload_return_vals, load_args, load_return_vals); - gimp_register_load_handler ("file_mpeg_load", "mpg,mpeg", ""); + + gimp_register_load_handler ("file_mpeg_load", + "mpg,mpeg", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; gint32 image_ID; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; INIT_I18N(); if (strcmp (name, "file_mpeg_load") == 0) { image_ID = load_image (param[1].data.d_string); + if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint -MPEG_frame_period_ms(gint mpeg_rate_code) +MPEG_frame_period_ms (gint mpeg_rate_code) { switch(mpeg_rate_code) { @@ -197,7 +205,7 @@ MPEG_frame_period_ms(gint mpeg_rate_code) static gint32 -load_image (char *filename) +load_image (gchar *filename) { GPixelRgn pixel_rgn; GDrawable *drawable; @@ -215,12 +223,9 @@ load_image (char *filename) gchar *layername; /* FIXME? */ - temp = g_malloc (strlen (filename) + 16); if (!temp) gimp_quit (); g_free (temp); - - gimp_progress_init ( _("Loading MPEG movie...")); @@ -262,15 +267,12 @@ load_image (char *filename) exit(3); } - wwidth = img.Width; wheight = img.Height; - image_ID = gimp_image_new (wwidth, wheight, RGB); gimp_image_set_filename (image_ID, filename); - moreframes = TRUE; framenumber = 1; while (moreframes) @@ -324,7 +326,6 @@ load_image (char *filename) data[i*4+3] = 255; } - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, 0, @@ -344,5 +345,4 @@ load_image (char *filename) g_free (data); return image_ID; - } diff --git a/plug-ins/common/nlfilt.c b/plug-ins/common/nlfilt.c index b96b1d2df9..93b1c79ce3 100644 --- a/plug-ins/common/nlfilt.c +++ b/plug-ins/common/nlfilt.c @@ -44,10 +44,6 @@ #include "libgimp/stdplugins-intl.h" -#include - -static mw_preview_t nlfilt_do_preview; - struct Grgb { guint8 red; @@ -79,10 +75,27 @@ typedef enum filter_edge_enhance } FilterType; -/* other structure declarations */ +/* preview stuff -- to be removed as soon as we have a real libgimp preview */ +struct mwPreview +{ + gint width; + gint height; + gint bpp; + gdouble scale; + guchar *bits; +}; + +#define PREVIEW_SIZE 100 + +static gint do_preview = TRUE; static struct mwPreview *thePreview; +static GtkWidget * mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp); +static struct mwPreview * mw_preview_build (GDrawable *drw); + + /* function protos */ static void query (void); @@ -92,8 +105,10 @@ static void run (gchar *name, gint *nretvals, GParam **retvals); -static gint pluginCore (struct piArgs *argp); -static gint pluginCoreIA (struct piArgs *argp); +static gint pluginCore (struct piArgs *argp); +static gint pluginCoreIA (struct piArgs *argp); + +static void nlfilt_do_preview (GtkWidget *preview); static inline gint nlfiltInit (gdouble alpha, gdouble radius, @@ -106,10 +121,10 @@ static inline void nlfiltRow (guchar *src, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init */ - NULL, /* quit */ - query, /* query */ - run, /* run */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () @@ -362,7 +377,7 @@ pluginCoreIA (struct piArgs *argp) gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); - preview = mw_preview_new (hbox, thePreview, &nlfilt_do_preview); + preview = mw_preview_new (hbox, thePreview); gtk_object_set_data (GTK_OBJECT (preview), "piArgs", argp); nlfilt_do_preview (preview); @@ -409,9 +424,9 @@ pluginCoreIA (struct piArgs *argp) GTK_SIGNAL_FUNC (nlfilt_double_adjustment_update), &argp->radius); - gtk_widget_show(table); + gtk_widget_show (table); - gtk_widget_show(dlg); + gtk_widget_show (dlg); gtk_main (); gdk_flush (); @@ -479,6 +494,124 @@ nlfilt_do_preview (GtkWidget *w) g_free (dst); } +static void +mw_preview_toggle_callback (GtkWidget *widget, + gpointer data) +{ + gimp_toggle_button_update (widget, data); + + if (do_preview) + nlfilt_do_preview (NULL); +} + +static struct mwPreview * +mw_preview_build_virgin (GDrawable *drw) +{ + struct mwPreview *mwp; + + mwp = g_new (struct mwPreview, 1); + + if (drw->width > drw->height) + { + mwp->scale = (gdouble) drw->width / (gdouble) PREVIEW_SIZE; + mwp->width = PREVIEW_SIZE; + mwp->height = drw->height / mwp->scale; + } + else + { + mwp->scale = (gdouble) drw->height / (gdouble) PREVIEW_SIZE; + mwp->height = PREVIEW_SIZE; + mwp->width = drw->width / mwp->scale; + } + + mwp->bpp = 3; + mwp->bits = NULL; + + return mwp; +} + +static struct mwPreview * +mw_preview_build (GDrawable *drw) +{ + struct mwPreview *mwp; + gint x, y, b; + guchar *bc; + guchar *drwBits; + GPixelRgn pr; + + mwp = mw_preview_build_virgin (drw); + + gimp_pixel_rgn_init (&pr, drw, 0, 0, drw->width, drw->height, FALSE, FALSE); + drwBits = g_new (guchar, drw->width * drw->bpp); + + bc = mwp->bits = g_new (guchar, mwp->width * mwp->height * mwp->bpp); + for (y = 0; y < mwp->height; y++) + { + gimp_pixel_rgn_get_row (&pr, drwBits, 0, (int)(y*mwp->scale), drw->width); + + for (x = 0; x < mwp->width; x++) + { + for (b = 0; b < mwp->bpp; b++) + *bc++ = *(drwBits + + ((gint) (x * mwp->scale) * drw->bpp) + b % drw->bpp); + } + } + g_free (drwBits); + + return mwp; +} + +static GtkWidget * +mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp) +{ + GtkWidget *preview; + GtkWidget *frame; + GtkWidget *pframe; + GtkWidget *vbox; + GtkWidget *button; + guchar *color_cube; + + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + color_cube = gimp_color_cube (); + gtk_preview_set_color_cube (color_cube[0], color_cube[1], + color_cube[2], color_cube[3]); + + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); + + frame = gtk_frame_new (_("Preview")); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_start (GTK_BOX (parent), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME(pframe), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (vbox), pframe, FALSE, FALSE, 0); + gtk_widget_show (pframe); + + preview = gtk_preview_new (GTK_PREVIEW_COLOR); + gtk_preview_size (GTK_PREVIEW (preview), mwp->width, mwp->height); + gtk_container_add (GTK_CONTAINER (pframe), preview); + gtk_widget_show (preview); + + button = gtk_check_button_new_with_label (_("Do Preview")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), do_preview); + gtk_signal_connect (GTK_OBJECT (button), "toggled", + GTK_SIGNAL_FUNC (mw_preview_toggle_callback), + &do_preview); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + return preview; +} + /* pnmnlfilt.c - 4 in 1 (2 non-linear) filter ** - smooth an anyimage ** - do alpha trimmed mean filtering on an anyimage diff --git a/plug-ins/common/nova.c b/plug-ins/common/nova.c index 4e0c9b0099..7f6b459377 100644 --- a/plug-ins/common/nova.c +++ b/plug-ins/common/nova.c @@ -77,10 +77,6 @@ static char rcsid[] = "$Id$"; /* Some useful macros */ -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - #if 0 #define DEBUG1 printf #else @@ -881,14 +877,16 @@ nova_center_preview_events (GtkWidget *widget, ################################################################ */ -static double +static gdouble gauss (void) { - double sum=0; - int i; - for(i=0; i<6; i++) - sum+=(double)rand()/RAND_MAX; - return sum/6; + gdouble sum = 0; + gint i; + + for (i = 0; i < 6; i++) + sum += (gdouble) rand () / G_MAXRAND; + + return sum / 6; } static void @@ -934,7 +932,7 @@ nova (GDrawable *drawable) { spoke[i] = gauss(); h += ((gdouble) pvals.randomhue / 360.0 * - ((gdouble) rand() / (gdouble) RAND_MAX - 0.5)); + ((gdouble) rand() / (gdouble) G_MAXRAND - 0.5)); if (h < 0) h += 1.0; else if (h >= 1.0) diff --git a/plug-ins/common/papertile.c b/plug-ins/common/papertile.c index ab1e4726f4..9deb661cbb 100644 --- a/plug-ins/common/papertile.c +++ b/plug-ins/common/papertile.c @@ -26,8 +26,9 @@ #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include +#include #include "libgimp/stdplugins-intl.h" @@ -37,7 +38,6 @@ #define PLUGIN_PROCEDURE_NAME "plug_in_papertile" - /*============================================================================*/ /* TYPES */ /*============================================================================*/ @@ -62,488 +62,381 @@ typedef enum typedef struct _PluginParams PluginParams; struct _PluginParams { - gint32 tile_size; - gint32 division_x; - gint32 division_y; - gdouble move_max_rate; - FractionalType fractional_type; - gboolean centering; - gboolean wrap_around; - BackgroundType background_type; - guchar background_color[4]; + gint32 tile_size; + gint32 division_x; + gint32 division_y; + gdouble move_max_rate; + FractionalType fractional_type; + gboolean centering; + gboolean wrap_around; + BackgroundType background_type; + guchar background_color[4]; }; /*============================================================================*/ /* VARIABLES */ /*============================================================================*/ -static struct { +static struct +{ + PluginParams params; - PluginParams params; - - gint32 image; - GDrawable * drawable; - gboolean drawable_has_alpha; - - struct { - gint x0; - gint y0; - gint x1; - gint y1; - gint width; - gint height; - } selection; - - GRunModeType run_mode; - gboolean run; - -} p = { + gint32 image; + GDrawable *drawable; + gboolean drawable_has_alpha; + struct { - 1, /* tile_size */ - 16, /* division_x */ - 16, /* division_y */ - 25.0, /* move_max_rate */ - FRACTIONAL_TYPE_BACKGROUND, /* fractional_type */ - TRUE, /* centering */ - FALSE, /* wrap_around */ - BACKGROUND_TYPE_INVERTED, /* background_type */ - { 0, 0, 255, 255 } /* background_color[4] */ + gint x0; + gint y0; + gint x1; + gint y1; + gint width; + gint height; + } selection; + + GRunModeType run_mode; + gboolean run; +} p = +{ + { + 1, /* tile_size */ + 16, /* division_x */ + 16, /* division_y */ + 25.0, /* move_max_rate */ + FRACTIONAL_TYPE_BACKGROUND, /* fractional_type */ + TRUE, /* centering */ + FALSE, /* wrap_around */ + BACKGROUND_TYPE_INVERTED, /* background_type */ + { 0, 0, 255, 255 } /* background_color[4] */ }, - 0, /* image */ - NULL, /* drawable */ - FALSE, /* drawable_has_alpha */ + 0, /* image */ + NULL, /* drawable */ + FALSE, /* drawable_has_alpha */ - { 0, 0, 0, 0, 0, 0 }, /* selection */ + { 0, 0, 0, 0, 0, 0 }, /* selection */ - RUN_INTERACTIVE, /* run_mode */ - FALSE /* run */ - + RUN_INTERACTIVE, /* run_mode */ + FALSE /* run */ }; /*----------------------------------------------------------------------------*/ static void -params_save_to_gimp ( void ) +params_save_to_gimp (void) { - gimp_set_data( PLUGIN_PROCEDURE_NAME, &p.params, sizeof p.params ); + gimp_set_data (PLUGIN_PROCEDURE_NAME, &p.params, sizeof p.params); } -/*----------------------------------------------------------------------------*/ - static void -params_load_from_gimp ( void ) +params_load_from_gimp (void) { - gimp_get_data( PLUGIN_PROCEDURE_NAME, &p.params ); - if( 0 < p.params.division_x ){ - p.params.tile_size = p.drawable->width / p.params.division_x; - if( 0 < p.params.tile_size ){ + gimp_get_data (PLUGIN_PROCEDURE_NAME, &p.params); + + if (0 < p.params.division_x) + { + p.params.tile_size = p.drawable->width / p.params.division_x; + if (0 < p.params.tile_size) + { + p.params.division_y = p.drawable->height / p.params.tile_size; + } + } + if (p.params.tile_size <= 0 || + p.params.division_x <= 0 || + p.params.division_y <= 0) + { + p.params.tile_size = MIN (p.drawable->width, p.drawable->height); + p.params.division_x = p.drawable->width / p.params.tile_size; p.params.division_y = p.drawable->height / p.params.tile_size; } - } - if( p.params.tile_size <= 0 || - p.params.division_x <= 0 || p.params.division_y <= 0 ){ - p.params.tile_size = MIN( p.drawable->width, p.drawable->height ); - p.params.division_x = p.drawable->width / p.params.tile_size; - p.params.division_y = p.drawable->height / p.params.tile_size; - } - if( !p.drawable_has_alpha ){ - if( p.params.background_type == BACKGROUND_TYPE_TRANSPARENT ){ - p.params.background_type = BACKGROUND_TYPE_INVERTED; + if (!p.drawable_has_alpha) + { + if (p.params.background_type == BACKGROUND_TYPE_TRANSPARENT) + { + p.params.background_type = BACKGROUND_TYPE_INVERTED; + } + p.params.background_color[3] = 255; } - p.params.background_color[3] = 255; - } } /*============================================================================*/ /* GUI */ /*============================================================================*/ -static struct { - - GtkWidget * dialog; - - GtkAdjustment * tile_size_adj; - GtkAdjustment * division_x_adj; - GtkAdjustment * division_y_adj; - GtkAdjustment * move_max_rate_adj; - - GtkWidget * color_button; - +static struct +{ + GtkObject *tile_size_adj; + GtkObject *division_x_adj; + GtkObject *division_y_adj; } w; - -/*============================================================================*/ -/* ADJUSTMENTS */ -/*============================================================================*/ - -static inline void -adjustments_create ( void ) -{ - w.tile_size_adj = - GTK_ADJUSTMENT( gtk_adjustment_new( p.params.tile_size, 1.0, - MAX(p.drawable->width, - p.drawable->height), - 1.0, 5.0, 1.0 ) ); - w.division_x_adj = - GTK_ADJUSTMENT( gtk_adjustment_new( p.params.division_x, 1.0, - p.drawable->width, 1.0, 5.0, 1.0 ) ); - w.division_y_adj = - GTK_ADJUSTMENT( gtk_adjustment_new( p.params.division_y, 1.0, - p.drawable->height, 1.0, 5.0, 1.0 ) ); - w.move_max_rate_adj = - GTK_ADJUSTMENT( gtk_adjustment_new( p.params.move_max_rate, - 0.0, 100.0, 1.0, 10.0, 1.0 ) ); -} - -/*----------------------------------------------------------------------------*/ - static void -tile_size_adj_changed ( GtkAdjustment *adj ) +tile_size_adj_changed (GtkAdjustment *adj) { - if( p.params.tile_size != (gint)adj->value ){ - p.params.tile_size = adj->value; - p.params.division_x = p.drawable->width / p.params.tile_size; - p.params.division_y = p.drawable->height / p.params.tile_size; - gtk_adjustment_set_value( w.division_x_adj, p.params.division_x ); - gtk_adjustment_set_value( w.division_y_adj, p.params.division_y ); + if (p.params.tile_size != (gint)adj->value) + { + p.params.tile_size = adj->value; + p.params.division_x = p.drawable->width / p.params.tile_size; + p.params.division_y = p.drawable->height / p.params.tile_size; + gtk_adjustment_set_value (GTK_ADJUSTMENT (w.division_x_adj), + p.params.division_x); + gtk_adjustment_set_value (GTK_ADJUSTMENT (w.division_y_adj), + p.params.division_y); } } -/*----------------------------------------------------------------------------*/ - static void -division_x_adj_changed ( GtkAdjustment *adj ) +division_x_adj_changed (GtkAdjustment *adj) { - if( p.params.division_x != (gint)adj->value ){ - p.params.division_x = adj->value; - p.params.tile_size = p.drawable->width / p.params.division_x; - p.params.division_y = - p.drawable->height * p.params.division_x / p.drawable->width; - gtk_adjustment_set_value( w.tile_size_adj, p.params.tile_size ); - gtk_adjustment_set_value( w.division_y_adj, p.params.division_y ); + if (p.params.division_x != (gint)adj->value) + { + p.params.division_x = adj->value; + p.params.tile_size = p.drawable->width / p.params.division_x; + p.params.division_y = + p.drawable->height * p.params.division_x / p.drawable->width; + gtk_adjustment_set_value (GTK_ADJUSTMENT (w.tile_size_adj), + p.params.tile_size); + gtk_adjustment_set_value (GTK_ADJUSTMENT (w.division_y_adj), + p.params.division_y); } } -/*----------------------------------------------------------------------------*/ - static void -division_y_adj_changed ( GtkAdjustment *adj ) +division_y_adj_changed (GtkAdjustment *adj) { - if( p.params.division_y != (gint)adj->value ){ - p.params.division_y = adj->value; - p.params.tile_size = p.drawable->height / p.params.division_y; - p.params.division_x = - p.drawable->width * p.params.division_y / p.drawable->height; - gtk_adjustment_set_value( w.tile_size_adj, p.params.tile_size ); - gtk_adjustment_set_value( w.division_x_adj, p.params.division_x ); + if (p.params.division_y != (gint)adj->value) + { + p.params.division_y = adj->value; + p.params.tile_size = p.drawable->height / p.params.division_y; + p.params.division_x = + p.drawable->width * p.params.division_y / p.drawable->height; + gtk_adjustment_set_value (GTK_ADJUSTMENT (w.tile_size_adj), + p.params.tile_size); + gtk_adjustment_set_value (GTK_ADJUSTMENT (w.division_x_adj), + p.params.division_x); } } -/*----------------------------------------------------------------------------*/ - static void -move_max_rate_adj_changed ( GtkAdjustment *adj ) -{ - p.params.move_max_rate = adj->value; -} - -/*----------------------------------------------------------------------------*/ - -static inline void -adjustments_signal_connect ( void ) -{ - gtk_signal_connect( GTK_OBJECT(w.tile_size_adj), "value_changed", - GTK_SIGNAL_FUNC(tile_size_adj_changed), NULL ); - gtk_signal_connect( GTK_OBJECT(w.division_x_adj), "value_changed", - GTK_SIGNAL_FUNC(division_x_adj_changed), NULL ); - gtk_signal_connect( GTK_OBJECT(w.division_y_adj), "value_changed", - GTK_SIGNAL_FUNC(division_y_adj_changed), NULL ); - gtk_signal_connect( GTK_OBJECT(w.move_max_rate_adj), "value_changed", - GTK_SIGNAL_FUNC(move_max_rate_adj_changed), NULL ); -} - -/*============================================================================*/ -/* DIALOG */ -/*============================================================================*/ - -static void -dialog_ok_clicked ( GtkButton *button ) +dialog_ok_clicked (GtkWidget *widget, + gpointer data) { p.run = TRUE; - gtk_widget_destroy( w.dialog ); -} -/*----------------------------------------------------------------------------*/ + gtk_widget_destroy (GTK_WIDGET (data)); +} static void -dialog_cancel_clicked ( GtkButton *button ) -{ - p.run = FALSE; - gtk_widget_destroy( w.dialog ); -} - -/*----------------------------------------------------------------------------*/ - -static void -dialog_destroyed ( GtkWindow *window ) -{ - gtk_main_quit(); - w.dialog = NULL; -} - -/*----------------------------------------------------------------------------*/ - -static void -fractional_type_toggled ( GtkToggleButton *button, FractionalType *type ) -{ - if( gtk_toggle_button_get_active( button ) ){ - if( *type != p.params.fractional_type ){ - p.params.fractional_type = *type; - } - } -} - -/*----------------------------------------------------------------------------*/ - -static void -centering_toggled ( GtkToggleButton *button ) -{ - p.params.centering = gtk_toggle_button_get_active( button ); -} - -/*----------------------------------------------------------------------------*/ - -static void -wrap_around_toggled ( GtkToggleButton *button ) -{ - p.params.wrap_around = gtk_toggle_button_get_active( button ); -} - -/*----------------------------------------------------------------------------*/ - -static void -background_type_toggled ( GtkToggleButton *button, BackgroundType *type ) -{ - if ( gtk_toggle_button_get_active( button ) ) - { - if( *type != p.params.background_type ) - { - p.params.background_type = *type; - gtk_widget_set_sensitive (w.color_button, - *type == BACKGROUND_TYPE_COLOR); - } - } -} - -/*----------------------------------------------------------------------------*/ - -static inline void dialog_create (void) { - GtkWidget *main_vbox; + GtkWidget *dialog; GtkWidget *main_hbox; GtkWidget *button; + GtkObject *adjustment; GtkWidget *vbox; GtkWidget *table; GtkWidget *frame; GtkWidget *box; - GtkWidget *label; + GtkWidget *color_button; + GtkWidget *sep; - /* SPECIAL WIDGETS */ - adjustments_create (); + dialog = gimp_dialog_new (_("Paper Tile"), "papertile", + gimp_plugin_help_func, "filters/papertile.html", + GTK_WIN_POS_MOUSE, + FALSE, FALSE, FALSE, - /* DIALOG WINDOW */ - w.dialog = gimp_dialog_new (_("Paper Tile"), "papertile", - gimp_plugin_help_func, "filters/papertile.html", - GTK_WIN_POS_MOUSE, - FALSE, FALSE, FALSE, + _("OK"), dialog_ok_clicked, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, - _("OK"), dialog_ok_clicked, - NULL, NULL, NULL, TRUE, FALSE, - _("Cancel"), dialog_cancel_clicked, - NULL, NULL, NULL, FALSE, TRUE, + NULL); - NULL); - - gtk_signal_connect (GTK_OBJECT (w.dialog), "destroy", - GTK_SIGNAL_FUNC (dialog_destroyed), + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", + GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - /* MAIN LAYOUT */ - main_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (w.dialog)->vbox), main_vbox); + main_hbox = gtk_hbox_new (FALSE, 5); + gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 6); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), main_hbox); + gtk_widget_show (main_hbox); - main_hbox = gtk_hbox_new (TRUE, 5); - gtk_box_pack_start (GTK_BOX (main_vbox), main_hbox, TRUE, TRUE, 0); - - /* L */ - vbox = gtk_vbox_new( FALSE, 5 ); - gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 ); - gtk_box_pack_start( GTK_BOX(main_hbox), vbox, TRUE, TRUE, 0 ); + /* Left */ + vbox = gtk_vbox_new (FALSE, 4); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); + gtk_widget_show (vbox); frame = gtk_frame_new (_("Division")); - gtk_container_set_border_width( GTK_CONTAINER(frame), 5 ); - gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 ); - table = gtk_table_new( 3, 2, FALSE ); - gtk_container_set_border_width( GTK_CONTAINER(table), 5 ); - gtk_container_add( GTK_CONTAINER(frame), table ); - label = gtk_label_new( _("X:") ); - gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 0, 1 ); - button = gtk_spin_button_new( w.division_x_adj, 1.5, 0 ); - gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 0, 1 ); - label = gtk_label_new( _("Y:") ); - gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 1, 2 ); - button = gtk_spin_button_new( w.division_y_adj, 1.5, 0 ); - gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 1, 2 ); - label = gtk_label_new( _("Size:") ); - gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 2, 3 ); - button = gtk_spin_button_new( w.tile_size_adj, 1.5, 0 ); - gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 2, 3 ); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); - frame = gtk_frame_new( _("Fractional Pixels") ); - gtk_container_set_border_width( GTK_CONTAINER(frame), 5 ); - gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 ); - box = gtk_vbox_new( FALSE, 0 ); - gtk_container_set_border_width( GTK_CONTAINER(box), 5 ); - gtk_container_add( GTK_CONTAINER(frame), box ); - { - gint i; - GSList *group = NULL; - static FractionalType type[] = { - FRACTIONAL_TYPE_BACKGROUND, - FRACTIONAL_TYPE_IGNORE, - FRACTIONAL_TYPE_FORCE - }; - static const gchar *name[] = { - N_("Background"), - N_("Ignore"), - N_("Force") - }; - for( i = 0; i < 3; i++ ){ - button = gtk_radio_button_new_with_label( group, gettext (name[i]) ); - gtk_signal_connect( GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(fractional_type_toggled), &type[i] ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(button), - p.params.fractional_type == type[i] ); - gtk_box_pack_start( GTK_BOX(box), button, TRUE, TRUE, 0 ); - group = gtk_radio_button_group( GTK_RADIO_BUTTON(button) ); - } - } - button = gtk_check_button_new_with_label( _("Centering") ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(button), - p.params.centering ); - gtk_signal_connect( GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(centering_toggled), NULL ); - gtk_box_pack_start( GTK_BOX(box), button, TRUE, TRUE, 0 ); - - /* R */ - vbox = gtk_vbox_new( FALSE, 5 ); - gtk_container_set_border_width( GTK_CONTAINER(vbox), 0 ); - gtk_box_pack_start( GTK_BOX(main_hbox), vbox, TRUE, TRUE, 0 ); - - frame = gtk_frame_new( _("Movement") ); - gtk_container_set_border_width( GTK_CONTAINER(frame), 5 ); - gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 ); - table = gtk_table_new( 2, 2, FALSE ); - gtk_container_set_border_width( GTK_CONTAINER(table), 5 ); - gtk_container_add( GTK_CONTAINER(frame), table ); - label = gtk_label_new( _("Max(%):") ); - gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 0, 1 ); - button = gtk_spin_button_new( w.move_max_rate_adj, 1.5, 0 ); - gtk_table_attach_defaults( GTK_TABLE(table), button, 1, 2, 0, 1 ); - button = gtk_check_button_new_with_label( _("Wrap Around") ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(button), - p.params.wrap_around ); - gtk_signal_connect( GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(wrap_around_toggled), NULL ); - gtk_table_attach_defaults( GTK_TABLE(table), button, 0, 2, 1, 2 ); + table = gtk_table_new (3, 2, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_widget_show (table); - frame = gtk_frame_new( _("Background Type") ); - gtk_container_set_border_width( GTK_CONTAINER(frame), 5 ); - gtk_box_pack_start( GTK_BOX(vbox), frame, TRUE, FALSE, 0 ); - box = gtk_vbox_new( FALSE, 0 ); - gtk_container_set_border_width( GTK_CONTAINER(box), 5 ); - gtk_container_add( GTK_CONTAINER(frame), box ); - { - gint i; - GSList *group = NULL; - static BackgroundType type[] = { - BACKGROUND_TYPE_TRANSPARENT, - BACKGROUND_TYPE_INVERTED, - BACKGROUND_TYPE_IMAGE, - BACKGROUND_TYPE_FOREGROUND, - BACKGROUND_TYPE_BACKGROUND, - BACKGROUND_TYPE_COLOR - }; - static const gchar *name[] = { - N_("Transparent"), - N_("Inverted Image"), - N_("Image"), - N_("Foreground Color"), - N_("Background Color"), - N_("Custom Color") - }; - for( i = p.drawable_has_alpha ? 0 : 1; i < 6; i++ ){ - if( type[i] != BACKGROUND_TYPE_COLOR ){ - button = gtk_radio_button_new_with_label( group, gettext (name[i]) ); - } else { - button = gtk_radio_button_new (group ); - gtk_container_set_border_width (GTK_CONTAINER (button), 0); - w.color_button = gimp_color_button_new (_("Background Color"), 100, 16, - p.params.background_color, - p.drawable_has_alpha ? 4 : 3); - gtk_widget_set_sensitive (w.color_button, - p.params.background_type == BACKGROUND_TYPE_COLOR); - gtk_container_add (GTK_CONTAINER (button), w.color_button); - } - gtk_signal_connect( GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(background_type_toggled), &type[i] ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(button), - p.params.background_type == type[i] ); - gtk_box_pack_start( GTK_BOX(box), button, TRUE, TRUE, 0 ); - group = gtk_radio_button_group( GTK_RADIO_BUTTON(button) ); - } - } + button = gimp_spin_button_new (&w.division_x_adj, p.params.division_x, + 1.0, p.drawable->width, 1.0, 5.0, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("X:"), 1.0, 0.5, + button, TRUE); + gtk_signal_connect (GTK_OBJECT (w.division_x_adj), "value_changed", + GTK_SIGNAL_FUNC (division_x_adj_changed), + NULL); - /* SIGNALS */ - adjustments_signal_connect(); + button = gimp_spin_button_new (&w.division_y_adj, p.params.division_y, + 1.0, p.drawable->width, 1.0, 5.0, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Y:"), 1.0, 0.5, + button, TRUE); + gtk_signal_connect (GTK_OBJECT (w.division_y_adj), "value_changed", + GTK_SIGNAL_FUNC (division_y_adj_changed), + NULL); - gtk_widget_show_all( w.dialog ); + button = gimp_spin_button_new (&w.tile_size_adj, p.params.tile_size, + 1.0, MAX (p.drawable->width, + p.drawable->height), + 1.0, 5.0, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Size:"), 1.0, 0.5, + button, TRUE); + gtk_signal_connect (GTK_OBJECT (w.tile_size_adj), "value_changed", + GTK_SIGNAL_FUNC (tile_size_adj_changed), + NULL); + + frame = gimp_radio_group_new2 (TRUE, _("Fractional Pixels"), + gimp_radio_button_update, + &p.params.fractional_type, + (gpointer) p.params.fractional_type, + + _("Background"), + (gpointer) FRACTIONAL_TYPE_BACKGROUND, NULL, + _("Ignore"), + (gpointer) FRACTIONAL_TYPE_IGNORE, NULL, + _("Force"), + (gpointer) FRACTIONAL_TYPE_FORCE, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + + box = GTK_BIN (frame)->child; + + sep = gtk_hseparator_new (); + gtk_box_pack_start (GTK_BOX (box), sep, FALSE, FALSE, 1); + gtk_widget_show (sep); + + button = gtk_check_button_new_with_label(_("Centering")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), p.params.centering); + gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (button), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &p.params.centering); + gtk_widget_show (button); + + /* Right */ + vbox = gtk_vbox_new (FALSE, 4); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); + gtk_widget_show (vbox); + + frame = gtk_frame_new (_("Movement")); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_widget_show (table); + + button = gimp_spin_button_new (&adjustment, p.params.move_max_rate, + 0.0, 100.0, 1.0, 10.0, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Max (%):"), 1.0, 0.5, + button, TRUE); + gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &p.params.move_max_rate); + + button = gtk_check_button_new_with_label (_("Wrap Around")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + p.params.wrap_around); + gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 2, 1, 2); + gtk_signal_connect (GTK_OBJECT (button), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &p.params.wrap_around); + gtk_widget_show (button); + + frame = gimp_radio_group_new2 (TRUE, _("Background Type"), + gimp_radio_button_update, + &p.params.background_type, + (gpointer) p.params.background_type, + + _("Transparent"), + (gpointer) BACKGROUND_TYPE_TRANSPARENT, NULL, + _("Inverted Image"), + (gpointer) BACKGROUND_TYPE_INVERTED, NULL, + _("Image"), + (gpointer) BACKGROUND_TYPE_IMAGE, NULL, + _("Foreground Color"), + (gpointer) BACKGROUND_TYPE_FOREGROUND, NULL, + _("Background Color"), + (gpointer) BACKGROUND_TYPE_BACKGROUND, NULL, + (gpointer) 1, /* button without label */ + (gpointer) BACKGROUND_TYPE_COLOR, &button, + + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + + color_button = gimp_color_button_new (_("Background Color"), 100, 16, + p.params.background_color, + p.drawable_has_alpha ? 4 : 3); + gtk_container_add (GTK_CONTAINER (button), color_button); + gtk_widget_show (color_button); + + gtk_widget_set_sensitive (color_button, + p.params.background_type == BACKGROUND_TYPE_COLOR); + gtk_object_set_data (GTK_OBJECT (button), "set_sensitive", color_button); + + gtk_widget_show (dialog); } -/*----------------------------------------------------------------------------*/ - static inline void -open_dialog ( void ) +open_dialog (void) { gint argc; gchar **argv; - guchar *ccube; + guchar *color_cube; - p.run = FALSE; argc = 1; - argv = g_new( gchar *, 1 ); - argv[0] = g_strdup( PLUGIN_PROCEDURE_NAME ); - ccube = gimp_color_cube(); + argv = g_new (gchar *, 1); + argv[0] = g_strdup (PLUGIN_PROCEDURE_NAME); - gtk_init( &argc, &argv ); - gtk_set_locale(); - gtk_rc_parse( gimp_gtkrc() ); - gdk_set_use_xshm( gimp_use_xshm() ); + gtk_init (&argc, &argv); + gtk_set_locale (); + gtk_rc_parse (gimp_gtkrc ()); + gdk_set_use_xshm (gimp_use_xshm ()); - gtk_preview_set_gamma( gimp_gamma() ); - gtk_preview_set_install_cmap( gimp_install_cmap() ); - gtk_preview_set_color_cube( ccube[0], ccube[1], ccube[2], ccube[3] ); - gtk_widget_set_default_visual( gtk_preview_get_visual() ); - gtk_widget_set_default_colormap( gtk_preview_get_cmap() ); + color_cube = gimp_color_cube (); + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + gtk_preview_set_color_cube (color_cube[0], color_cube[1], + color_cube[2], color_cube[3]); + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); - dialog_create(); - gtk_main(); + dialog_create (); - g_free( argv[0] ); - g_free( argv ); + gtk_main (); + gdk_flush (); + + g_free (argv[0]); + g_free (argv); } /*============================================================================*/ @@ -553,46 +446,47 @@ open_dialog ( void ) typedef struct _Tile Tile; struct _Tile { - guint x; - guint y; - gint z; - guint width; - guint height; - gint move_x; - gint move_y; + guint x; + guint y; + gint z; + guint width; + guint height; + gint move_x; + gint move_y; }; -/*----------------------------------------------------------------------------*/ - -static int -tile_compare ( const void * x, const void * y ) +static gint +tile_compare (const void *x, + const void *y) { - return ((Tile *)x)->z - ((Tile *)y)->z; + return ((Tile *) x)->z - ((Tile *) y)->z; } /*----------------------------------------------------------------------------*/ static inline gdouble -drand ( void ) +drand (void) { - static gdouble R = 2.0 / (gdouble)RAND_MAX; - return (gdouble)rand() * R - 1.0; + static gdouble R = 2.0 / (gdouble) G_MAXRAND; + return (gdouble) rand () * R - 1.0; } -/*----------------------------------------------------------------------------*/ - static inline void -random_move ( gint *x, gint *y, gint max ){ - gdouble angle = drand() * 3.141592658979323846; - gdouble radius = drand() * (gdouble)max; - *x = (gint)( radius * cos( angle ) ); - *y = (gint)( radius * sin( angle ) ); +random_move (gint *x, + gint *y, + gint max) +{ + gdouble angle = drand () * G_PI; + gdouble radius = drand () * (gdouble) max; + *x = (gint) (radius * cos (angle)); + *y = (gint) (radius * sin (angle)); } /*----------------------------------------------------------------------------*/ static void -overlap_RGB ( guchar * base, const guchar * top ) +overlap_RGB (guchar *base, + const guchar *top) { base[0] = top[0]; base[1] = top[1]; @@ -600,297 +494,358 @@ overlap_RGB ( guchar * base, const guchar * top ) } static void -overlap_RGBA ( guchar * base, const guchar * top ) +overlap_RGBA (guchar *base, + const guchar *top) { - gdouble R1 = (gdouble)base[0] / 255.0; - gdouble G1 = (gdouble)base[1] / 255.0; - gdouble B1 = (gdouble)base[2] / 255.0; - gdouble A1 = (gdouble)base[3] / 255.0; - gdouble R2 = (gdouble) top[0] / 255.0; - gdouble G2 = (gdouble) top[1] / 255.0; - gdouble B2 = (gdouble) top[2] / 255.0; - gdouble A2 = (gdouble) top[3] / 255.0; - gdouble A3 = A2 + A1 * ( 1.0 - A2 ); - if( 0.0 < A3 ){ - gdouble R3 = ( R1 * A1 * ( 1.0 - A2 ) + R2 * A2 ) / A3; - gdouble G3 = ( G1 * A1 * ( 1.0 - A2 ) + G2 * A2 ) / A3; - gdouble B3 = ( B1 * A1 * ( 1.0 - A2 ) + B2 * A2 ) / A3; - R3 = CLAMP( R3, 0.0, 1.0 ); - G3 = CLAMP( G3, 0.0, 1.0 ); - B3 = CLAMP( B3, 0.0, 1.0 ); - base[0] = (guchar)( R3 * 255.0 ); - base[1] = (guchar)( G3 * 255.0 ); - base[2] = (guchar)( B3 * 255.0 ); - base[3] = (guchar)( A3 * 255.0 ); - } else { - base[0] = 0; - base[1] = 0; - base[2] = 0; - base[3] = 0; - } + gdouble R1 = (gdouble) base[0] / 255.0; + gdouble G1 = (gdouble) base[1] / 255.0; + gdouble B1 = (gdouble) base[2] / 255.0; + gdouble A1 = (gdouble) base[3] / 255.0; + gdouble R2 = (gdouble) top[0] / 255.0; + gdouble G2 = (gdouble) top[1] / 255.0; + gdouble B2 = (gdouble) top[2] / 255.0; + gdouble A2 = (gdouble) top[3] / 255.0; + gdouble A3 = A2 + A1 * (1.0 - A2); + if(0.0 < A3) + { + gdouble R3 = (R1 * A1 * (1.0 - A2) + R2 * A2) / A3; + gdouble G3 = (G1 * A1 * (1.0 - A2) + G2 * A2) / A3; + gdouble B3 = (B1 * A1 * (1.0 - A2) + B2 * A2) / A3; + R3 = CLAMP (R3, 0.0, 1.0); + G3 = CLAMP (G3, 0.0, 1.0); + B3 = CLAMP (B3, 0.0, 1.0); + base[0] = (guchar) (R3 * 255.0); + base[1] = (guchar) (G3 * 255.0); + base[2] = (guchar) (B3 * 255.0); + base[3] = (guchar) (A3 * 255.0); + } + else + { + base[0] = 0; + base[1] = 0; + base[2] = 0; + base[3] = 0; + } } /*----------------------------------------------------------------------------*/ static inline void -filter ( void ) +filter (void) { - static void (* overlap)( guchar *, const guchar * ); - GPixelRgn src; - GPixelRgn dst; - guchar pixel[4]; - gint division_x; - gint division_y; - gint offset_x; - gint offset_y; - Tile * tiles; - gint numof_tiles; - Tile * t; - gint i; - gint x; - gint y; - gint move_max_pixels; - guchar * row_buffer; - gint clear_x0; - gint clear_y0; - gint clear_x1; - gint clear_y1; - gint clear_width; - gint clear_height; - guchar * pixels; - guchar * buffer; - gint dindex; - gint sindex; - gint px, py; + static void (* overlap)(guchar *, const guchar *); + GPixelRgn src; + GPixelRgn dst; + guchar pixel[4]; + gint division_x; + gint division_y; + gint offset_x; + gint offset_y; + Tile *tiles; + gint numof_tiles; + Tile *t; + gint i; + gint x; + gint y; + gint move_max_pixels; + guchar *row_buffer; + gint clear_x0; + gint clear_y0; + gint clear_x1; + gint clear_y1; + gint clear_width; + gint clear_height; + guchar *pixels; + guchar *buffer; + gint dindex; + gint sindex; + gint px, py; /* INITIALIZE */ - gimp_pixel_rgn_init( &src, p.drawable, 0, 0, - p.drawable->width, p.drawable->height, FALSE, FALSE ); - gimp_pixel_rgn_init( &dst, p.drawable, 0, 0, - p.drawable->width, p.drawable->height, TRUE, TRUE ); - row_buffer = g_new( guchar, p.drawable->bpp * p.drawable->width ); - pixels = g_new( guchar, - p.drawable->bpp * p.drawable->width * p.drawable->height ); - buffer = g_new( guchar, - p.drawable->bpp * p.params.tile_size * p.params.tile_size ); + gimp_pixel_rgn_init (&src, p.drawable, 0, 0, + p.drawable->width, p.drawable->height, FALSE, FALSE); + gimp_pixel_rgn_init (&dst, p.drawable, 0, 0, + p.drawable->width, p.drawable->height, TRUE, TRUE); + row_buffer = g_new (guchar, p.drawable->bpp * p.drawable->width); + pixels = g_new (guchar, + p.drawable->bpp * p.drawable->width * p.drawable->height); + buffer = g_new (guchar, + p.drawable->bpp * p.params.tile_size * p.params.tile_size); overlap = p.drawable_has_alpha ? overlap_RGBA : overlap_RGB; - gimp_progress_init( "Paper Tile..." ); - + gimp_progress_init ("Paper Tile..."); /* TILES */ - srand( 0 ); + srand (0); division_x = p.params.division_x; division_y = p.params.division_y; - if( p.params.fractional_type == FRACTIONAL_TYPE_FORCE ){ - if( 0 < p.drawable->width % p.params.tile_size ) division_x++; - if( 0 < p.drawable->height % p.params.tile_size ) division_y++; - if( p.params.centering ){ - if( 1 < p.drawable->width % p.params.tile_size ){ - division_x++; - offset_x = - ( p.drawable->width % p.params.tile_size ) / 2 - p.params.tile_size; - } else { - offset_x = 0; - } - if( 1 < p.drawable->height % p.params.tile_size ){ - division_y++; - offset_y = - ( p.drawable->height % p.params.tile_size ) / 2 - p.params.tile_size; - } else { - offset_y = 0; - } - } else { - offset_x = 0; - offset_y = 0; + if (p.params.fractional_type == FRACTIONAL_TYPE_FORCE) + { + if (0 < p.drawable->width % p.params.tile_size) division_x++; + if (0 < p.drawable->height % p.params.tile_size) division_y++; + if (p.params.centering) + { + if (1 < p.drawable->width % p.params.tile_size) + { + division_x++; + offset_x = + (p.drawable->width % p.params.tile_size) / 2 - + p.params.tile_size; + } + else + { + offset_x = 0; + } + if (1 < p.drawable->height % p.params.tile_size) + { + division_y++; + offset_y = + (p.drawable->height % p.params.tile_size) / 2 - + p.params.tile_size; + } + else + { + offset_y = 0; + } + } + else + { + offset_x = 0; + offset_y = 0; + } } - } else { - if( p.params.centering ){ - offset_x = ( p.drawable->width % p.params.tile_size ) / 2; - offset_y = ( p.drawable->height % p.params.tile_size ) / 2; - } else { - offset_x = 0; - offset_y = 0; + else + { + if (p.params.centering) + { + offset_x = (p.drawable->width % p.params.tile_size) / 2; + offset_y = (p.drawable->height % p.params.tile_size) / 2; + } + else + { + offset_x = 0; + offset_y = 0; + } } - } move_max_pixels = p.params.move_max_rate * p.params.tile_size / 100.0; numof_tiles = division_x * division_y; - t = tiles = g_new( Tile, numof_tiles ); - for( y = 0; y < division_y; y++ ){ - gint srcy = offset_y + p.params.tile_size * y; - for( x = 0; x < division_x; x++, t++ ){ - gint srcx = offset_x + p.params.tile_size * x; - if( srcx < 0 ){ - t->x = 0; - t->width = srcx + p.params.tile_size; - } else if( srcx + p.params.tile_size < p.drawable->width ){ - t->x = srcx; - t->width = p.params.tile_size; - } else { - t->x = srcx; - t->width = p.drawable->width - srcx; - } - if( srcy < 0 ){ - t->y = 0; - t->height = srcy + p.params.tile_size; - } else if( srcy + p.params.tile_size < p.drawable->height ){ - t->y = srcy; - t->height = p.params.tile_size; - } else { - t->y = srcy; - t->height = p.drawable->height - srcy; - } - t->z = rand(); - random_move( &t->move_x, &t->move_y, move_max_pixels ); + t = tiles = g_new(Tile, numof_tiles); + for (y = 0; y < division_y; y++) + { + gint srcy = offset_y + p.params.tile_size * y; + for (x = 0; x < division_x; x++, t++) + { + gint srcx = offset_x + p.params.tile_size * x; + if (srcx < 0) + { + t->x = 0; + t->width = srcx + p.params.tile_size; + } + else if (srcx + p.params.tile_size < p.drawable->width) + { + t->x = srcx; + t->width = p.params.tile_size; + } + else + { + t->x = srcx; + t->width = p.drawable->width - srcx; + } + if (srcy < 0) + { + t->y = 0; + t->height = srcy + p.params.tile_size; + } + else if (srcy + p.params.tile_size < p.drawable->height) + { + t->y = srcy; + t->height = p.params.tile_size; + } + else + { + t->y = srcy; + t->height = p.drawable->height - srcy; + } + t->z = rand (); + random_move (&t->move_x, &t->move_y, move_max_pixels); + } } - } - qsort( tiles, numof_tiles, sizeof *tiles, tile_compare ); + qsort (tiles, numof_tiles, sizeof *tiles, tile_compare); /* CLEAR PIXELS */ - for( y = 0; y < p.drawable->height; y++ ){ - gimp_pixel_rgn_get_row - ( &src, - &pixels[p.drawable->bpp*p.drawable->width*y], - 0, y, p.drawable->width ); - } - if( p.params.fractional_type == FRACTIONAL_TYPE_IGNORE ){ - clear_x0 = offset_x; - clear_y0 = offset_y; - clear_width = p.params.tile_size * division_x; - clear_height = p.params.tile_size * division_y; - } else { - clear_x0 = 0; - clear_y0 = 0; - clear_width = p.drawable->width; - clear_height = p.drawable->height; - } - clear_x1 = clear_x0 + clear_width; - clear_y1 = clear_y0 + clear_height; + for (y = 0; y < p.drawable->height; y++) + { + gimp_pixel_rgn_get_row (&src, + &pixels[p.drawable->bpp*p.drawable->width*y], + 0, y, p.drawable->width); + } + if (p.params.fractional_type == FRACTIONAL_TYPE_IGNORE) + { + clear_x0 = offset_x; + clear_y0 = offset_y; + clear_width = p.params.tile_size * division_x; + clear_height = p.params.tile_size * division_y; + } + else + { + clear_x0 = 0; + clear_y0 = 0; + clear_width = p.drawable->width; + clear_height = p.drawable->height; + } + clear_x1 = clear_x0 + clear_width; + clear_y1 = clear_y0 + clear_height; - switch( p.params.background_type ){ - case BACKGROUND_TYPE_TRANSPARENT: - for( y = clear_y0; y < clear_y1; y++ ){ - for( x = clear_x0; x < clear_x1; x++ ){ - dindex = p.drawable->bpp * ( p.drawable->width * y + x ); - for( i = 0; i < p.drawable->bpp; i++ ){ - pixels[dindex+i] = 0; + switch (p.params.background_type) + { + case BACKGROUND_TYPE_TRANSPARENT: + for (y = clear_y0; y < clear_y1; y++) + { + for (x = clear_x0; x < clear_x1; x++) + { + dindex = p.drawable->bpp * (p.drawable->width * y + x); + for (i = 0; i < p.drawable->bpp; i++) + { + pixels[dindex+i] = 0; + } + } } - } - } - break; - case BACKGROUND_TYPE_INVERTED: - for( y = clear_y0; y < clear_y1; y++ ){ - for( x = clear_x0; x < clear_x1; x++ ){ - dindex = p.drawable->bpp * ( p.drawable->width * y + x ); - pixels[dindex+0] = 255 - pixels[dindex+0]; - pixels[dindex+1] = 255 - pixels[dindex+1]; - pixels[dindex+2] = 255 - pixels[dindex+2]; - } - } - break; - case BACKGROUND_TYPE_IMAGE: - break; - case BACKGROUND_TYPE_FOREGROUND: - gimp_palette_get_foreground( &pixel[0], &pixel[1], &pixel[2] ); - pixel[3] = 255; - for( y = clear_y0; y < clear_y1; y++ ){ - for( x = clear_x0; x < clear_x1; x++ ){ - dindex = p.drawable->bpp * ( p.drawable->width * y + x ); - for( i = 0; i < p.drawable->bpp; i++ ){ - pixels[dindex+i] = pixel[i]; + break; + + case BACKGROUND_TYPE_INVERTED: + for (y = clear_y0; y < clear_y1; y++) + { + for (x = clear_x0; x < clear_x1; x++) + { + dindex = p.drawable->bpp * (p.drawable->width * y + x); + pixels[dindex+0] = 255 - pixels[dindex+0]; + pixels[dindex+1] = 255 - pixels[dindex+1]; + pixels[dindex+2] = 255 - pixels[dindex+2]; + } } - } - } - break; - case BACKGROUND_TYPE_BACKGROUND: - gimp_palette_get_background( &pixel[0], &pixel[1], &pixel[2] ); - pixel[3] = 255; - for( y = clear_y0; y < clear_y1; y++ ){ - for( x = clear_x0; x < clear_x1; x++ ){ - dindex = p.drawable->bpp * ( p.drawable->width * y + x ); - for( i = 0; i < p.drawable->bpp; i++ ){ - pixels[dindex+i] = pixel[i]; + break; + + case BACKGROUND_TYPE_IMAGE: + break; + + case BACKGROUND_TYPE_FOREGROUND: + gimp_palette_get_foreground (&pixel[0], &pixel[1], &pixel[2]); + pixel[3] = 255; + for (y = clear_y0; y < clear_y1; y++) + { + for (x = clear_x0; x < clear_x1; x++) + { + dindex = p.drawable->bpp * (p.drawable->width * y + x); + for (i = 0; i < p.drawable->bpp; i++) + { + pixels[dindex+i] = pixel[i]; + } + } } - } - } - break; - case BACKGROUND_TYPE_COLOR: - pixel[0] = p.params.background_color[0]; - pixel[1] = p.params.background_color[1]; - pixel[2] = p.params.background_color[2]; - pixel[3] = p.params.background_color[3]; - for( y = clear_y0; y < clear_y1; y++ ){ - for( x = clear_x0; x < clear_x1; x++ ){ - dindex = p.drawable->bpp * ( p.drawable->width * y + x ); - for( i = 0; i < p.drawable->bpp; i++ ){ - pixels[dindex+i] = pixel[i]; + break; + + case BACKGROUND_TYPE_BACKGROUND: + gimp_palette_get_background (&pixel[0], &pixel[1], &pixel[2]); + pixel[3] = 255; + for (y = clear_y0; y < clear_y1; y++) + { + for (x = clear_x0; x < clear_x1; x++) + { + dindex = p.drawable->bpp * (p.drawable->width * y + x); + for(i = 0; i < p.drawable->bpp; i++) + { + pixels[dindex+i] = pixel[i]; + } + } } - } + break; + + case BACKGROUND_TYPE_COLOR: + pixel[0] = p.params.background_color[0]; + pixel[1] = p.params.background_color[1]; + pixel[2] = p.params.background_color[2]; + pixel[3] = p.params.background_color[3]; + for (y = clear_y0; y < clear_y1; y++) + { + for (x = clear_x0; x < clear_x1; x++) + { + dindex = p.drawable->bpp * (p.drawable->width * y + x); + for(i = 0; i < p.drawable->bpp; i++) + { + pixels[dindex+i] = pixel[i]; + } + } + } + break; } - break; - } /* DRAW */ - for( t = tiles, i = 0; i < numof_tiles; i++, t++ ){ + for (t = tiles, i = 0; i < numof_tiles; i++, t++) + { + gint x0 = t->x + t->move_x; + gint y0 = t->y + t->move_y; - gint x0 = t->x + t->move_x; - gint y0 = t->y + t->move_y; + gimp_pixel_rgn_get_rect (&src, buffer, t->x, t->y, t->width, t->height); - gimp_pixel_rgn_get_rect( &src, buffer, t->x, t->y, t->width, t->height ); - - for( y = 0; y < t->height; y++ ){ - py = y0 + y; - for( x = 0; x < t->width; x++ ){ - px = x0 + x; - sindex = p.drawable->bpp * ( t->width * y + x ); - if( 0 <= px && px < p.drawable->width && - 0 <= py && py < p.drawable->height ){ - dindex = p.drawable->bpp * ( p.drawable->width * py + px ); - overlap( &pixels[dindex], &buffer[sindex] ); - } else if( p.params.wrap_around ){ - px = ( px + p.drawable->width ) % p.drawable->width; - py = ( py + p.drawable->height ) % p.drawable->height; - dindex = p.drawable->bpp * ( p.drawable->width * py + px ); - overlap( &pixels[dindex], &buffer[sindex] ); + for (y = 0; y < t->height; y++) + { + py = y0 + y; + for (x = 0; x < t->width; x++) + { + px = x0 + x; + sindex = p.drawable->bpp * (t->width * y + x); + if (0 <= px && px < p.drawable->width && + 0 <= py && py < p.drawable->height) + { + dindex = p.drawable->bpp * (p.drawable->width * py + px); + overlap(&pixels[dindex], &buffer[sindex]); + } + else if (p.params.wrap_around) + { + px = (px + p.drawable->width) % p.drawable->width; + py = (py + p.drawable->height) % p.drawable->height; + dindex = p.drawable->bpp * (p.drawable->width * py + px); + overlap(&pixels[dindex], &buffer[sindex]); + } + } } - } - } - - gimp_progress_update( (gdouble)i / (gdouble)numof_tiles / 2.0 ); - } + gimp_progress_update ((gdouble) i / (gdouble) numof_tiles / 2.0); + } /* SEND IT */ - for( y = 0; y < p.drawable->height; y++ ){ - gimp_pixel_rgn_set_row - ( &dst, &pixels[p.drawable->bpp*p.drawable->width*y], - 0, y, p.drawable->width ); - gimp_progress_update - ( (gdouble)y / (gdouble)p.drawable->height / 2.0 + 0.5 ); - } + for (y = 0; y < p.drawable->height; y++) + { + gimp_pixel_rgn_set_row (&dst, &pixels[p.drawable->bpp*p.drawable->width*y], + 0, y, p.drawable->width); + gimp_progress_update ((gdouble) y / + (gdouble) p.drawable->height / 2.0 + 0.5); + } - gimp_drawable_flush( p.drawable ); - gimp_drawable_merge_shadow( p.drawable->id, TRUE ); - gimp_drawable_update( p.drawable->id, p.selection.x0, p.selection.y0, - p.selection.width, p.selection.height ); + gimp_drawable_flush (p.drawable); + gimp_drawable_merge_shadow (p.drawable->id, TRUE); + gimp_drawable_update (p.drawable->id, p.selection.x0, p.selection.y0, + p.selection.width, p.selection.height); /* FREE */ - g_free( buffer ); - g_free( pixels ); - g_free( tiles ); - g_free( row_buffer ); + g_free (buffer); + g_free (pixels); + g_free (tiles); + g_free (row_buffer); } - /*============================================================================*/ /* PLUGIN INTERFACES */ /*============================================================================*/ +MAIN() + static void -plugin_query ( void ) +plugin_query (void) { - static GParamDef args[] = { + static GParamDef args[] = + { { PARAM_INT32, "run_mode", "run mode" }, { PARAM_IMAGE, "image", "input image" }, { PARAM_DRAWABLE, "drawable", "input drawable" }, @@ -904,36 +859,31 @@ plugin_query ( void ) { PARAM_INT32, "background_color", "background color (for bg-type 5)" }, { PARAM_INT32, "background_alpha", "opacity (for bg-type 5)" } }; - static GParamDef * return_vals = NULL; - static gint numof_args = sizeof args / sizeof args[0]; - static gint numof_return_vals = 0; + static GParamDef *return_vals = NULL; + static gint numof_args = sizeof args / sizeof args[0]; + static gint numof_return_vals = 0; INIT_I18N (); - gimp_install_procedure - ( PLUGIN_PROCEDURE_NAME, - _("Cuts an image into paper tiles, and slides each paper tile."), - _("This plug-in cuts an image into paper tiles and slides each paper tile."), - "Hirotsuna Mizuno ", - "Copyright (c)1997-1999 Hirotsuna Mizuno", - _("September 31, 1999"), - N_("/Filters/Map/Paper Tile..."), - "RGB*", - PROC_PLUG_IN, - numof_args, - numof_return_vals, - args, - return_vals ); + gimp_install_procedure (PLUGIN_PROCEDURE_NAME, + _("Cuts an image into paper tiles, and slides each paper tile."), + _("This plug-in cuts an image into paper tiles and slides each paper tile."), + "Hirotsuna Mizuno ", + "Copyright (c)1997-1999 Hirotsuna Mizuno", + _("September 31, 1999"), + N_("/Filters/Map/Paper Tile..."), + "RGB*", + PROC_PLUG_IN, + numof_args, numof_return_vals, + args, return_vals); } -/*----------------------------------------------------------------------------*/ - static void -plugin_run ( gchar * name, - gint numof_params, - GParam * params, - gint * numof_return_vals, - GParam ** return_vals ) +plugin_run (gchar *name, + gint numof_params, + GParam *params, + gint *numof_return_vals, + GParam **return_vals) { GStatusType status; @@ -943,61 +893,74 @@ plugin_run ( gchar * name, p.run = FALSE; p.run_mode = params[0].data.d_int32; p.image = params[1].data.d_image; - p.drawable = gimp_drawable_get( params[2].data.d_drawable ); - p.drawable_has_alpha = gimp_drawable_has_alpha( p.drawable->id ); + p.drawable = gimp_drawable_get(params[2].data.d_drawable); + p.drawable_has_alpha = gimp_drawable_has_alpha(p.drawable->id); - gimp_drawable_mask_bounds( p.drawable->id, + gimp_drawable_mask_bounds (p.drawable->id, &p.selection.x0, &p.selection.y0, - &p.selection.x1, &p.selection.y1 ); + &p.selection.x1, &p.selection.y1); p.selection.width = p.selection.x1 - p.selection.x0; p.selection.height = p.selection.y1 - p.selection.y0; - if( gimp_drawable_is_rgb( p.drawable->id ) ){ - switch( p.run_mode ){ - case RUN_INTERACTIVE: { - params_load_from_gimp(); - p.run = FALSE; - open_dialog(); - } break; - case RUN_NONINTERACTIVE: { - if( numof_params == 11 ){ - p.params.tile_size = params[3].data.d_int32; - p.params.division_x = p.drawable->width / p.params.tile_size; - p.params.division_y = p.drawable->height / p.params.tile_size; - p.params.move_max_rate = params[4].data.d_float; - p.params.fractional_type = (FractionalType)params[5].data.d_int32; - p.params.wrap_around = params[6].data.d_int32; - p.params.centering = params[7].data.d_int32; - p.params.background_type = (BackgroundType)params[8].data.d_int32; - p.params.background_color[0] = params[9].data.d_color.red; - p.params.background_color[1] = params[9].data.d_color.green; - p.params.background_color[2] = params[9].data.d_color.blue; - p.params.background_color[3] = params[10].data.d_int32; - p.run = TRUE; - } else { - status = STATUS_CALLING_ERROR; - } - } break; - case RUN_WITH_LAST_VALS: { - params_load_from_gimp(); - p.run = TRUE; - } break; - } - } else { - status = STATUS_EXECUTION_ERROR; - } + if (gimp_drawable_is_rgb (p.drawable->id)) + { + switch (p.run_mode) + { + case RUN_INTERACTIVE: + params_load_from_gimp (); + open_dialog (); + break; - if( status == STATUS_SUCCESS && p.run ){ - if( p.run_mode == RUN_INTERACTIVE ){ - params_save_to_gimp(); - gimp_undo_push_group_start (p.image); + case RUN_NONINTERACTIVE: + if (numof_params == 11) + { + p.params.tile_size = params[3].data.d_int32; + p.params.division_x = p.drawable->width / p.params.tile_size; + p.params.division_y = p.drawable->height / p.params.tile_size; + p.params.move_max_rate = params[4].data.d_float; + p.params.fractional_type = (FractionalType)params[5].data.d_int32; + p.params.wrap_around = params[6].data.d_int32; + p.params.centering = params[7].data.d_int32; + p.params.background_type = (BackgroundType)params[8].data.d_int32; + p.params.background_color[0] = params[9].data.d_color.red; + p.params.background_color[1] = params[9].data.d_color.green; + p.params.background_color[2] = params[9].data.d_color.blue; + p.params.background_color[3] = params[10].data.d_int32; + p.run = TRUE; + } + else + { + status = STATUS_CALLING_ERROR; + } + break; + + case RUN_WITH_LAST_VALS: + params_load_from_gimp (); + p.run = TRUE; + break; + } } - filter(); - if( p.run_mode == RUN_INTERACTIVE ){ - gimp_undo_push_group_end (p.image); - gimp_displays_flush(); + else + { + status = STATUS_EXECUTION_ERROR; + } + + if (status == STATUS_SUCCESS && p.run) + { + if(p.run_mode == RUN_INTERACTIVE) + { + params_save_to_gimp (); + gimp_undo_push_group_start (p.image); + } + + filter (); + + if (p.run_mode == RUN_INTERACTIVE) + { + gimp_undo_push_group_end (p.image); + gimp_displays_flush (); + } } - } { static GParam return_value[1]; @@ -1008,14 +971,10 @@ plugin_run ( gchar * name, } } -/*============================================================================*/ - -GPlugInInfo PLUG_IN_INFO = { NULL, NULL, plugin_query, plugin_run }; - -MAIN() - -/*============================================================================*/ -/*============================================================================*/ - - - +GPlugInInfo PLUG_IN_INFO = +{ + NULL, + NULL, + plugin_query, + plugin_run +}; diff --git a/plug-ins/common/pat.c b/plug-ins/common/pat.c index 6bffa645e6..284e6fcc8e 100644 --- a/plug-ins/common/pat.c +++ b/plug-ins/common/pat.c @@ -20,8 +20,10 @@ #include #include + #include #include + #include "libgimp/stdplugins-intl.h" #ifdef G_OS_WIN32 @@ -42,28 +44,30 @@ gboolean run_flag = FALSE; /* Declare some local functions. */ -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (gchar *filename); -static gint save_image (gchar *filename, - gint32 image_ID, - gint32 drawable_ID); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); static void init_gtk (void); static gint save_dialog (void); -static void ok_callback (GtkWidget * widget, gpointer data); -static void entry_callback (GtkWidget * widget, gpointer data); +static void ok_callback (GtkWidget *widget, + gpointer data); +static void entry_callback (GtkWidget *widget, + gpointer data); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; @@ -82,8 +86,9 @@ query (void) { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -94,7 +99,7 @@ query (void) { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, { PARAM_STRING, "description", "Short description of the pattern" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -122,47 +127,51 @@ query (void) nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_pat_load", "pat", "", "20,string,GPAT"); - gimp_register_save_handler ("file_pat_save", "pat", ""); + gimp_register_magic_load_handler ("file_pat_load", + "pat", + "", + "20,string,GPAT"); + gimp_register_save_handler ("file_pat_save", + "pat", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; - GStatusType status = STATUS_SUCCESS; run_mode = param[0].data.d_int32; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = -1; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_pat_load") == 0) { INIT_I18N(); image_ID = load_image (param[1].data.d_string); - + if (image_ID != -1) { - values[0].data.d_status = STATUS_SUCCESS; + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } - else + else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } - *nreturn_vals = 2; } else if (strcmp (name, "file_pat_save") == 0) { @@ -174,18 +183,20 @@ run (char *name, { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: - INIT_I18N_UI(); + INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "PAT", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_ALPHA)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_ALPHA)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: - INIT_I18N(); + INIT_I18N(); break; } @@ -193,33 +204,48 @@ run (char *name, { case RUN_INTERACTIVE: /* Possibly retrieve data */ - gimp_get_data("file_pat_save", description); - if (!save_dialog()) - return; + gimp_get_data ("file_pat_save", description); + if (!save_dialog ()) + status = STATUS_CANCEL; break; + case RUN_NONINTERACTIVE: if (nparams != 6) - status = STATUS_CALLING_ERROR; + { + status = STATUS_CALLING_ERROR; + } else - strcpy(description, param[5].data.d_string); + { + strcpy (description, param[5].data.d_string); + } + break; + case RUN_WITH_LAST_VALS: gimp_get_data ("file_pat_save", description); break; } - - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + + if (status == STATUS_SUCCESS) { - gimp_set_data ("file_pat_save", description, 256); - values[0].data.d_status = STATUS_SUCCESS; - } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; - - *nreturn_vals = 1; + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + gimp_set_data ("file_pat_save", description, 256); + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 @@ -391,9 +417,8 @@ static gint save_dialog (void) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *entry; GtkWidget *table; + GtkWidget *entry; dlg = gimp_dialog_new (_("Save as Pattern"), "pat", gimp_plugin_help_func, "filters/pat.html", @@ -413,30 +438,18 @@ save_dialog (void) /* The main table */ table = gtk_table_new (1, 2, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_container_border_width (GTK_CONTAINER (table), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); gtk_widget_show (table); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - - /********************** - * label - **********************/ - label = gtk_label_new (_("Description:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - /************************ - * The entry - ************************/ entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_usize (entry, 200, 0); gtk_entry_set_text (GTK_ENTRY (entry), description); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Description:"), 1.0, 0.5, + entry, FALSE); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (entry_callback), description); diff --git a/plug-ins/common/pcx.c b/plug-ins/common/pcx.c index 85faf221c4..2d5d1e1027 100644 --- a/plug-ins/common/pcx.c +++ b/plug-ins/common/pcx.c @@ -14,22 +14,26 @@ /* Please contact me if you can't use your PCXs with this tool, I want The GIMP to have the best file filters on the planet */ +#include "config.h" + #include #include #include -#include "config.h" -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" + +#include + +#include +#include + #include "libgimp/stdplugins-intl.h" /* Declare plug-in functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); #if defined(_BIG_ENDIAN) || defined(sparc) || defined (__sgi) @@ -48,11 +52,19 @@ static void run (char *name, #define htoql(x) qtohl(x) #define htoqs(x) qtohs(x) -GPlugInInfo PLUG_IN_INFO = { NULL, NULL, query, run, }; +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; MAIN () -static void query () { +static void +query (void) +{ static GParamDef load_args[] = { { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, @@ -63,8 +75,9 @@ static void query () { { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -74,7 +87,7 @@ static void query () { { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -102,62 +115,97 @@ static void query () { nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_pcx_load", "pcx,pcc", "", - "0&,byte,10,2&,byte,1,3&,byte,>0,3,byte,<9"); - gimp_register_save_handler ("file_pcx_save", "pcx,pcc", ""); + gimp_register_magic_load_handler ("file_pcx_load", + "pcx,pcc", + "", + "0&,byte,10,2&,byte,1,3&,byte,>0,3,byte,<9"); + gimp_register_save_handler ("file_pcx_save", + "pcx,pcc", + ""); } /* Declare internal functions. */ static void init_gtk (void); -static gint32 load_image (char *filename); -static void load_1 (FILE *fp, int width, int height, char *buffer, int bytes); -static void load_4 (FILE *fp, int width, int height, char *buffer, int bytes); -static void load_8 (FILE *fp, int width, int height, char *buffer, int bytes); -static void load_24 (FILE *fp, int width, int height, char *buffer, int bytes); -static void readline (FILE *fp, guchar* buffer, int bytes); +static gint32 load_image (gchar *filename); +static void load_1 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes); +static void load_4 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes); +static void load_8 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes); +static void load_24 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes); +static void readline (FILE *fp, + guchar *buffer, + gint bytes); -static gint save_image (char *filename, gint32 image, gint32 layer); -static void save_8 (FILE *fp, int width, int height, guchar *buffer); -static void save_24 (FILE *fp, int width, int height, guchar *buffer); -static void writeline (FILE *fp, guchar *buffer, int bytes); +static gint save_image (gchar *filename, + gint32 image, + gint32 layer); +static void save_8 (FILE *fp, + gint width, + gint height, + guchar *buffer); +static void save_24 (FILE *fp, + gint width, + gint height, + guchar *buffer); +static void writeline (FILE *fp, + guchar *buffer, + gint bytes); /* Plug-in implementation */ -static void -run (char *name, - int nparams, +static void +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GStatusType status = STATUS_SUCCESS; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; - if (strcmp (name, "file_pcx_load") == 0) { + if (strcmp (name, "file_pcx_load") == 0) + { INIT_I18N(); image_ID = load_image (param[1].data.d_string); - if (image_ID != -1) { - *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = image_ID; - } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } + if (image_ID != -1) + { + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_ID; + } + else + { + status = STATUS_EXECUTION_ERROR; + } } else if (strcmp (name, "file_pcx_save") == 0) { @@ -169,18 +217,20 @@ run (char *name, { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: - INIT_I18N_UI(); + INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "PCX", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: - INIT_I18N(); + INIT_I18N(); break; } @@ -201,56 +251,61 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + if (status == STATUS_SUCCESS) { - values[0].data.d_status = STATUS_SUCCESS; - } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + if (! save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + status = STATUS_EXECUTION_ERROR; + } } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } -static void -init_gtk () +static void +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("pcx"); gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } -guchar mono[6]= {0, 0, 0, 255, 255, 255}; +guchar mono[6]= { 0, 0, 0, 255, 255, 255 }; -static struct { - guint8 manufacturer; - guint8 version; - guint8 compression; - guint8 bpp; - gint16 x1, y1; - gint16 x2, y2; - gint16 hdpi; - gint16 vdpi; - guint8 colormap[48]; - guint8 reserved; - guint8 planes; - gint16 bytesperline; - gint16 color; - guint8 filler[58]; +static struct +{ + guint8 manufacturer; + guint8 version; + guint8 compression; + guint8 bpp; + gint16 x1, y1; + gint16 x2, y2; + gint16 hdpi; + gint16 vdpi; + guint8 colormap[48]; + guint8 reserved; + guint8 planes; + gint16 bytesperline; + gint16 color; + guint8 filler[58]; } pcx_header; -static gint32 -load_image (char *filename) +static gint32 +load_image (gchar *filename) { FILE *fd; GDrawable *drawable; @@ -260,66 +315,81 @@ load_image (char *filename) gint32 image, layer; guchar *dest, cmap[768]; - message = g_strdup_printf( _("Loading %s:"), filename); + message = g_strdup_printf (_("Loading %s:"), filename); gimp_progress_init (message); g_free (message); fd = fopen (filename, "rb"); - if (!fd) { - g_message("PCX Can't open\n%s", filename); - return -1; - } + if (!fd) + { + g_message ("PCX: Can't open\n%s", filename); + return -1; + } - if (fread(&pcx_header, 128, 1, fd) == 0) { - g_message("PCX Can't read header from\n%s", filename); - return -1; - } + if (fread (&pcx_header, 128, 1, fd) == 0) + { + g_message ("PCX: Can't read header from\n%s", filename); + return -1; + } - if(pcx_header.manufacturer != 10) { - g_message("%s\nis not a PCX file", filename); - return -1; - } + if (pcx_header.manufacturer != 10) + { + g_message ("%s\nis not a PCX file", filename); + return -1; + } offset_x = qtohs (pcx_header.x1); offset_y = qtohs (pcx_header.y1); width = qtohs (pcx_header.x2) - offset_x + 1; height = qtohs (pcx_header.y2) - offset_y + 1; - if (pcx_header.planes == 3 && pcx_header.bpp == 8) { - image= gimp_image_new (width, height, RGB); - layer= gimp_layer_new (image, _("Background"), width, height, - RGB_IMAGE, 100, NORMAL_MODE); - } else { - image= gimp_image_new (width, height, INDEXED); - layer= gimp_layer_new (image, _("Background"), width, height, - INDEXED_IMAGE, 100, NORMAL_MODE); - } + if (pcx_header.planes == 3 && pcx_header.bpp == 8) + { + image= gimp_image_new (width, height, RGB); + layer= gimp_layer_new (image, _("Background"), width, height, + RGB_IMAGE, 100, NORMAL_MODE); + } + else + { + image= gimp_image_new (width, height, INDEXED); + layer= gimp_layer_new (image, _("Background"), width, height, + INDEXED_IMAGE, 100, NORMAL_MODE); + } gimp_image_set_filename (image, filename); gimp_image_add_layer (image, layer, 0); gimp_layer_set_offsets (layer, offset_x, offset_y); drawable = gimp_drawable_get (layer); - if (pcx_header.planes == 1 && pcx_header.bpp == 1) { - dest = (guchar *) g_malloc (width * height); - load_1(fd, width, height, dest, qtohs (pcx_header.bytesperline)); - gimp_image_set_cmap (image, mono, 2); - } else if (pcx_header.planes == 4 && pcx_header.bpp == 1) { - dest = (guchar *) g_malloc (width * height); - load_4(fd, width, height, dest, qtohs (pcx_header.bytesperline)); - gimp_image_set_cmap (image, pcx_header.colormap, 16); - } else if (pcx_header.planes == 1 && pcx_header.bpp == 8) { - dest = (guchar *) g_malloc (width * height); - load_8(fd, width, height, dest, qtohs (pcx_header.bytesperline)); - fseek(fd, -768L, SEEK_END); - fread(cmap, 768, 1, fd); - gimp_image_set_cmap (image, cmap, 256); - } else if (pcx_header.planes == 3 && pcx_header.bpp == 8) { - dest = (guchar *) g_malloc (width * height * 3); - load_24(fd, width, height, dest, qtohs (pcx_header.bytesperline)); - } else { - g_message("Unusual PCX flavour, giving up"); - return -1; - } + if (pcx_header.planes == 1 && pcx_header.bpp == 1) + { + dest = (guchar *) g_malloc (width * height); + load_1 (fd, width, height, dest, qtohs (pcx_header.bytesperline)); + gimp_image_set_cmap (image, mono, 2); + } + else if (pcx_header.planes == 4 && pcx_header.bpp == 1) + { + dest = (guchar *) g_malloc (width * height); + load_4(fd, width, height, dest, qtohs (pcx_header.bytesperline)); + gimp_image_set_cmap (image, pcx_header.colormap, 16); + } + else if (pcx_header.planes == 1 && pcx_header.bpp == 8) + { + dest = (guchar *) g_malloc (width * height); + load_8(fd, width, height, dest, qtohs (pcx_header.bytesperline)); + fseek(fd, -768L, SEEK_END); + fread(cmap, 768, 1, fd); + gimp_image_set_cmap (image, cmap, 256); + } + else if (pcx_header.planes == 3 && pcx_header.bpp == 8) + { + dest = (guchar *) g_malloc (width * height * 3); + load_24(fd, width, height, dest, qtohs (pcx_header.bytesperline)); + } + else + { + g_message ("Unusual PCX flavour, giving up"); + return -1; + } gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, TRUE, FALSE); gimp_pixel_rgn_set_rect (&pixel_rgn, dest, 0, 0, width, height); @@ -332,116 +402,116 @@ load_image (char *filename) return image; } -static void -load_8 (FILE *fp, - int width, - int height, - char *buffer, - int bytes) +static void +load_8 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes) { int row; guchar *line; - line= (guchar *) g_malloc(bytes); + line = (guchar *) g_malloc (bytes); - for (row= 0; row < height; buffer+= width, ++row) + for (row = 0; row < height; buffer += width, ++row) { - readline(fp, line, bytes); - memcpy(buffer, line, width); + readline (fp, line, bytes); + memcpy (buffer, line, width); gimp_progress_update ((double) row / (double) height); } - g_free(line); + g_free (line); } -static void -load_24 (FILE *fp, - int width, - int height, - char *buffer, - int bytes) +static void +load_24 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes) { int x, y, c; guchar *line; - line= (guchar *) g_malloc(bytes * 3); + line = (guchar *) g_malloc (bytes * 3); - for (y= 0; y < height; buffer+= width * 3, ++y) + for (y = 0; y < height; buffer += width * 3, ++y) { - for (c= 0; c < 3; ++c) + for (c = 0; c < 3; ++c) { - readline(fp, line, bytes); - for (x= 0; x < width; ++x) + readline (fp, line, bytes); + for (x = 0; x < width; ++x) { - buffer[x * 3 + c]= line[x]; + buffer[x * 3 + c] = line[x]; } } gimp_progress_update ((double) y / (double) height); } - - g_free(line); + + g_free (line); } -static void -load_1 (FILE *fp, - int width, - int height, - char *buffer, - int bytes) +static void +load_1 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes) { int x, y; guchar *line; - line= (guchar *) g_malloc(bytes); + line = (guchar *) g_malloc (bytes); - for (y= 0; y < height; buffer+= width, ++y) + for (y = 0; y < height; buffer += width, ++y) { - readline(fp, line, bytes); - for (x= 0; x < width; ++x) + readline (fp, line, bytes); + for (x = 0; x < width; ++x) { if (line[x / 8] & (128 >> (x % 8))) - buffer[x]= 1; + buffer[x] = 1; else - buffer[x]= 0; + buffer[x] = 0; } gimp_progress_update ((double) y / (double) height); } - - g_free(line); + + g_free (line); } -static void -load_4 (FILE *fp, - int width, - int height, - char *buffer, - int bytes) +static void +load_4 (FILE *fp, + gint width, + gint height, + gchar *buffer, + gint bytes) { int x, y, c; guchar *line; - line= (guchar *) g_malloc(bytes); + line= (guchar *) g_malloc (bytes); - for (y= 0; y < height; buffer+= width, ++y) + for (y = 0; y < height; buffer += width, ++y) { - for (x= 0; x < width; ++x) buffer[x]= 0; - for (c= 0; c < 4; ++c) + for (x = 0; x < width; ++x) buffer[x] = 0; + for (c = 0; c < 4; ++c) { readline(fp, line, bytes); - for (x= 0; x < width; ++x) + for (x = 0; x < width; ++x) { if (line[x / 8] & (128 >> (x % 8))) - buffer[x]+= (1 << c); + buffer[x] += (1 << c); } } gimp_progress_update ((double) y / (double) height); } - g_free(line); + g_free (line); } -static void +static void readline (FILE *fp, guchar *buffer, - int bytes) + gint bytes) { - static guchar count= 0, value= 0; + static guchar count = 0, value = 0; if (pcx_header.compression) { @@ -449,29 +519,29 @@ readline (FILE *fp, { if (count == 0) { - value= fgetc(fp); + value = fgetc (fp); if (value < 0xc0) { - count= 1; + count = 1; } else { - count= value - 0xc0; - value= fgetc(fp); + count = value - 0xc0; + value = fgetc (fp); } } count--; - *(buffer++)= value; + *(buffer++) = value; } } else { - fread(buffer, bytes, 1, fp); + fread (buffer, bytes, 1, fp); } } -static gint -save_image (char *filename, +static gint +save_image (gchar *filename, gint32 image, gint32 layer) { @@ -484,14 +554,14 @@ save_image (char *filename, gchar *message; int colors, i; - drawable= gimp_drawable_get(layer); - drawable_type= gimp_drawable_type(layer); + drawable = gimp_drawable_get (layer); + drawable_type = gimp_drawable_type (layer); gimp_drawable_offsets (layer, &offset_x, &offset_y); - width= drawable->width; - height= drawable->height; - gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); + width = drawable->width; + height = drawable->height; + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); - message = g_strdup_printf( _( "Saving %s:"), filename); + message = g_strdup_printf (_("Saving %s:"), filename); gimp_progress_init (message); g_free (message); @@ -499,10 +569,10 @@ save_image (char *filename, pcx_header.version = 5; pcx_header.compression = 1; - switch(drawable_type) + switch (drawable_type) { case INDEXED_IMAGE: - cmap= gimp_image_get_cmap(image, &colors); + cmap = gimp_image_get_cmap (image, &colors); pcx_header.bpp = 8; pcx_header.bytesperline = htoqs (width); pcx_header.planes = 1; @@ -524,19 +594,19 @@ save_image (char *filename, break; default: - g_message("PCX Can't save this image type\nFlatten your image"); - return -1; + g_message ("PCX Can't save this image type\nFlatten your image"); + return FALSE; break; } - + if ((fp = fopen(filename, "wb")) == NULL) { - g_message("PCX Can't open \n%s", filename); - return -1; + g_message ("PCX Can't open \n%s", filename); + return FALSE; } - pixels= (guchar *) g_malloc(width * height * pcx_header.planes); - gimp_pixel_rgn_get_rect(&pixel_rgn, pixels, 0, 0, width, height); + pixels = (guchar *) g_malloc (width * height * pcx_header.planes); + gimp_pixel_rgn_get_rect (&pixel_rgn, pixels, 0, 0, width, height); pcx_header.x1 = htoqs (offset_x); pcx_header.y1 = htoqs (offset_y); @@ -547,111 +617,111 @@ save_image (char *filename, pcx_header.vdpi = htoqs (300); pcx_header.reserved = 0; - fwrite(&pcx_header, 128, 1, fp); + fwrite (&pcx_header, 128, 1, fp); - switch(drawable_type) + switch (drawable_type) { case INDEXED_IMAGE: - save_8(fp, width, height, pixels); - fputc(0x0c, fp); - fwrite(cmap, colors, 3, fp); - for (i= colors; i < 256; i++) + save_8 (fp, width, height, pixels); + fputc (0x0c, fp); + fwrite (cmap, colors, 3, fp); + for (i = colors; i < 256; i++) { - fputc(0, fp); fputc(0, fp); fputc(0, fp); + fputc (0, fp); fputc (0, fp); fputc (0, fp); } break; case RGB_IMAGE: - save_24(fp, width, height, pixels); + save_24 (fp, width, height, pixels); break; case GRAY_IMAGE: - save_8(fp, width, height, pixels); - fputc(0x0c, fp); - for (i= 0; i < 256; i++) + save_8 (fp, width, height, pixels); + fputc (0x0c, fp); + for (i = 0; i < 256; i++) { - fputc((guchar) i, fp); fputc((guchar) i, fp); fputc((guchar) i, fp); + fputc ((guchar) i, fp); fputc ((guchar) i, fp); fputc ((guchar) i, fp); } break; default: - g_message("Can't save this image as PCX\nFlatten your image"); - return -1; + g_message ("Can't save this image as PCX\nFlatten your image"); + return FALSE; break; - } + } - gimp_drawable_detach(drawable); - g_free(pixels); + gimp_drawable_detach (drawable); + g_free (pixels); - fclose(fp); + fclose (fp); return TRUE; } -static void +static void save_8 (FILE *fp, - int width, - int height, + gint width, + gint height, guchar *buffer) { int row; - for (row= 0; row < height; ++row) + for (row = 0; row < height; ++row) { - writeline(fp, buffer, width); - buffer+= width; - gimp_progress_update((double) row / (double) height); + writeline (fp, buffer, width); + buffer += width; + gimp_progress_update ((double) row / (double) height); } } -static void +static void save_24 (FILE *fp, - int width, - int height, + gint width, + gint height, guchar *buffer) { int x, y, c; guchar *line; - line= (guchar *) g_malloc(width); + line = (guchar *) g_malloc (width); - for (y= 0; y < height; ++y) + for (y = 0; y < height; ++y) { - for (c= 0; c < 3; ++c) + for (c = 0; c < 3; ++c) { - for (x= 0; x < width; ++x) + for (x = 0; x < width; ++x) { - line[x]= buffer[(3*x) + c]; + line[x] = buffer[(3*x) + c]; } - writeline(fp, line, width); + writeline (fp, line, width); } - buffer+= width * 3; - gimp_progress_update((double) y / (double) height); + buffer += width * 3; + gimp_progress_update ((double) y / (double) height); } g_free (line); } -static void +static void writeline (FILE *fp, guchar *buffer, - int bytes) + gint bytes) { guchar value, count; - guchar *finish= buffer+ bytes; + guchar *finish = buffer+ bytes; while (buffer < finish) { - value= *(buffer++); - count= 1; + value = *(buffer++); + count = 1; while (buffer < finish && count < 63 && *buffer == value) { count++; buffer++; } - if (value < 0xc0 && count == 1) - { - fputc(value, fp); - } - else - { - fputc(0xc0 + count, fp); - fputc(value, fp); - } + if (value < 0xc0 && count == 1) + { + fputc (value, fp); + } + else + { + fputc (0xc0 + count, fp); + fputc (value, fp); + } } } diff --git a/plug-ins/common/pix.c b/plug-ins/common/pix.c index 9d193cb0bc..8acde04390 100644 --- a/plug-ins/common/pix.c +++ b/plug-ins/common/pix.c @@ -39,18 +39,22 @@ * NOTE: pix and matte files do not support alpha channels or indexed * colour, so neither does this plug-in */ - + static char ident[] = "@(#) GIMP Alias|Wavefront pix image file-plugin v1.0 24-jun-97"; +#include "config.h" + #include #include #include #include #include -#include "config.h" -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" + +#include + +#include +#include + #include "libgimp/stdplugins-intl.h" /* #define PIX_DEBUG */ @@ -68,16 +72,22 @@ static char ident[] = "@(#) GIMP Alias|Wavefront pix image file-plugin v1.0 24- /* Standard Plug-in Functions */ static void query (void); -static void run (char *name, int nparams, GParam *param, - int *nreturn_vals, GParam **return_vals ); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); /* Local Helper Functions */ -static gint32 load_image (char *filename ); -static gint save_image (char *filename, gint32 image_ID, gint32 drawable_ID ); +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); -static guint16 get_short (FILE * file ); -static void put_short (guint16 value, FILE * file ); +static guint16 get_short (FILE *file); +static void put_short (guint16 value, + FILE *file); static void init_gtk (void); @@ -87,35 +97,34 @@ static void init_gtk (void); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () -static void query () -/* - * Description: - * Register the services provided by this plug-in - */ +static void +query (void) { + /* + * Description: + * Register the services provided by this plug-in + */ static GParamDef load_args[] = { { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static int nload_args = - sizeof (load_args) / sizeof (load_args[0]); - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_return_vals = - sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -125,7 +134,7 @@ static void query () { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -140,7 +149,7 @@ static void query () PROC_PLUG_IN, nload_args, nload_return_vals, load_args, load_return_vals); - + gimp_install_procedure ("file_pix_save", _("save file in the Alias|Wavefront pix/matte file format"), _("save file in the Alias|Wavefront pix/matte file format"), @@ -152,255 +161,259 @@ static void query () PROC_PLUG_IN, nsave_args, 0, save_args, NULL); - - gimp_register_load_handler ("file_pix_load", "pix,matte,mask,alpha,als", ""); - gimp_register_save_handler ("file_pix_save", "pix,matte,mask,alpha,als", ""); + + gimp_register_load_handler ("file_pix_load", + "pix,matte,mask,alpha,als", + ""); + gimp_register_save_handler ("file_pix_save", + "pix,matte,mask,alpha,als", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, - GParam **return_vals ) -/* - * Description: - * perform registered plug-in function - * - * Arguments: - * name - name of the function to perform - * nparams - number of parameters passed to the function - * param - parameters passed to the function - * nreturn_vals - number of parameters returned by the function - * return_vals - parameters returned by the function - */ + gint *nreturn_vals, + GParam **return_vals) { + /* + * Description: + * perform registered plug-in function + * + * Arguments: + * name - name of the function to perform + * nparams - number of parameters passed to the function + * param - parameters passed to the function + * nreturn_vals - number of parameters returned by the function + * return_vals - parameters returned by the function + */ static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; - + *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; + if (strcmp (name, "file_pix_load") == 0) { INIT_I18N(); /* Perform the image load */ image_ID = load_image (param[1].data.d_string); + if (image_ID != -1) { /* The image load was successful */ *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { /* The image load falied */ - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_pix_save") == 0) { image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - + /* eventually export the image */ switch (run_mode) { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: - INIT_I18N_UI(); + INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "PIX", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: - INIT_I18N(); + INIT_I18N(); break; } if (status == STATUS_SUCCESS) { - if ( !save_image (param[3].data.d_string, image_ID, drawable_ID)) + if (! save_image (param[3].data.d_string, image_ID, drawable_ID)) { status = STATUS_EXECUTION_ERROR; } } - values[0].data.d_status = status; if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); - } - else - { - g_assert (FALSE); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } -static guint16 +static guint16 get_short (FILE *file) -/* - * Description: - * Reads a 16-bit integer from a file in such a way that the machine's - * bit ordering should not matter - */ { + /* + * Description: + * Reads a 16-bit integer from a file in such a way that the machine's + * bit ordering should not matter + */ guchar buf[2]; - + fread (buf, 2, 1, file); - return ( buf[0] << 8 ) + ( buf[1] << 0 ); + return (buf[0] << 8) + (buf[1] << 0); } -static void +static void put_short (guint16 value, FILE *file) -/* - * Description: - * Reads a 16-bit integer from a file in such a way that the machine's - * bit ordering should not matter - */ { + /* + * Description: + * Reads a 16-bit integer from a file in such a way that the machine's + * bit ordering should not matter + */ guchar buf[2]; - buf[0] = (guchar)( value >> 8 ); - buf[1] = (guchar)( value % 256 ); - - fwrite( buf, 2, 1, file); + buf[0] = (guchar) (value >> 8); + buf[1] = (guchar) (value % 256); + + fwrite (buf, 2, 1, file); } - -static gint32 -load_image (char *filename) -/* - * Description: - * load the given image into gimp - * - * Arguments: - * filename - name on the file to read - * - * Return Value: - * Image id for the loaded image - * - */ +static gint32 +load_image (gchar *filename) { - gint i, j, tile_height, row; - FILE * file = NULL; - gchar * progMessage; - guchar * dest; - guchar * dest_base; - GDrawable * drawable; - gint32 image_ID; - gint32 layer_ID; - GPixelRgn pixel_rgn; - gushort width, height, depth; - + /* + * Description: + * load the given image into gimp + * + * Arguments: + * filename - name on the file to read + * + * Return Value: + * Image id for the loaded image + * + */ + gint i, j, tile_height, row; + FILE *file = NULL; + gchar *progMessage; + guchar *dest; + guchar *dest_base; + GDrawable *drawable; + gint32 image_ID; + gint32 layer_ID; + GPixelRgn pixel_rgn; + gushort width, height, depth; + GImageType imgtype; GDrawableType gdtype; /* Set up progress display */ - progMessage = g_strdup_printf( _("Loading %s:"), filename); + progMessage = g_strdup_printf (_("Loading %s:"), filename); gimp_progress_init (progMessage); free (progMessage); - - PIX_DEBUG_PRINT("Opening file: %s\n",filename); - + + PIX_DEBUG_PRINT ("Opening file: %s\n", filename); + /* Open the file */ - file = fopen( filename, "r" ); - if ( NULL == file ) + file = fopen (filename, "r"); + if (NULL == file) { return -1; } /* Read header information */ - width = get_short( file ); - height = get_short( file ); - get_short( file ); /* Discard obsolete fields */ - get_short( file ); /* Discard obsolete fields */ - depth = get_short( file ); - - PIX_DEBUG_PRINT( "Width %hu\n", width ); - PIX_DEBUG_PRINT( "Height %hu\n", height ); - - if ( depth == 8 ) + width = get_short (file); + height = get_short (file); + get_short (file); /* Discard obsolete fields */ + get_short (file); /* Discard obsolete fields */ + depth = get_short (file); + + PIX_DEBUG_PRINT ("Width %hu\n", width); + PIX_DEBUG_PRINT ("Height %hu\n", height); + + if (depth == 8) { /* Loading a matte file */ imgtype = GRAY; gdtype = GRAY_IMAGE; - } - else if ( depth == 24 ) + } + else if (depth == 24) { /* Loading an RGB file */ imgtype = RGB; gdtype = RGB_IMAGE; - } - else + } + else { /* Header is invalid */ - fclose( file ); + fclose (file); return -1; } - - image_ID = gimp_image_new ( width, height, imgtype ); - gimp_image_set_filename ( image_ID, filename ); - layer_ID = gimp_layer_new ( image_ID, _("Background"), - width, - height, - gdtype, 100, NORMAL_MODE ); - gimp_image_add_layer ( image_ID, layer_ID, 0); - drawable = gimp_drawable_get ( layer_ID ); - gimp_pixel_rgn_init ( &pixel_rgn, drawable, 0, 0, drawable->width, - drawable->height, TRUE, FALSE ); - - tile_height = gimp_tile_height(); - - if ( depth == 24 ) + + image_ID = gimp_image_new (width, height, imgtype); + gimp_image_set_filename (image_ID, filename); + layer_ID = gimp_layer_new (image_ID, _("Background"), + width, + height, + gdtype, 100, NORMAL_MODE); + gimp_image_add_layer (image_ID, layer_ID, 0); + drawable = gimp_drawable_get (layer_ID); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, + drawable->height, TRUE, FALSE); + + tile_height = gimp_tile_height (); + + if (depth == 24) { /* Read a 24-bit Pix image */ guchar record[4]; gint readlen; - tile_height = gimp_tile_height(); - + tile_height = gimp_tile_height (); + dest_base = dest = g_new (guchar, 3 * width * tile_height); - - for (i = 0; i < height;) + + for (i = 0; i < height;) { - for ( dest = dest_base, row = 0; - row < tile_height && i < height; - i += 1, row += 1) + for (dest = dest_base, row = 0; + row < tile_height && i < height; + i += 1, row += 1) { guchar count; - + /* Read a row of the image */ j = 0; - while ( j < width ) + while (j < width) { - readlen = fread( record, 1, 4, file ); - if ( readlen < 4 ) + readlen = fread (record, 1, 4, file); + if (readlen < 4) break; - - for ( count = 0; count < record[0]; ++count ) + + for (count = 0; count < record[0]; ++count) { dest[0] = record[3]; dest[1] = record[2]; dest[2] = record[1]; dest += 3; j++; - if ( j >= width ) + if (j >= width) break; } } @@ -409,10 +422,10 @@ load_image (char *filename) width, row); gimp_progress_update ((double) i / (double) height); } - - free( dest_base ); - } - else + + free (dest_base); + } + else { /* Read an 8-bit Matte image */ guchar record[2]; @@ -422,24 +435,26 @@ load_image (char *filename) for (i = 0; i < height;) { - for ( dest = dest_base, row = 0; - row < tile_height && i < height; - i += 1, row += 1) + for (dest = dest_base, row = 0; + row < tile_height && i < height; + i += 1, row += 1) { guchar count; /* Read a row of the image */ j = 0; - while ( j < width ) + while (j < width) { - readlen = fread( record, 1, 2, file ); - if ( readlen < 2 ) break; - - for ( count = 0; count < record[0]; ++count ) + readlen = fread(record, 1, 2, file); + if (readlen < 2) + break; + + for (count = 0; count < record[0]; ++count) { dest[j] = record[1]; j++; - if ( j >= width ) break; + if (j >= width) + break; } } dest += width; @@ -448,22 +463,22 @@ load_image (char *filename) width, row); gimp_progress_update ((double) i / (double) height); } - free( dest_base ); + g_free (dest_base); } gimp_drawable_flush (drawable); gimp_drawable_detach (drawable); - fclose( file ); + fclose (file); return image_ID; } - static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, - gint32 drawable_ID ) + gint32 drawable_ID) +{ /* * Description: * save the given file out as an alias pix or matte file @@ -473,23 +488,22 @@ save_image (char *filename, * image_ID - ID of image to save * drawable_ID - current drawable */ -{ - gint depth, i, j, row, tile_height, writelen, rectHeight; - /* gboolean savingAlpha = FALSE; */ - gboolean savingColor = TRUE; - guchar * src; - guchar * src_base; - gchar * progMessage; - GDrawable * drawable; - GPixelRgn pixel_rgn; - FILE * file; - + gint depth, i, j, row, tile_height, writelen, rectHeight; + /* gboolean savingAlpha = FALSE; */ + gboolean savingColor = TRUE; + guchar *src; + guchar *src_base; + gchar *progMessage; + GDrawable *drawable; + GPixelRgn pixel_rgn; + FILE *file; + /* Get info about image */ - drawable = gimp_drawable_get(drawable_ID); - - gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, drawable->width, - drawable->height, FALSE, FALSE); + drawable = gimp_drawable_get (drawable_ID); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, + drawable->height, FALSE, FALSE); + switch (gimp_drawable_type(drawable_ID)) { case GRAY_IMAGE: @@ -511,149 +525,145 @@ save_image (char *filename, default: return FALSE; }; - - + /* Open the output file. */ file = fopen (filename, "wb"); - if ( !file ) - { - return (FALSE); - } - + if (!file) + return FALSE; + /* Set up progress display */ - progMessage = g_strdup_printf( _("Saving %s:"), filename); + progMessage = g_strdup_printf (_("Saving %s:"), filename); gimp_progress_init (progMessage); free (progMessage); - + /* Write the image header */ - PIX_DEBUG_PRINT( "Width %hu\n", drawable->width ); - PIX_DEBUG_PRINT( "Height %hu\n", drawable->height ); - put_short( drawable->width, file ); - put_short( drawable->height, file ); - put_short( 0, file ); - put_short( 0, file ); - if ( savingColor ) + PIX_DEBUG_PRINT ("Width %hu\n", drawable->width); + PIX_DEBUG_PRINT ("Height %hu\n", drawable->height); + put_short (drawable->width, file); + put_short (drawable->height, file); + put_short (0, file); + put_short (0, file); + if (savingColor) { - put_short( 24, file ); - } - else - { - put_short( 8, file ); + put_short (24, file); } - - tile_height = gimp_tile_height(); - src_base = g_new( guchar, tile_height * drawable->width * depth ); - - if ( savingColor ) + else + { + put_short (8, file); + } + + tile_height = gimp_tile_height (); + src_base = g_new (guchar, tile_height * drawable->width * depth); + + if (savingColor) { /* Writing a 24-bit Pix image */ guchar record[4]; - - for (i = 0; i < drawable->height;) + + for (i = 0; i < drawable->height;) { - rectHeight = ( tile_height < ( drawable->height - i - 1 ) ) ? - tile_height : ( drawable->height - i - 1 ); + rectHeight = (tile_height < (drawable->height - i - 1)) ? + tile_height : (drawable->height - i - 1); gimp_pixel_rgn_get_rect (&pixel_rgn, src_base, 0, i, drawable->width, rectHeight); - - for ( src = src_base, row = 0; - row < tile_height && i < drawable->height; - i += 1, row += 1) - { + + for (src = src_base, row = 0; + row < tile_height && i < drawable->height; + i += 1, row += 1) + { /* Write a row of the image */ record[0] = 1; record[3] = src[0]; record[2] = src[1]; record[1] = src[2]; src += depth; - for ( j = 1; j < drawable->width; ++j ) + for (j = 1; j < drawable->width; ++j) { - if ( ( record[3] != src[0] ) || - ( record[2] != src[1] ) || - ( record[1] != src[2] ) || - ( record[0] == 255 ) ) + if ((record[3] != src[0]) || + (record[2] != src[1]) || + (record[1] != src[2]) || + (record[0] == 255)) { /* Write current RLE record and start a new one */ - - writelen = fwrite( record, 1, 4, file ); + + writelen = fwrite (record, 1, 4, file); record[0] = 1; record[3] = src[0]; record[2] = src[1]; record[1] = src[2]; - } - else + } + else { /* increment run length in current record */ - record[0] ++; + record[0]++; } src += depth; } - /* Write last record in row */ - writelen = fwrite( record, 1, 4, file ); + /* Write last record in row */ + writelen = fwrite (record, 1, 4, file); } gimp_progress_update ((double) i / (double) drawable->height); } - } - else + } + else { /* Writing a 8-bit Matte (Mask) image */ guchar record[2]; - - for (i = 0; i < drawable->height;) + + for (i = 0; i < drawable->height;) { - rectHeight = ( tile_height < ( drawable->height - i - 1 ) ) ? - tile_height : ( drawable->height - i - 1 ); + rectHeight = (tile_height < (drawable->height - i - 1)) ? + tile_height : (drawable->height - i - 1); gimp_pixel_rgn_get_rect (&pixel_rgn, src_base, 0, i, drawable->width, rectHeight); - - for ( src = src_base, row = 0; - row < tile_height && i < drawable->height; - i += 1, row += 1) + + for (src = src_base, row = 0; + row < tile_height && i < drawable->height; + i += 1, row += 1) { /* Write a row of the image */ record[0] = 1; record[1] = src[0]; src += depth; - for ( j = 1; j < drawable->width; ++j ) + for (j = 1; j < drawable->width; ++j) { - if ( ( record[1] != src[0] ) || ( record[0] == 255 ) ) + if ((record[1] != src[0]) || (record[0] == 255)) { /* Write current RLE record and start a new one */ - writelen = fwrite( record, 1, 2, file ); + writelen = fwrite (record, 1, 2, file); record[0] = 1; record[1] = src[0]; - } - else + } + else { /* increment run length in current record */ record[0] ++; } src += depth; } - /* Write last record in row */ - writelen = fwrite( record, 1, 2, file ); + /* Write last record in row */ + writelen = fwrite (record, 1, 2, file); } gimp_progress_update ((double) i / (double) drawable->height); } } + + g_free (src_base); - free( src_base ); - - fclose( file ); - return (1); + fclose (file); + return TRUE; } static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("pix"); - + gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } - diff --git a/plug-ins/common/plasma.c b/plug-ins/common/plasma.c index 218544ce31..3bc04ba418 100644 --- a/plug-ins/common/plasma.c +++ b/plug-ins/common/plasma.c @@ -52,30 +52,32 @@ #include #include -#include #include /* For random seeding */ #include -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include +#include +#include #include "libgimp/stdplugins-intl.h" /* Some useful macros */ -#define ENTRY_WIDTH 75 -#define SCALE_WIDTH 128 -#define TILE_CACHE_SIZE 32 +#define ENTRY_WIDTH 75 +#define SCALE_WIDTH 128 +#define TILE_CACHE_SIZE 32 -typedef struct { - gint seed; - gdouble turbulence; +typedef struct +{ + gint seed; + gdouble turbulence; /* Interface only */ gboolean timeseed; } PlasmaValues; -typedef struct { +typedef struct +{ gint run; } PlasmaInterface; @@ -90,40 +92,50 @@ static void run (gchar *name, gint *nreturn_vals, GParam **return_vals); -static gint plasma_dialog (void); -static void plasma_ok_callback (GtkWidget *widget, - gpointer data); -static void plasma_entry_callback (GtkWidget *widget, - gpointer data); -static void plasma_scale_update (GtkAdjustment *adjustment, - gpointer data); -static void toggle_callback (GtkWidget *widget, gboolean *data); -static void plasma (GDrawable *drawable); -static void random_rgb (guchar *d); -static void add_random (guchar *d, gint amnt); -static void init_plasma (GDrawable *drawable); -static void provide_tile (GDrawable *drawable, gint col, gint row); -static void end_plasma (GDrawable *drawable); -static void get_pixel (GDrawable *drawable, gint x, gint y, guchar *pixel); -static void put_pixel (GDrawable *drawable, gint x, gint y, guchar *pixel); -static gint do_plasma (GDrawable *drawable, gint x1, gint y1, - gint x2, gint y2, gint depth, gint scale_depth); +static gint plasma_dialog (void); +static void plasma_ok_callback (GtkWidget *widget, + gpointer data); + +static void plasma (GDrawable *drawable); +static void random_rgb (guchar *d); +static void add_random (guchar *d, + gint amnt); +static void init_plasma (GDrawable *drawable); +static void provide_tile (GDrawable *drawable, + gint col, + gint row); +static void end_plasma (GDrawable *drawable); +static void get_pixel (GDrawable *drawable, + gint x, + gint y, + guchar *pixel); +static void put_pixel (GDrawable *drawable, + gint x, + gint y, + guchar *pixel); +static gint do_plasma (GDrawable *drawable, + gint x1, + gint y1, + gint x2, + gint y2, + gint depth, + gint scale_depth); /***** Local vars *****/ GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static PlasmaValues pvals = { - 0, /* seed */ - 1.0, /* turbulence */ - TRUE /* Time seed? */ + 0, /* seed */ + 1.0, /* turbulence */ + TRUE /* Time seed? */ }; static PlasmaInterface pint = @@ -139,13 +151,13 @@ static void query (void) { static GParamDef args[]= - { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image (unused)" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_INT32, "seed", "Random seed" }, - { PARAM_FLOAT, "turbulence", "Turbulence of plasma" } - }; + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image (unused)" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + { PARAM_INT32, "seed", "Random seed" }, + { PARAM_FLOAT, "turbulence", "Turbulence of plasma" } + }; static GParamDef *return_vals = NULL; static gint nargs = sizeof (args) / sizeof (args[0]); static gint nreturn_vals = 0; @@ -207,15 +219,17 @@ run (gchar *name, INIT_I18N(); /* Make sure all the arguments are there! */ if (nparams != 5) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { pvals.seed = (gint) param[3].data.d_int32; pvals.turbulence = (gdouble) param[4].data.d_float; + + if (pvals.turbulence <= 0) + status = STATUS_CALLING_ERROR; } - if ((status == STATUS_SUCCESS) && - pvals.turbulence <= 0) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: @@ -264,15 +278,11 @@ plasma_dialog (void) GtkWidget *dlg; GtkWidget *frame; GtkWidget *table; - GtkWidget *label; - GtkWidget *entry; + GtkWidget *spinbutton; GtkWidget *seed_hbox; - GtkWidget *time_button; - GtkWidget *scale; - GtkObject *scale_data; + GtkObject *adj; gchar **argv; gint argc; - gchar buffer[32]; argc = 1; argv = g_new (gchar *, 1); @@ -297,78 +307,46 @@ plasma_dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + gimp_help_init (); + /* parameter settings */ - frame = gtk_frame_new (_("Plasma Options")); + frame = gtk_frame_new (_("Parameter Settings")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (2, 2, FALSE); + table = gtk_table_new (2, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - label = gtk_label_new (_("Seed:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); + seed_hbox = gimp_random_seed_new (&pvals.seed, &pvals.timeseed, + TRUE, FALSE); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Random Seed:"), 1.0, 0.5, + seed_hbox, TRUE); - seed_hbox = gtk_hbox_new (FALSE, 2); - gtk_table_attach (GTK_TABLE (table), seed_hbox, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (seed_hbox); - - entry = gtk_entry_new (); - gtk_box_pack_start (GTK_BOX (seed_hbox), entry, TRUE, TRUE, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%d", pvals.seed); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - GTK_SIGNAL_FUNC (plasma_entry_callback), - &pvals.seed); - gtk_widget_show (entry); - - time_button = gtk_toggle_button_new_with_label (_("Time")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(time_button),pvals.timeseed); - gtk_signal_connect (GTK_OBJECT (time_button), "clicked", - (GtkSignalFunc) toggle_callback, - &pvals.timeseed); - gtk_box_pack_end (GTK_BOX (seed_hbox), time_button, FALSE, FALSE, 0); - gtk_widget_show (time_button); - gtk_widget_show (seed_hbox); - - label = gtk_label_new (_("Turbulence:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 1.0); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - scale_data = gtk_adjustment_new (pvals.turbulence, 0.1, 7.0, 0.1, 0.1, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 1); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); - gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) plasma_scale_update, - &pvals.turbulence); - gtk_widget_show (scale); + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, + _("Turbulence:"), SCALE_WIDTH, 0, + pvals.turbulence, + 0.1, 7.0, 0.1, 1.0, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &pvals.turbulence); gtk_widget_show (frame); gtk_widget_show (table); gtk_widget_show (dlg); gtk_main (); + gimp_help_free (); gdk_flush (); return pint.run; } - -/* Plasma interface functions */ - static void plasma_ok_callback (GtkWidget *widget, gpointer data) @@ -378,33 +356,6 @@ plasma_ok_callback (GtkWidget *widget, gtk_widget_destroy (GTK_WIDGET (data)); } -static void -plasma_entry_callback (GtkWidget *widget, - gpointer data) -{ - gint *text_val; - - text_val = (gint *) data; - - *text_val = atoi (gtk_entry_get_text (GTK_ENTRY (widget))); -} - - -static void -plasma_scale_update (GtkAdjustment *adjustment, - gpointer data) -{ - gdouble *dptr = (gdouble*) data; - *dptr = adjustment->value; -} - -static void -toggle_callback (GtkWidget *widget, - gboolean *data) -{ - *data = GTK_TOGGLE_BUTTON (widget)->active; -} - #define AVE(n, v1, v2) n[0] = ((gint)v1[0] + (gint)v2[0]) / 2;\ n[1] = ((gint)v1[1] + (gint)v2[1]) / 2;\ n[2] = ((gint)v1[2] + (gint)v2[2]) / 2; diff --git a/plug-ins/common/plugin-defs.pl b/plug-ins/common/plugin-defs.pl index 74879dc645..5c931a82ea 100644 --- a/plug-ins/common/plugin-defs.pl +++ b/plug-ins/common/plugin-defs.pl @@ -30,7 +30,7 @@ 'diffraction' => { libdep => 'gtk', ui => 1 }, 'displace' => { libdep => 'gtk', ui => 1 }, 'edge' => { libdep => 'gtk', ui => 1 }, - 'emboss' => { libdep => 'gtk', ui => 1, libsupp => 'megawidget' }, + 'emboss' => { libdep => 'gtk', ui => 1 }, 'engrave' => { libdep => 'gtk', ui => 1 }, 'exchange' => { libdep => 'gtk', ui => 1 }, 'film' => { libdep => 'gtk', ui => 1 }, @@ -66,7 +66,7 @@ 'mblur' => { libdep => 'gtk', ui => 1 }, 'mpeg' => { libdep => 'gtk', optional => 1 }, 'newsprint' => { libdep => 'gtk', ui => 1 }, - 'nlfilt' => { libdep => 'gtk', ui => 1, libsupp => 'megawidget' }, + 'nlfilt' => { libdep => 'gtk', ui => 1 }, 'noisify' => { libdep => 'gtk', ui => 1 }, 'normalize' => { libdep => 'glib' }, 'nova' => { libdep => 'gtk', ui => 1 }, @@ -113,7 +113,7 @@ 'vinvert' => { libdep => 'glib' }, 'vpropagate' => { libdep => 'gtk', ui => 1 }, 'warp' => { libdep => 'gtk', ui => 1 }, - 'waves' => { libdep => 'gtk', ui => 1, libsupp => 'megawidget' }, + 'waves' => { libdep => 'gtk', ui => 1 }, 'whirlpinch' => { libdep => 'gtk', ui => 1 }, 'wind' => { libdep => 'gtk', ui => 1 }, 'wmf' => { libdep => 'gtk', ui => 1 }, diff --git a/plug-ins/common/png.c b/plug-ins/common/png.c index 94a70c2fc5..7d57159598 100644 --- a/plug-ins/common/png.c +++ b/plug-ins/common/png.c @@ -45,23 +45,23 @@ #include #include -#include /* PNG library definitions */ - #include #include #include +#include /* PNG library definitions */ + #include "libgimp/stdplugins-intl.h" /* * Constants... */ -#define PLUG_IN_VERSION "1.1.10 - 8 Nov 1999" -#define SCALE_WIDTH 125 +#define PLUG_IN_VERSION "1.1.10 - 8 Nov 1999" +#define SCALE_WIDTH 125 -#define DEFAULT_GAMMA 2.20 +#define DEFAULT_GAMMA 2.20 /* * Structures... @@ -96,32 +96,28 @@ static void init_gtk (void); static gint save_dialog (void); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_compression_update (GtkAdjustment *adjustment, - gpointer data); -static void save_interlace_update (GtkWidget *widget, - gpointer data); /* * Globals... */ -GPlugInInfo PLUG_IN_INFO = +GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; -PngSaveVals pngvals = +PngSaveVals pngvals = { FALSE, FALSE, 6 }; -int runme = FALSE; +static gboolean runme = FALSE; /* @@ -143,12 +139,14 @@ query (void) { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name of the file to load" }, }; - static GParamDef load_return_vals[] = + static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); + static GParamDef save_args[] = { { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, @@ -160,7 +158,7 @@ query (void) { PARAM_INT32, "noextras", "Skip ancillary chunks?" }, { PARAM_INT32, "compression", "Deflate Compression factor (0--9)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N (); @@ -188,9 +186,13 @@ query (void) nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_png_load", "png", "", + gimp_register_magic_load_handler ("file_png_load", + "png", + "", "0,string,\211PNG\r\n\032\n"); - gimp_register_save_handler ("file_png_save", "png", ""); + gimp_register_save_handler ("file_png_save", + "png", + ""); } @@ -199,49 +201,40 @@ query (void) */ static void -run (gchar *name, /* I - Name of filter program. */ - gint nparams, /* I - Number of parameters passed in */ - GParam *param, /* I - Parameter values */ - gint *nreturn_vals, /* O - Number of return values */ - GParam **return_vals) /* O - Return values */ +run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals) { - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; - GRunModeType run_mode; - GParam *values; /* Return values */ + static GParam values[2]; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; GimpExportReturnType export = EXPORT_CANCEL; - /* - * Initialize parameter data... - */ - - values = g_new (GParam, 2); - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_SUCCESS; - + *nreturn_vals = 1; *return_vals = values; - - /* - * Load or save an image... - */ + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_png_load") == 0) { INIT_I18N (); - - *nreturn_vals = 2; - image_ID = load_image (param[1].data.d_string); if (image_ID != -1) { + *nreturn_vals = 2; values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + { + status = STATUS_EXECUTION_ERROR; + } } else if (strcmp (name, "file_png_save") == 0) { @@ -250,7 +243,6 @@ run (gchar *name, /* I - Name of filter program. */ run_mode = param[0].data.d_int32; image_ID = orig_image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - *nreturn_vals = 1; /* eventually export the image */ switch (run_mode) @@ -266,7 +258,7 @@ run (gchar *name, /* I - Name of filter program. */ if (export == EXPORT_CANCEL) { *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -286,7 +278,7 @@ run (gchar *name, /* I - Name of filter program. */ * Then acquire information with a dialog... */ if (!save_dialog()) - goto finish; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -294,7 +286,9 @@ run (gchar *name, /* I - Name of filter program. */ * Make sure all the arguments are there! */ if (nparams != 8) - values[0].data.d_status = STATUS_CALLING_ERROR; + { + status = STATUS_CALLING_ERROR; + } else { pngvals.interlaced = param[5].data.d_int32; @@ -303,11 +297,11 @@ run (gchar *name, /* I - Name of filter program. */ if (pngvals.compression_level < 0 || pngvals.compression_level > 9) - values[0].data.d_status = STATUS_CALLING_ERROR; + status = STATUS_CALLING_ERROR; }; break; - case RUN_WITH_LAST_VALS : + case RUN_WITH_LAST_VALS: /* * Possibly retrieve data... */ @@ -318,22 +312,28 @@ run (gchar *name, /* I - Name of filter program. */ break; }; - if (values[0].data.d_status == STATUS_SUCCESS) + if (status == STATUS_SUCCESS) { if (save_image (param[3].data.d_string, image_ID, drawable_ID, orig_image_ID)) - gimp_set_data ("file_png_save", &pngvals, sizeof (pngvals)); + { + gimp_set_data ("file_png_save", &pngvals, sizeof (pngvals)); + } else - values[0].data.d_status = STATUS_EXECUTION_ERROR; - }; - - finish: + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + { + status = STATUS_EXECUTION_ERROR; + } + + values[0].data.d_status = status; } @@ -902,32 +902,11 @@ save_ok_callback (GtkWidget *widget, gtk_widget_destroy (GTK_WIDGET (data)); } -static void -save_compression_update (GtkAdjustment *adjustment, - gpointer data) -{ - pngvals.compression_level = (gint32) adjustment->value; -} - -static void -save_interlace_update (GtkWidget *widget, - gpointer data) -{ - pngvals.interlaced = GTK_TOGGLE_BUTTON (widget)->active; -} - -static void -save_noextras_update (GtkWidget *widget, - gpointer data) -{ - pngvals.noextras = GTK_TOGGLE_BUTTON (widget)->active; -} - static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; argc = 1; argv = g_new (gchar *, 1); @@ -944,7 +923,6 @@ save_dialog (void) GtkWidget *frame; GtkWidget *table; GtkWidget *toggle; - GtkWidget *label; GtkWidget *scale; GtkObject *scale_data; @@ -981,8 +959,8 @@ save_dialog (void) gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 0, 1, GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (save_interlace_update), - NULL); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &pngvals.interlaced); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.interlaced); gtk_widget_show (toggle); @@ -990,29 +968,24 @@ save_dialog (void) gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 1, 2, GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (save_noextras_update), - NULL); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &pngvals.noextras); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pngvals.noextras); gtk_widget_show (toggle); - label = gtk_label_new (_("Compression Level:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 1.0); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - scale_data = gtk_adjustment_new (pngvals.compression_level, 1.0, 9.0, 1.0, 1.0, 0.0); scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 2, 3, - GTK_FILL, 0, 0, 0); gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); gtk_scale_set_digits (GTK_SCALE (scale), 0); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Compression Level:"), 1.0, 1.0, + scale, FALSE); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - GTK_SIGNAL_FUNC (save_compression_update), - NULL); + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &pngvals.compression_level); gtk_widget_show (scale); gtk_widget_show (dlg); @@ -1022,7 +995,3 @@ save_dialog (void) return runme; } - -/* - * End of "$Id$". - */ diff --git a/plug-ins/common/pnm.c b/plug-ins/common/pnm.c index 03a998ee92..c171c32a07 100644 --- a/plug-ins/common/pnm.c +++ b/plug-ins/common/pnm.c @@ -58,36 +58,39 @@ /* Declare local data types */ -typedef struct _PNMScanner { - int fd; /* The file descriptor of the file being read */ - char cur; /* The current character in the input stream */ - int eof; /* Have we reached end of file? */ - char *inbuf; /* Input buffer - initially 0 */ - int inbufsize; /* Size of input buffer */ - int inbufvalidsize; /* Size of input buffer with valid data */ - int inbufpos; /* Position in input buffer */ +typedef struct _PNMScanner +{ + gint fd; /* The file descriptor of the file being read */ + gchar cur; /* The current character in the input stream */ + gint eof; /* Have we reached end of file? */ + gchar *inbuf; /* Input buffer - initially 0 */ + gint inbufsize; /* Size of input buffer */ + gint inbufvalidsize; /* Size of input buffer with valid data */ + gint inbufpos; /* Position in input buffer */ } PNMScanner; -typedef struct _PNMInfo { - int xres, yres; /* The size of the image */ - int maxval; /* For ascii image files, the max value +typedef struct _PNMInfo +{ + gint xres, yres; /* The size of the image */ + gint maxval; /* For ascii image files, the max value * which we need to normalize to */ - int np; /* Number of image planes (0 for pbm) */ - int asciibody; /* 1 if ascii body, 0 if raw body */ - jmp_buf jmpbuf; /* Where to jump to on an error loading */ + gint np; /* Number of image planes (0 for pbm) */ + gint asciibody; /* 1 if ascii body, 0 if raw body */ + jmp_buf jmpbuf; /* Where to jump to on an error loading */ /* Routine to use to load the pnm body */ - void (*loader)(PNMScanner *, struct _PNMInfo *, GPixelRgn *); + void (* loader) (PNMScanner *, struct _PNMInfo *, GPixelRgn *); } PNMInfo; /* Contains the information needed to write out PNM rows */ -typedef struct _PNMRowInfo { - int fd; /* File descriptor */ - char *rowbuf; /* Buffer for writing out rows */ - int xres; /* X resolution */ - int np; /* Number of planes */ - unsigned char *red; /* Colormap red */ - unsigned char *grn; /* Colormap green */ - unsigned char *blu; /* Colormap blue */ +typedef struct _PNMRowInfo +{ + gint fd; /* File descriptor */ + gchar *rowbuf; /* Buffer for writing out rows */ + gint xres; /* X resolution */ + gint np; /* Number of planes */ + guchar *red; /* Colormap red */ + guchar *grn; /* Colormap green */ + guchar *blu; /* Colormap blue */ } PNMRowInfo; /* Save info */ @@ -112,53 +115,50 @@ typedef struct /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); static void init_gtk (void); static gint save_dialog (void); - -static void pnm_load_ascii (PNMScanner * scan, - PNMInfo * info, - GPixelRgn * pixel_rgn); -static void pnm_load_raw (PNMScanner * scan, - PNMInfo * info, - GPixelRgn * pixel_rgn); -static void pnm_load_rawpbm (PNMScanner * scan, - PNMInfo * info, - GPixelRgn * pixel_rgn); - -static void pnmsaverow_ascii (PNMRowInfo * ri, - guchar * data); -static void pnmsaverow_raw (PNMRowInfo * ri, - guchar * data); -static void pnmsaverow_ascii_indexed (PNMRowInfo * ri, - guchar * data); -static void pnmsaverow_raw_indexed (PNMRowInfo * ri, - guchar * data); - -static void pnmscanner_destroy (PNMScanner * s); -static void pnmscanner_createbuffer (PNMScanner * s, - int bufsize); -static void pnmscanner_getchar (PNMScanner * s); -static void pnmscanner_eatwhitespace (PNMScanner * s); -static void pnmscanner_gettoken (PNMScanner * s, - char * buf, - int bufsize); - -static PNMScanner * pnmscanner_create (int fd); - static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_toggle_update (GtkWidget *widget, - gpointer data); + +static void pnm_load_ascii (PNMScanner *scan, + PNMInfo *info, + GPixelRgn *pixel_rgn); +static void pnm_load_raw (PNMScanner *scan, + PNMInfo *info, + GPixelRgn *pixel_rgn); +static void pnm_load_rawpbm (PNMScanner *scan, + PNMInfo *info, + GPixelRgn *pixel_rgn); + +static void pnmsaverow_ascii (PNMRowInfo *ri, + guchar *data); +static void pnmsaverow_raw (PNMRowInfo *ri, + guchar *data); +static void pnmsaverow_ascii_indexed (PNMRowInfo *ri, + guchar *data); +static void pnmsaverow_raw_indexed (PNMRowInfo *ri, + guchar *data); + +static void pnmscanner_destroy (PNMScanner *s); +static void pnmscanner_createbuffer (PNMScanner *s, + gint bufsize); +static void pnmscanner_getchar (PNMScanner *s); +static void pnmscanner_eatwhitespace (PNMScanner *s); +static void pnmscanner_gettoken (PNMScanner *s, + gchar *buf, + gint bufsize); + +static PNMScanner * pnmscanner_create (gint fd); #define pnmscanner_eof(s) ((s)->eof) @@ -169,28 +169,30 @@ static void save_toggle_update (GtkWidget *widget, if ((predicate)) \ { /*gimp_message((errmsg));*/ longjmp((jmpbuf),1); } -static struct struct_pnm_types { - char name; - int np; - int asciibody; - int maxval; - void (*loader)(PNMScanner *, struct _PNMInfo *, GPixelRgn *pixel_rgn); -} pnm_types[] = { - { '1', 0, 1, 1, pnm_load_ascii }, /* ASCII PBM */ +static struct struct_pnm_types +{ + gchar name; + gint np; + gint asciibody; + gint maxval; + void (* loader) (PNMScanner *, struct _PNMInfo *, GPixelRgn *pixel_rgn); +} pnm_types[] = +{ + { '1', 0, 1, 1, pnm_load_ascii }, /* ASCII PBM */ { '2', 1, 1, 255, pnm_load_ascii }, /* ASCII PGM */ { '3', 3, 1, 255, pnm_load_ascii }, /* ASCII PPM */ - { '4', 0, 0, 1, pnm_load_rawpbm }, /* RAW PBM */ + { '4', 0, 0, 1, pnm_load_rawpbm }, /* RAW PBM */ { '5', 1, 0, 255, pnm_load_raw }, /* RAW PGM */ { '6', 3, 0, 255, pnm_load_raw }, /* RAW PPM */ - { 0 , 0, 0, 0, NULL} + { 0 , 0, 0, 0, NULL} }; GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static PNMSaveVals psvals = @@ -219,8 +221,9 @@ query (void) { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -231,7 +234,7 @@ query (void) { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, { PARAM_INT32, "raw", "Specify non-zero for raw output, zero for ascii output" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -259,32 +262,36 @@ query (void) nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_pnm_load", "pnm,ppm,pgm,pbm", "", - "0,string,P1,0,string,P2,0,string,P3,0,string,P4,0,string,P5,0,string,P6"); - gimp_register_save_handler ("file_pnm_save", "pnm,ppm,pgm,pbm", ""); + gimp_register_magic_load_handler ("file_pnm_load", + "pnm,ppm,pgm,pbm", + "", + "0,string,P1,0,string,P2,0,string,P3,0," + "string,P4,0,string,P5,0,string,P6"); + gimp_register_save_handler ("file_pnm_save", + "pnm,ppm,pgm,pbm", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = -1; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (run_mode == RUN_NONINTERACTIVE) { @@ -301,18 +308,17 @@ run (char *name, if (image_ID != -1) { - values[0].data.d_status = STATUS_SUCCESS; + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } - *nreturn_vals = 2; } else if (strcmp (name, "file_pnm_save") == 0) { - *nreturn_vals = 1; image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; @@ -323,18 +329,19 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "PNM", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: break; } - + switch (run_mode) { case RUN_INTERACTIVE: @@ -343,14 +350,16 @@ run (char *name, /* First acquire information with a dialog */ if (! save_dialog ()) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 6) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { psvals.raw = (param[5].data.d_int32) ? TRUE : FALSE; } @@ -364,23 +373,32 @@ run (char *name, break; } - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + if (status == STATUS_SUCCESS) { - /* Store psvals data */ - gimp_set_data ("file_pnm_save", &psvals, sizeof (PNMSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + /* Store psvals data */ + gimp_set_data ("file_pnm_save", &psvals, sizeof (PNMSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) +load_image (gchar *filename) { GPixelRgn pixel_rgn; gint32 image_ID; @@ -398,7 +416,7 @@ load_image (char *filename) g_free (temp); /* open the file */ - fd = open(filename, O_RDONLY | _O_BINARY); + fd = open (filename, O_RDONLY | _O_BINARY); if (fd == -1) { @@ -407,7 +425,7 @@ load_image (char *filename) } /* allocate the necessary structures */ - pnminfo = (PNMInfo *) g_malloc(sizeof(PNMInfo)); + pnminfo = (PNMInfo *) g_malloc (sizeof (PNMInfo)); scan = NULL; /* set error handling */ @@ -425,7 +443,7 @@ load_image (char *filename) longjmp(pnminfo->jmpbuf,1); /* Get magic number */ - pnmscanner_gettoken(scan, buf, BUFLEN); + pnmscanner_gettoken (scan, buf, BUFLEN); CHECK_FOR_ERROR(pnmscanner_eof(scan), pnminfo->jmpbuf, "pnm filter: premature end of file\n"); CHECK_FOR_ERROR((buf[0] != 'P' || buf[2]), pnminfo->jmpbuf, @@ -475,21 +493,24 @@ load_image (char *filename) /* Create a new image of the proper size and associate the filename with it. */ - image_ID = gimp_image_new (pnminfo->xres, pnminfo->yres, (pnminfo->np >= 3) ? RGB : GRAY); + image_ID = gimp_image_new (pnminfo->xres, pnminfo->yres, + (pnminfo->np >= 3) ? RGB : GRAY); gimp_image_set_filename (image_ID, filename); layer_ID = gimp_layer_new (image_ID, _("Background"), pnminfo->xres, pnminfo->yres, - (pnminfo->np >= 3) ? RGB_IMAGE : GRAY_IMAGE, 100, NORMAL_MODE); + (pnminfo->np >= 3) ? RGB_IMAGE : GRAY_IMAGE, + 100, NORMAL_MODE); gimp_image_add_layer (image_ID, layer_ID, 0); drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, drawable->width, drawable->height, TRUE, FALSE); - pnminfo->loader(scan, pnminfo, &pixel_rgn); + pnminfo->loader (scan, pnminfo, &pixel_rgn); /* Destroy the scanner */ - pnmscanner_destroy(scan); + pnmscanner_destroy (scan); /* free the structures */ g_free (pnminfo); @@ -504,7 +525,6 @@ load_image (char *filename) return image_ID; } - static void pnm_load_ascii (PNMScanner *scan, PNMInfo *info, @@ -724,7 +744,7 @@ pnmsaverow_ascii_indexed (PNMRowInfo *ri, } static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) { @@ -732,7 +752,7 @@ save_image (char *filename, GDrawable *drawable; GDrawableType drawable_type; PNMRowInfo rowinfo; - void (*saverow)(PNMRowInfo *, unsigned char *); + void (*saverow) (PNMRowInfo *, unsigned char *) = NULL; unsigned char red[256]; unsigned char grn[256]; unsigned char blu[256]; @@ -748,21 +768,22 @@ save_image (char *filename, drawable = gimp_drawable_get (drawable_ID); drawable_type = gimp_drawable_type (drawable_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, FALSE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, drawable->width, drawable->height, FALSE, FALSE); /* Make sure we're not saving an image with an alpha channel */ if (gimp_drawable_has_alpha (drawable_ID)) { - gimp_message ( _("PNM save cannot handle images with alpha channels.")); + g_message (_("PNM save cannot handle images with alpha channels.")); return FALSE; } - temp = g_strdup_printf ( _("Saving %s:"), filename); + temp = g_strdup_printf (_("Saving %s:"), filename); gimp_progress_init (temp); g_free (temp); /* open the file */ - fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | _O_BINARY, 0644); + fd = open (filename, O_WRONLY | O_CREAT | O_TRUNC | _O_BINARY, 0644); if (fd == -1) { @@ -828,7 +849,7 @@ save_image (char *filename, if (drawable_type == INDEXED_IMAGE) { int i; - unsigned char *cmap; + guchar *cmap; int colors; cmap = gimp_image_get_cmap (image_ID, &colors); @@ -846,16 +867,16 @@ save_image (char *filename, } /* allocate a buffer for retrieving information from the pixel region */ - data = (unsigned char *) g_malloc (gimp_tile_height () * drawable->width * drawable->bpp); + data = g_new (guchar, gimp_tile_height () * drawable->width * drawable->bpp); /* write out comment string */ - write(fd, SAVE_COMMENT_STRING, strlen(SAVE_COMMENT_STRING)); + write (fd, SAVE_COMMENT_STRING, strlen (SAVE_COMMENT_STRING)); /* write out resolution and maxval */ - sprintf(buf, "%d %d\n255\n", xres, yres); - write(fd, buf, strlen(buf)); + sprintf (buf, "%d %d\n255\n", xres, yres); + write (fd, buf, strlen(buf)); - rowbuf = g_malloc(rowbufsize+1); + rowbuf = g_malloc (rowbufsize + 1); rowinfo.fd = fd; rowinfo.rowbuf = rowbuf; rowinfo.xres = xres; @@ -870,7 +891,8 @@ save_image (char *filename, { yend = ypos + gimp_tile_height (); yend = MIN (yend, yres); - gimp_pixel_rgn_get_rect (&pixel_rgn, data, 0, ypos, xres, (yend - ypos)); + gimp_pixel_rgn_get_rect (&pixel_rgn, data, + 0, ypos, xres, (yend - ypos)); d = data; } @@ -884,8 +906,8 @@ save_image (char *filename, /* close the file */ close (fd); - g_free(rowbuf); - g_free(data); + g_free (rowbuf); + g_free (data); gimp_drawable_detach (drawable); @@ -897,12 +919,12 @@ static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("pnm"); - + gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } @@ -911,12 +933,7 @@ static gint save_dialog (void) { GtkWidget *dlg; - GtkWidget *toggle; GtkWidget *frame; - GtkWidget *toggle_vbox; - GSList *group; - gint use_raw = (psvals.raw == TRUE); - gint use_ascii = (psvals.raw == FALSE); dlg = gimp_dialog_new (_("Save as PNM"), "pnm", gimp_plugin_help_func, "filters/pnm.html", @@ -935,35 +952,17 @@ save_dialog (void) NULL); /* file save type */ - frame = gtk_frame_new ( _("Data Formatting")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + frame = gimp_radio_group_new2 (TRUE, _("Data Formatting"), + gimp_radio_button_update, + &psvals.raw, (gpointer) psvals.raw, + + _("Raw"), (gpointer) TRUE, NULL, + _("Ascii"), (gpointer) FALSE, NULL, + + NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - group = NULL; - toggle = gtk_radio_button_new_with_label (group, _("Raw")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (save_toggle_update), - &use_raw); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_raw); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("Ascii")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (save_toggle_update), - &use_ascii); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_ascii); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); gtk_widget_show (frame); gtk_widget_show (dlg); @@ -971,14 +970,18 @@ save_dialog (void) gtk_main (); gdk_flush (); - if (use_raw) - psvals.raw = TRUE; - else - psvals.raw = FALSE; - return psint.run; } +static void +save_ok_callback (GtkWidget *widget, + gpointer data) +{ + psint.run = TRUE; + + gtk_widget_destroy (GTK_WIDGET (data)); +} + /**************** FILE SCANNER UTILITIES **************/ /* pnmscanner_create --- @@ -986,7 +989,7 @@ save_dialog (void) * look ahead buffer is one character initially. */ static PNMScanner * -pnmscanner_create (int fd) +pnmscanner_create (gint fd) { PNMScanner *s; @@ -1012,7 +1015,7 @@ pnmscanner_destroy (PNMScanner *s) */ static void pnmscanner_createbuffer (PNMScanner *s, - int bufsize) + gint bufsize) { s->inbuf = g_malloc(sizeof(char)*bufsize); s->inbufsize = bufsize; @@ -1025,8 +1028,8 @@ pnmscanner_createbuffer (PNMScanner *s, */ static void pnmscanner_gettoken (PNMScanner *s, - char *buf, - int bufsize) + gchar *buf, + gint bufsize) { int ctr=0; @@ -1094,28 +1097,3 @@ pnmscanner_eatwhitespace (PNMScanner *s) } } } - - -/* Save interface functions */ - -static void -save_ok_callback (GtkWidget *widget, - gpointer data) -{ - psint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (data)); -} - -static void -save_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} diff --git a/plug-ins/common/polar.c b/plug-ins/common/polar.c index 266b54a577..4acf06dad7 100644 --- a/plug-ins/common/polar.c +++ b/plug-ins/common/polar.c @@ -902,9 +902,12 @@ static gint polarize_dialog (void) { GtkWidget *dialog; - GtkWidget *top_table; + GtkWidget *main_vbox; + GtkWidget *vbox; GtkWidget *frame; GtkWidget *table; + GtkWidget *abox; + GtkWidget *pframe; GtkWidget *toggle; GtkWidget *hbox; GtkObject *adj; @@ -953,33 +956,49 @@ polarize_dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - top_table = gtk_table_new (3, 3, FALSE); - gtk_container_set_border_width (GTK_CONTAINER (top_table), 6); - gtk_table_set_row_spacings (GTK_TABLE (top_table), 4); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), top_table, - FALSE, FALSE, 0); - gtk_widget_show (top_table); - /* Initialize Tooltips */ gimp_help_init (); + main_vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), main_vbox, + FALSE, FALSE, 0); + gtk_widget_show (main_vbox); + /* Preview */ - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 2, 0, 1, 0, 0, 0, 0); + frame = gtk_frame_new (_("Preview")); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); + abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_add (GTK_CONTAINER (frame), abox); + gtk_widget_show (abox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (pframe), GTK_SHADOW_IN); + gtk_container_set_border_width (GTK_CONTAINER (pframe), 4); + gtk_container_add (GTK_CONTAINER (abox), pframe); + gtk_widget_show (pframe); + pcint.preview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (pcint.preview), preview_width, preview_height); - gtk_container_add (GTK_CONTAINER (frame), pcint.preview); + gtk_container_add (GTK_CONTAINER (pframe), pcint.preview); gtk_widget_show (pcint.preview); /* Controls */ + frame = gtk_frame_new (_("Parameter Settings")); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + table = gtk_table_new (2, 3, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_table_attach (GTK_TABLE (top_table), table, 0, 3, 1, 2, - GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, @@ -1000,8 +1019,7 @@ polarize_dialog (void) /* togglebuttons for backwards, top, polar->rectangular */ hbox = gtk_hbox_new (TRUE, 4); - gtk_table_attach (GTK_TABLE (top_table), hbox, 0, 3, 2, 3, - GTK_FILL, 0 , 0, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); toggle = gtk_check_button_new_with_label (_("Map Backwards")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pcvals.backwards); diff --git a/plug-ins/common/postscript.c b/plug-ins/common/postscript.c index dab307a1ed..cb5de127dc 100644 --- a/plug-ins/common/postscript.c +++ b/plug-ins/common/postscript.c @@ -55,13 +55,14 @@ static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.08 16-Jan-2000"; #include #include #include -#include #include #include #include #include +#include +#include #include "libgimp/stdplugins-intl.h" @@ -76,13 +77,13 @@ static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.08 16-Jan-2000"; /* Load info */ typedef struct { - guint resolution; /* resolution (dpi) at which to run ghostscript */ - guint width, height; /* desired size (ghostscript may ignore this) */ - gint use_bbox; /* 0: use width/height, 1: try to use BoundingBox */ - char pages[STR_LENGTH];/* Pages to load (eg.: 1,3,5-7) */ - gint pnm_type; /* 4: pbm, 5: pgm, 6: ppm, 7: automatic */ - gint textalpha; /* antialiasing: 1,2, or 4 TextAlphaBits */ - gint graphicsalpha; /* antialiasing: 1,2, or 4 GraphicsAlphaBits */ + guint resolution; /* resolution (dpi) at which to run ghostscript */ + guint width, height; /* desired size (ghostscript may ignore this) */ + gint use_bbox; /* 0: use width/height, 1: try to use BoundingBox */ + gchar pages[STR_LENGTH]; /* Pages to load (eg.: 1,3,5-7) */ + gint pnm_type; /* 4: pbm, 5: pgm, 6: ppm, 7: automatic */ + gint textalpha; /* antialiasing: 1,2, or 4 TextAlphaBits */ + gint graphicsalpha; /* antialiasing: 1,2, or 4 GraphicsAlphaBits */ } PSLoadVals; typedef struct @@ -112,13 +113,13 @@ typedef struct { gdouble width, height; /* Size of image */ gdouble x_offset, y_offset; /* Offset to image on page */ - gint unit_mm; /* Unit of measure (0: inch, 1: mm) */ - gint keep_ratio; /* Keep aspect ratio */ - gint rotate; /* Rotation (0, 90, 180, 270) */ - gint level; /* PostScript Level */ - gint eps; /* Encapsulated PostScript flag */ - gint preview; /* Preview Flag */ - gint preview_size; /* Preview size */ + gint unit_mm; /* Unit of measure (0: inch, 1: mm) */ + gint keep_ratio; /* Keep aspect ratio */ + gint rotate; /* Rotation (0, 90, 180, 270) */ + gint level; /* PostScript Level */ + gint eps; /* Encapsulated PostScript flag */ + gint preview; /* Preview Flag */ + gint preview_size; /* Preview size */ } PSSaveVals; typedef struct @@ -148,123 +149,115 @@ static PSSaveInterface psint = /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID); +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); -static gint save_gray (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); -static gint save_bw (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); -static gint save_index (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); -static gint save_rgb (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); +static gint save_gray (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); +static gint save_bw (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); +static gint save_index (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); +static gint save_rgb (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); -static gint32 create_new_image (char *filename, guint pagenum, - guint width, guint height, - GImageType type, gint32 *layer_ID, GDrawable **drawable, - GPixelRgn *pixel_rgn); +static gint32 create_new_image (gchar *filename, + guint pagenum, + guint width, + guint height, + GImageType type, + gint32 *layer_ID, + GDrawable **drawable, + GPixelRgn *pixel_rgn); static void check_load_vals (void); static void check_save_vals (void); -static char *ftoa (char *format, double r); +static gint page_in_list (gchar *list, + guint pagenum); -static gint page_in_list (char *list, guint pagenum); +static gint get_bbox (gchar *filename, + gint *x0, + gint *y0, + gint *x1, + gint *y1); -static gint get_bbox (char *filename, - int *x0, int *y0, int *x1, int *y1); - -static FILE *ps_open (char *filename, - const PSLoadVals *loadopt, - int *llx, int* lly, int* urx, int* ury); +static FILE *ps_open (gchar *filename, + const PSLoadVals *loadopt, + gint *llx, + gint *lly, + int *urx, + gint *ury); static void ps_close (FILE *ifp); static gint32 skip_ps (FILE *ifp); -static gint32 load_ps (char *filename, - guint pagenum, - FILE *ifp, - int llx, int lly, int urx, int ury); +static gint32 load_ps (gchar *filename, + guint pagenum, + FILE *ifp, + gint llx, + gint lly, + gint urx, + gint ury); -static void save_ps_header (FILE *ofp, - char *filename); -static void save_ps_setup (FILE *ofp, - gint32 drawable_ID, - int width, - int height, - int bpp); -static void save_ps_trailer (FILE *ofp); -static void save_ps_preview (FILE *ofp, - gint32 drawable_ID); -static void dither_grey (unsigned char *grey, - unsigned char *bw, - int npix, - int linecount); +static void save_ps_header (FILE *ofp, + gchar *filename); +static void save_ps_setup (FILE *ofp, + gint32 drawable_ID, + gint width, + gint height, + gint bpp); +static void save_ps_trailer (FILE *ofp); +static void save_ps_preview (FILE *ofp, + gint32 drawable_ID); +static void dither_grey (guchar *grey, + guchar *bw, + gint npix, + gint linecount); /* Dialog-handling */ -static void init_gtk (void); +static void init_gtk (void); + +static gint load_dialog (void); +static void load_ok_callback (GtkWidget *widget, + gpointer data); +static void load_pages_entry_callback (GtkWidget *widget, + gpointer data); typedef struct { - GtkWidget *dialog; - GtkWidget *entry[4]; - int use_bbox; - int dataformat[4]; - int textalphabits[3]; - int graphicsalphabits[3]; -} LoadDialogVals; - -static gint load_dialog (void); -static void load_ok_callback (GtkWidget *widget, - gpointer data); -static void load_toggle_update (GtkWidget *widget, - gpointer data); - -typedef struct -{ - GtkWidget *dialog; - GtkWidget *entry[4]; - GtkWidget *psize_entry; - int keep_ratio; - int unit[2]; - int rot[4]; - int level; - int eps; - int preview; - int preview_size; + GtkObject *adjustment[4]; + gint level; } SaveDialogVals; static gint save_dialog (void); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_toggle_update (GtkWidget *widget, - gpointer data); -static void save_mm_toggle_update (GtkWidget *widget, +static void save_unit_toggle_update (GtkWidget *widget, gpointer data); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; @@ -279,81 +272,78 @@ static int ascii85_linewidth = 0; static void ascii85_init (void) { - ascii85_len = 0; - ascii85_linewidth = 0; + ascii85_len = 0; + ascii85_linewidth = 0; } static void ascii85_flush (FILE *ofp) { - char c[5]; - int i; - gboolean zero_case = (ascii85_buf == 0); + char c[5]; + int i; + gboolean zero_case = (ascii85_buf == 0); - - for (i=4; i >= 0; i--) + for (i=4; i >= 0; i--) { - c[i] = (ascii85_buf % 85) + '!'; - ascii85_buf /= 85; + c[i] = (ascii85_buf % 85) + '!'; + ascii85_buf /= 85; } - /* check for special case: "!!!!!" becomes "z", but only if not - * at end of data. */ - if (zero_case && (ascii85_len == 4)) + /* check for special case: "!!!!!" becomes "z", but only if not + * at end of data. */ + if (zero_case && (ascii85_len == 4)) { - putc ('z', ofp); - ascii85_linewidth++; + putc ('z', ofp); + ascii85_linewidth++; } - else + else { - ascii85_linewidth += ascii85_len+1; - for (i=0; i < ascii85_len+1; i++) - putc (c[i], ofp); + ascii85_linewidth += ascii85_len+1; + for (i=0; i < ascii85_len+1; i++) + putc (c[i], ofp); } - if (ascii85_linewidth >= 75) + if (ascii85_linewidth >= 75) { - putc ('\n', ofp); - ascii85_linewidth = 0; + putc ('\n', ofp); + ascii85_linewidth = 0; } - ascii85_len = 0; - ascii85_buf = 0; + ascii85_len = 0; + ascii85_buf = 0; } static inline void ascii85_out (unsigned char byte, FILE *ofp) { - if (ascii85_len == 4) - ascii85_flush (ofp); + if (ascii85_len == 4) + ascii85_flush (ofp); - ascii85_buf <<= 8; - ascii85_buf |= byte; - ascii85_len++; + ascii85_buf <<= 8; + ascii85_buf |= byte; + ascii85_len++; } static void ascii85_done (FILE *ofp) { - if (ascii85_len) + if (ascii85_len) { - /* zero any unfilled buffer portion, then flush */ - ascii85_buf <<= (8 * (4-ascii85_len)); - ascii85_flush (ofp); + /* zero any unfilled buffer portion, then flush */ + ascii85_buf <<= (8 * (4-ascii85_len)); + ascii85_flush (ofp); } - putc ('~', ofp); - putc ('>', ofp); - putc ('\n', ofp); + putc ('~', ofp); + putc ('>', ofp); + putc ('\n', ofp); } MAIN () - static void query (void) - { static GParamDef load_args[] = { @@ -365,9 +355,9 @@ query (void) { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) - / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef set_load_args[] = { @@ -380,7 +370,8 @@ query (void) { PARAM_INT32, "TextAlphaBits", "1, 2, or 4" }, { PARAM_INT32, "GraphicsAlphaBits", "1, 2, or 4" } }; - static int nset_load_args = sizeof (set_load_args) / sizeof (set_load_args[0]); + static gint nset_load_args = (sizeof (set_load_args) / + sizeof (set_load_args[0])); static GParamDef save_args[] = { @@ -401,7 +392,7 @@ query (void) { PARAM_INT32, "preview", "0: no preview, >0: max. size of preview" }, { PARAM_INT32, "level", "1: PostScript Level 1, 2: PostScript Level 2" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -431,9 +422,8 @@ query (void) gimp_install_procedure ("file_ps_save", _("save file in PostScript file format"), - _("PostScript saving handles all image types except \ -those with alpha channels."), - "Peter Kirchgessner ", + _("PostScript saving handles all image types except those with alpha channels."), + "Peter Kirchgessner ", "Peter Kirchgessner", dversio, "/PostScript", @@ -442,82 +432,91 @@ those with alpha channels."), nsave_args, 0, save_args, NULL); - /* Register file plugin by plugin name and handable extensions */ - gimp_register_magic_load_handler ("file_ps_load", "ps,eps,pdf", "", + gimp_register_magic_load_handler ("file_ps_load", + "ps,eps,pdf", + "", "0,string,%!,0,string,%PDF"); - gimp_register_save_handler ("file_ps_save", "ps,eps", ""); + gimp_register_save_handler ("file_ps_save", + "ps,eps", + ""); } #ifdef GIMP_HAVE_RESOLUTION_INFO static void ps_set_save_size (PSSaveVals *vals, - gint32 image_ID) - -{gdouble xres, yres, factor, iw, ih; - guint width, height; - GUnit unit; + gint32 image_ID) +{ + gdouble xres, yres, factor, iw, ih; + guint width, height; + GUnit unit; gimp_image_get_resolution (image_ID, &xres, &yres); + if ((xres < 1e-5) || (yres < 1e-5)) + { + xres = yres = 72.0; + } + /* Calculate size of image in inches */ + width = gimp_image_width (image_ID); + height = gimp_image_height (image_ID); + iw = width / xres; + ih = height / yres; + unit = gimp_image_get_unit (image_ID); factor = gimp_unit_get_factor (unit); - if ((factor < 1e-5) || (xres < 1e-5) || (yres < 1e-5)) - { - factor = 1.0; xres = yres = 72.0; - } - /* Calculate size of image in inches */ - width = gimp_image_width (image_ID); - height = gimp_image_height (image_ID); - iw = width / xres / factor; - ih = height / yres / factor; + if (factor == 0.0254 || + factor == 0.254 || + factor == 2.54 || + factor == 25.4) + { + vals->unit_mm = TRUE; + } + if (vals->unit_mm) - { - iw *= 25.4; ih *= 25.4; - } - vals->width = iw; + { + iw *= 25.4; + ih *= 25.4; + } + vals->width = iw; vals->height = ih; } #endif static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) - { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID = -1; - gint32 drawable_ID = -1; - gint32 orig_image_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID = -1; + gint32 drawable_ID = -1; + gint32 orig_image_ID = -1; GimpExportReturnType export = EXPORT_CANCEL; - int k; + gint k; l_run_mode = run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_ps_load") == 0) { INIT_I18N_UI(); - *nreturn_vals = 2; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = -1; - switch (run_mode) - { + { case RUN_INTERACTIVE: /* Possibly retrieve data */ gimp_get_data ("file_ps_load", &plvals); - if (!load_dialog ()) return; + if (! load_dialog ()) + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -535,20 +534,28 @@ run (char *name, default: break; - } + } + if (status == STATUS_SUCCESS) - { - check_load_vals (); - image_ID = load_image (param[1].data.d_string); + { + check_load_vals (); + image_ID = load_image (param[1].data.d_string); - status = (image_ID != -1) ? STATUS_SUCCESS : STATUS_EXECUTION_ERROR; + if (image_ID != -1) + { + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_ID; + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } - /* Store plvals data */ - if (status == STATUS_SUCCESS) - gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); - } - values[0].data.d_status = status; - values[1].data.d_image = image_ID; + /* Store plvals data */ + if (status == STATUS_SUCCESS) + gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); } else if (strcmp (name, "file_ps_save") == 0) { @@ -557,18 +564,19 @@ run (char *name, image_ID = orig_image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - /* eventually export the image */ + /* eventually export the image */ switch (run_mode) { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: init_gtk (); - export = gimp_export_image (&image_ID, &drawable_ID, "PS", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + export = gimp_export_image (&image_ID, &drawable_ID, "PS", + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -592,29 +600,29 @@ run (char *name, #endif /* First acquire information with a dialog */ if (! save_dialog ()) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 15) - { - status = STATUS_CALLING_ERROR; - } + { + status = STATUS_CALLING_ERROR; + } else - { - psvals.width = param[5].data.d_float; - psvals.height = param[6].data.d_float; - psvals.x_offset = param[7].data.d_float; - psvals.y_offset = param[8].data.d_float; - psvals.unit_mm = (param[9].data.d_int32 != 0); - psvals.keep_ratio = (param[10].data.d_int32 != 0); - psvals.rotate = param[11].data.d_int32; - psvals.eps = param[12].data.d_int32; - psvals.preview = (param[13].data.d_int32 != 0); - psvals.preview_size = param[13].data.d_int32; - psvals.level = param[14].data.d_int32; - } + { + psvals.width = param[5].data.d_float; + psvals.height = param[6].data.d_float; + psvals.x_offset = param[7].data.d_float; + psvals.y_offset = param[8].data.d_float; + psvals.unit_mm = (param[9].data.d_int32 != 0); + psvals.keep_ratio = (param[10].data.d_int32 != 0); + psvals.rotate = param[11].data.d_int32; + psvals.eps = param[12].data.d_int32; + psvals.preview = (param[13].data.d_int32 != 0); + psvals.preview_size = param[13].data.d_int32; + psvals.level = param[14].data.d_int32; + } break; case RUN_WITH_LAST_VALS: @@ -627,168 +635,171 @@ run (char *name, } if (status == STATUS_SUCCESS) - { + { #ifdef GIMP_HAVE_RESOLUTION_INFO - if ((psvals.width == 0.0) || (psvals.height == 0.0)) - ps_set_save_size (&psvals, orig_image_ID); + if ((psvals.width == 0.0) || (psvals.height == 0.0)) + ps_set_save_size (&psvals, orig_image_ID); #endif - check_save_vals (); - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) - { - /* Store psvals data */ - gimp_set_data ("file_ps_save", &psvals, sizeof (PSSaveVals)); - } - else - { - status = STATUS_EXECUTION_ERROR; - } - } + check_save_vals (); + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + /* Store psvals data */ + gimp_set_data ("file_ps_save", &psvals, sizeof (PSSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); - - values[0].data.d_status = status; } else if (strcmp (name, "file_ps_load_setargs") == 0) { /* Make sure all the arguments are there! */ if (nparams != 8) - { - status = STATUS_CALLING_ERROR; - } + { + status = STATUS_CALLING_ERROR; + } else - { - plvals.resolution = param[0].data.d_int32; - plvals.width = param[1].data.d_int32; - plvals.height = param[2].data.d_int32; - plvals.use_bbox = param[3].data.d_int32; - if (param[4].data.d_string != NULL) - strncpy (plvals.pages,param[4].data.d_string,sizeof (plvals.pages)); - else - plvals.pages[0] = '\0'; - plvals.pages[sizeof (plvals.pages) - 1] = '\0'; - plvals.pnm_type = param[5].data.d_int32; - plvals.textalpha = param[6].data.d_int32; - plvals.graphicsalpha = param[7].data.d_int32; - check_load_vals (); - gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); - } - values[0].data.d_status = status; + { + plvals.resolution = param[0].data.d_int32; + plvals.width = param[1].data.d_int32; + plvals.height = param[2].data.d_int32; + plvals.use_bbox = param[3].data.d_int32; + if (param[4].data.d_string != NULL) + strncpy (plvals.pages, param[4].data.d_string, + sizeof (plvals.pages)); + else + plvals.pages[0] = '\0'; + plvals.pages[sizeof (plvals.pages) - 1] = '\0'; + plvals.pnm_type = param[5].data.d_int32; + plvals.textalpha = param[6].data.d_int32; + plvals.graphicsalpha = param[7].data.d_int32; + check_load_vals (); + gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); + } } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) - +load_image (gchar *filename) { - gint32 image_ID, *image_list, *nl; - guint page_count; - FILE *ifp; - char *temp; - int llx, lly, urx, ury; - int k, n_images, max_images, max_pagenum; + gint32 image_ID, *image_list, *nl; + guint page_count; + FILE *ifp; + char *temp; + int llx, lly, urx, ury; + int k, n_images, max_images, max_pagenum; #ifdef PS_DEBUG - g_print ("load_image:\n resolution = %d\n", plvals.resolution); - g_print (" %dx%d pixels\n", plvals.width, plvals.height); - g_print (" BoundingBox: %d\n", plvals.use_bbox); - g_print (" Colouring: %d\n", plvals.pnm_type); - g_print (" TextAlphaBits: %d\n", plvals.textalpha); - g_print (" GraphicsAlphaBits: %d\n", plvals.graphicsalpha); + g_print ("load_image:\n resolution = %d\n", plvals.resolution); + g_print (" %dx%d pixels\n", plvals.width, plvals.height); + g_print (" BoundingBox: %d\n", plvals.use_bbox); + g_print (" Colouring: %d\n", plvals.pnm_type); + g_print (" TextAlphaBits: %d\n", plvals.textalpha); + g_print (" GraphicsAlphaBits: %d\n", plvals.graphicsalpha); #endif - /* Try to see if PostScript file is available */ - ifp = fopen (filename, "r"); - if (ifp == NULL) - { - g_message (_("PS: can't open file for reading")); - return (-1); - } - fclose (ifp); + /* Try to see if PostScript file is available */ + ifp = fopen (filename, "r"); + if (ifp == NULL) + { + g_message (_("PS: can't open file for reading")); + return (-1); + } + fclose (ifp); - if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Interpreting and Loading %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + if (l_run_mode != RUN_NONINTERACTIVE) + { + temp = g_strdup_printf (_("Interpreting and Loading %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } - ifp = ps_open (filename, &plvals, &llx, &lly, &urx, &ury); - if (!ifp) - { - g_message (_("PS: can't interprete file")); - return (-1); - } + ifp = ps_open (filename, &plvals, &llx, &lly, &urx, &ury); + if (!ifp) + { + g_message (_("PS: can't interprete file")); + return (-1); + } - image_list = (gint32 *)g_malloc (10 * sizeof (gint32)); - n_images = 0; - max_images = 10; + image_list = (gint32 *)g_malloc (10 * sizeof (gint32)); + n_images = 0; + max_images = 10; - max_pagenum = 9999; /* Try to get the maximum pagenumber to read */ - if (!page_in_list (plvals.pages, max_pagenum)) /* Is there a limit in list ? */ - { - max_pagenum = -1; - for (temp = plvals.pages; *temp != '\0'; temp++) - { - if ((*temp < '0') || (*temp > '9')) continue; /* Search next digit */ - sscanf (temp, "%d", &k); - if (k > max_pagenum) max_pagenum = k; - while ((*temp >= '0') && (*temp <= '9')) temp++; - temp--; - } - if (max_pagenum < 1) max_pagenum = 9999; - } + max_pagenum = 9999; /* Try to get the maximum pagenumber to read */ + if (!page_in_list (plvals.pages, max_pagenum)) /* Is there a limit in list ? */ + { + max_pagenum = -1; + for (temp = plvals.pages; *temp != '\0'; temp++) + { + if ((*temp < '0') || (*temp > '9')) continue; /* Search next digit */ + sscanf (temp, "%d", &k); + if (k > max_pagenum) max_pagenum = k; + while ((*temp >= '0') && (*temp <= '9')) temp++; + temp--; + } + if (max_pagenum < 1) max_pagenum = 9999; + } - /* Load all images */ - for (page_count = 1; page_count <= max_pagenum; page_count++) - { - if (page_in_list (plvals.pages, page_count)) - { - image_ID = load_ps (filename, page_count, ifp, llx, lly, urx, ury); - if (image_ID == -1) break; + /* Load all images */ + for (page_count = 1; page_count <= max_pagenum; page_count++) + { + if (page_in_list (plvals.pages, page_count)) + { + image_ID = load_ps (filename, page_count, ifp, llx, lly, urx, ury); + if (image_ID == -1) break; #ifdef GIMP_HAVE_RESOLUTION_INFO - gimp_image_set_resolution (image_ID, - (double)plvals.resolution, (double)plvals.resolution); - gimp_image_set_unit (image_ID, UNIT_INCH); + gimp_image_set_resolution (image_ID, + (double) plvals.resolution, + (double) plvals.resolution); #endif - if (n_images == max_images) - { - nl = (gint32 *)g_realloc (image_list, (max_images+10)*sizeof (gint32)); - if (nl == NULL) break; - image_list = nl; - max_images += 10; - } - image_list[n_images++] = image_ID; - } - else /* Skip an image */ - { - image_ID = skip_ps (ifp); - if (image_ID == -1) break; - } - } + if (n_images == max_images) + { + nl = (gint32 *) g_realloc (image_list, + (max_images+10)*sizeof (gint32)); + if (nl == NULL) break; + image_list = nl; + max_images += 10; + } + image_list[n_images++] = image_ID; + } + else /* Skip an image */ + { + image_ID = skip_ps (ifp); + if (image_ID == -1) break; + } + } - ps_close (ifp); + ps_close (ifp); - /* Display images in reverse order. The last will be displayed by GIMP itself*/ - if (l_run_mode != RUN_NONINTERACTIVE) - { - for (k = n_images-1; k >= 1; k--) - gimp_display_new (image_list[k]); - } + /* Display images in reverse order. The last will be displayed by GIMP itself*/ + if (l_run_mode != RUN_NONINTERACTIVE) + { + for (k = n_images-1; k >= 1; k--) + gimp_display_new (image_list[k]); + } - image_ID = (n_images > 0) ? image_list[0] : -1; - g_free (image_list); + image_ID = (n_images > 0) ? image_list[0] : -1; + g_free (image_list); - return (image_ID); + return (image_ID); } static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) - { FILE* ofp; GDrawableType drawable_type; @@ -803,13 +814,13 @@ save_image (char *filename, /* Make sure we're not saving an image with an alpha channel */ if (gimp_drawable_has_alpha (drawable_ID)) - { - g_message (_("PostScript save cannot handle images with alpha channels")); - return FALSE; - } + { + g_message (_("PostScript save cannot handle images with alpha channels")); + return FALSE; + } switch (drawable_type) - { + { case INDEXED_IMAGE: case GRAY_IMAGE: case RGB_IMAGE: @@ -818,22 +829,22 @@ save_image (char *filename, g_message (_("PS: cannot operate on unknown image types")); return (FALSE); break; - } + } /* Open the output file. */ ofp = fopen (filename, "wb"); if (!ofp) - { - g_message (_("PS: can't open file for writing")); - return (FALSE); - } + { + g_message (_("PS: can't open file for writing")); + return (FALSE); + } if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Saving %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + { + temp = g_strdup_printf (_("Saving %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } save_ps_header (ofp, filename); @@ -855,13 +866,16 @@ save_image (char *filename, /* Check (and correct) the load values plvals */ static void check_load_vals (void) - { - if (plvals.resolution < 5) plvals.resolution = 5; - else if (plvals.resolution > 1440) plvals.resolution = 1440; + if (plvals.resolution < 5) + plvals.resolution = 5; + else if (plvals.resolution > 1440) + plvals.resolution = 1440; - if (plvals.width < 2) plvals.width = 2; - if (plvals.height < 2) plvals.height = 2; + if (plvals.width < 2) + plvals.width = 2; + if (plvals.height < 2) + plvals.height = 2; plvals.use_bbox = (plvals.use_bbox != 0); if (plvals.pages[0] == '\0') strcpy (plvals.pages, "1-99"); @@ -879,39 +893,24 @@ check_load_vals (void) /* Check (and correct) the save values psvals */ static void check_save_vals (void) +{ + int i; -{int i; - - i = psvals.rotate; - if ((i != 0) && (i != 90) && (i != 180) && (i != 270)) - psvals.rotate = 90; - if (psvals.preview_size <= 0) psvals.preview = 0; -} - - -/* Convert float to ascii for use in labels (cuts off trailing blanks). */ -/* The pointer returned is only valid up to the next call of the function. */ -static char *ftoa (char *format, - double r) - -{static char buffer[32]; - register int n; - - sprintf (buffer, format, r); - n = strlen (buffer)-1; - while ((n >= 0) && (buffer[n] == ' ')) - buffer[n--] = '\0'; - return (buffer); + i = psvals.rotate; + if ((i != 0) && (i != 90) && (i != 180) && (i != 270)) + psvals.rotate = 90; + if (psvals.preview_size <= 0) + psvals.preview = FALSE; } /* Check if a page is in a given list */ static gint -page_in_list (char *list, - guint page_num) - -{char tmplist[STR_LENGTH], *c0, *c1; - int state, start_num, end_num; +page_in_list (gchar *list, + guint page_num) +{ + char tmplist[STR_LENGTH], *c0, *c1; + int state, start_num, end_num; #define READ_STARTNUM 0 #define READ_ENDNUM 1 #define CHK_LIST(a,b,c) {int low=(a),high=(b),swp; \ @@ -919,97 +918,97 @@ page_in_list (char *list, if (low>high) {swp=low; low=high; high=swp;} \ if ((low<=(c))&&(high>=(c))) return (1); } } - if ((list == NULL) || (*list == '\0')) return (1); + if ((list == NULL) || (*list == '\0')) return (1); - strncpy (tmplist, list, STR_LENGTH); - tmplist[STR_LENGTH-1] = '\0'; + strncpy (tmplist, list, STR_LENGTH); + tmplist[STR_LENGTH-1] = '\0'; - c0 = c1 = tmplist; - while (*c1) /* Remove all whitespace and break on unsupported characters */ - { - if ((*c1 >= '0') && (*c1 <= '9')) - { - *(c0++) = *c1; - } - else if ((*c1 == '-') || (*c1 == ',')) - { /* Try to remove double occurances of these characters */ - if (c0 == tmplist) - { - *(c0++) = *c1; - } - else - { - if (*(c0-1) != *c1) - *(c0++) = *c1; - } - } - else break; - c1++; - } - if (c0 == tmplist) return (1); - *c0 = '\0'; + c0 = c1 = tmplist; + while (*c1) /* Remove all whitespace and break on unsupported characters */ + { + if ((*c1 >= '0') && (*c1 <= '9')) + { + *(c0++) = *c1; + } + else if ((*c1 == '-') || (*c1 == ',')) + { /* Try to remove double occurances of these characters */ + if (c0 == tmplist) + { + *(c0++) = *c1; + } + else + { + if (*(c0-1) != *c1) + *(c0++) = *c1; + } + } + else break; + c1++; + } + if (c0 == tmplist) return (1); + *c0 = '\0'; - /* Now we have a comma separated list like 1-4-1,-3,1- */ + /* Now we have a comma separated list like 1-4-1,-3,1- */ - start_num = end_num = -1; - state = READ_STARTNUM; - for (c0 = tmplist; *c0 != '\0'; c0++) - { - switch (state) - { - case READ_STARTNUM: - if (*c0 == ',') - { - if ((start_num > 0) && (start_num == (int)page_num)) return (-1); - start_num = -1; - } - else if (*c0 == '-') - { - if (start_num < 0) start_num = 1; - state = READ_ENDNUM; - } - else /* '0' - '9' */ - { - if (start_num < 0) start_num = 0; - start_num *= 10; - start_num += *c0 - '0'; - } - break; + start_num = end_num = -1; + state = READ_STARTNUM; + for (c0 = tmplist; *c0 != '\0'; c0++) + { + switch (state) + { + case READ_STARTNUM: + if (*c0 == ',') + { + if ((start_num > 0) && (start_num == (int)page_num)) return (-1); + start_num = -1; + } + else if (*c0 == '-') + { + if (start_num < 0) start_num = 1; + state = READ_ENDNUM; + } + else /* '0' - '9' */ + { + if (start_num < 0) start_num = 0; + start_num *= 10; + start_num += *c0 - '0'; + } + break; - case READ_ENDNUM: - if (*c0 == ',') - { - if (end_num < 0) end_num = 9999; - CHK_LIST (start_num, end_num, (int)page_num); - start_num = end_num = -1; - state = READ_STARTNUM; - } - else if (*c0 == '-') - { - CHK_LIST (start_num, end_num, (int)page_num); - start_num = end_num; - end_num = -1; - } - else /* '0' - '9' */ - { - if (end_num < 0) end_num = 0; - end_num *= 10; - end_num += *c0 - '0'; - } - break; - } - } - if (state == READ_STARTNUM) - { - if (start_num > 0) - return (start_num == (int)page_num); - } - else - { - if (end_num < 0) end_num = 9999; - CHK_LIST (start_num, end_num, (int)page_num); - } - return (0); + case READ_ENDNUM: + if (*c0 == ',') + { + if (end_num < 0) end_num = 9999; + CHK_LIST (start_num, end_num, (int)page_num); + start_num = end_num = -1; + state = READ_STARTNUM; + } + else if (*c0 == '-') + { + CHK_LIST (start_num, end_num, (int)page_num); + start_num = end_num; + end_num = -1; + } + else /* '0' - '9' */ + { + if (end_num < 0) end_num = 0; + end_num *= 10; + end_num += *c0 - '0'; + } + break; + } + } + if (state == READ_STARTNUM) + { + if (start_num > 0) + return (start_num == (int)page_num); + } + else + { + if (end_num < 0) end_num = 9999; + CHK_LIST (start_num, end_num, (int)page_num); + } + return (0); #undef CHK_LIST } @@ -1017,202 +1016,202 @@ page_in_list (char *list, /* Get the BoundingBox of a PostScript file. On success, 0 is returned. */ /* On failure, -1 is returned. */ static gint -get_bbox (char *filename, - int *x0, - int *y0, - int *x1, - int *y1) +get_bbox (gchar *filename, + gint *x0, + gint *y0, + gint *x1, + gint *y1) +{ + char line[1024], *src; + FILE *ifp; + int retval = -1; -{char line[1024], *src; - FILE *ifp; - int retval = -1; + ifp = fopen (filename, "rb"); + if (ifp == NULL) return (-1); - ifp = fopen (filename, "rb"); - if (ifp == NULL) return (-1); - - for (;;) - { - if (fgets (line, sizeof (line)-1, ifp) == NULL) break; - if ((line[0] != '%') || (line[1] != '%')) continue; - src = &(line[2]); - while ((*src == ' ') || (*src == '\t')) src++; - if (strncmp (src, "BoundingBox", 11) != 0) continue; - src += 11; - while ((*src == ' ') || (*src == '\t') || (*src == ':')) src++; - if (strncmp (src, "(atend)", 7) == 0) continue; - if (sscanf (src, "%d%d%d%d", x0, y0, x1, y1) == 4) - retval = 0; - break; - } - fclose (ifp); - return (retval); + for (;;) + { + if (fgets (line, sizeof (line)-1, ifp) == NULL) break; + if ((line[0] != '%') || (line[1] != '%')) continue; + src = &(line[2]); + while ((*src == ' ') || (*src == '\t')) src++; + if (strncmp (src, "BoundingBox", 11) != 0) continue; + src += 11; + while ((*src == ' ') || (*src == '\t') || (*src == ':')) src++; + if (strncmp (src, "(atend)", 7) == 0) continue; + if (sscanf (src, "%d%d%d%d", x0, y0, x1, y1) == 4) + retval = 0; + break; + } + fclose (ifp); + return (retval); } -static char *pnmfile; +static gchar *pnmfile; #ifdef G_OS_WIN32 -static char *indirfile = NULL; +static gchar *indirfile = NULL; #endif /* Open the PostScript file. On failure, NULL is returned. */ /* The filepointer returned will give a PNM-file generated */ /* by the PostScript-interpreter. */ static FILE * -ps_open (char *filename, +ps_open (gchar *filename, const PSLoadVals *loadopt, - int *llx, - int *lly, - int *urx, - int *ury) + gint *llx, + gint *lly, + gint *urx, + gint *ury) +{ + char *cmd, *gs, *gs_opts, *driver; + FILE *fd_popen; + int width, height, resolution; + int x0, y0, x1, y1; + int is_pdf; + char TextAlphaBits[64], GraphicsAlphaBits[64], geometry[32]; -{char *cmd, *gs, *gs_opts, *driver; - FILE *fd_popen; - int width, height, resolution; - int x0, y0, x1, y1; - int is_pdf; - char TextAlphaBits[64], GraphicsAlphaBits[64], geometry[32]; + resolution = loadopt->resolution; + *llx = *lly = 0; + width = loadopt->width; + height = loadopt->height; + *urx = width-1; + *ury = height-1; - resolution = loadopt->resolution; - *llx = *lly = 0; - width = loadopt->width; - height = loadopt->height; - *urx = width-1; - *ury = height-1; - - /* Check if the file is a PDF. For PDF, we cant set geometry */ - is_pdf = 0; + /* Check if the file is a PDF. For PDF, we cant set geometry */ + is_pdf = 0; #ifndef __EMX__ - fd_popen = fopen (filename, "r"); + fd_popen = fopen (filename, "r"); #else - fd_popen = fopen (filename, "rb"); + fd_popen = fopen (filename, "rb"); #endif - if (fd_popen != NULL) - {char hdr[4]; + if (fd_popen != NULL) + { + char hdr[4]; - fread (hdr, 1, 4, fd_popen); - is_pdf = (strncmp (hdr, "%PDF", 4) == 0); - fclose (fd_popen); - } + fread (hdr, 1, 4, fd_popen); + is_pdf = (strncmp (hdr, "%PDF", 4) == 0); + fclose (fd_popen); + } - if ((!is_pdf) && (loadopt->use_bbox)) /* Try the BoundingBox ? */ - { - if ( (get_bbox (filename, &x0, &y0, &x1, &y1) == 0) - && (x0 >= 0) && (y0 >= 0) && (x1 > x0) && (y1 > y0)) - { - *llx = (int)((x0/72.0) * resolution + 0.01); - *lly = (int)((y0/72.0) * resolution + 0.01); - *urx = (int)((x1/72.0) * resolution + 0.01); - *ury = (int)((y1/72.0) * resolution + 0.01); - width = *urx + 1; - height = *ury + 1; - } - } - if (loadopt->pnm_type == 4) driver = "pbmraw"; - else if (loadopt->pnm_type == 5) driver = "pgmraw"; - else if (loadopt->pnm_type == 7) driver = "pnmraw"; - else driver = "ppmraw"; + if ((!is_pdf) && (loadopt->use_bbox)) /* Try the BoundingBox ? */ + { + if ( (get_bbox (filename, &x0, &y0, &x1, &y1) == 0) + && (x0 >= 0) && (y0 >= 0) && (x1 > x0) && (y1 > y0)) + { + *llx = (int)((x0/72.0) * resolution + 0.01); + *lly = (int)((y0/72.0) * resolution + 0.01); + *urx = (int)((x1/72.0) * resolution + 0.01); + *ury = (int)((y1/72.0) * resolution + 0.01); + width = *urx + 1; + height = *ury + 1; + } + } + if (loadopt->pnm_type == 4) driver = "pbmraw"; + else if (loadopt->pnm_type == 5) driver = "pgmraw"; + else if (loadopt->pnm_type == 7) driver = "pnmraw"; + else driver = "ppmraw"; #ifdef USE_REAL_OUTPUTFILE - /* For instance, the Win32 port of ghostscript doesn't work correctly when - * using standard output as output file. - * Thus, use a real output file. - */ - pnmfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "p%lx", - g_get_tmp_dir (), getpid ()); + /* For instance, the Win32 port of ghostscript doesn't work correctly when + * using standard output as output file. + * Thus, use a real output file. + */ + pnmfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "p%lx", + g_get_tmp_dir (), getpid ()); #else - pnmfile = "-"; + pnmfile = "-"; #endif - gs = getenv ("GS_PROG"); + gs = getenv ("GS_PROG"); #ifndef G_OS_WIN32 - if (gs == NULL) gs = "gs"; + if (gs == NULL) gs = "gs"; #else - /* We want the console ghostscript application. It should be in the PATH */ - if (gs == NULL) gs = "gswin32c"; + /* We want the console ghostscript application. It should be in the PATH */ + if (gs == NULL) gs = "gswin32c"; #endif - gs_opts = getenv ("GS_OPTIONS"); - if (gs_opts == NULL) - gs_opts = "-dSAFER"; - else - gs_opts = ""; /* Ghostscript will add these options */ + gs_opts = getenv ("GS_OPTIONS"); + if (gs_opts == NULL) + gs_opts = "-dSAFER"; + else + gs_opts = ""; /* Ghostscript will add these options */ - TextAlphaBits[0] = GraphicsAlphaBits[0] = geometry[0] = '\0'; + TextAlphaBits[0] = GraphicsAlphaBits[0] = geometry[0] = '\0'; - /* Antialiasing not available for PBM-device */ - if ((loadopt->pnm_type != 4) && (loadopt->textalpha != 1)) - sprintf (TextAlphaBits, "-dTextAlphaBits=%d ", (int)loadopt->textalpha); + /* Antialiasing not available for PBM-device */ + if ((loadopt->pnm_type != 4) && (loadopt->textalpha != 1)) + sprintf (TextAlphaBits, "-dTextAlphaBits=%d ", (int)loadopt->textalpha); - if ((loadopt->pnm_type != 4) && (loadopt->graphicsalpha != 1)) - sprintf (GraphicsAlphaBits, "-dGraphicsAlphaBits=%d ", - (int)loadopt->graphicsalpha); + if ((loadopt->pnm_type != 4) && (loadopt->graphicsalpha != 1)) + sprintf (GraphicsAlphaBits, "-dGraphicsAlphaBits=%d ", + (int)loadopt->graphicsalpha); - if (!is_pdf) /* For PDF, we cant set geometry */ - sprintf (geometry,"-g%dx%d ", width, height); + if (!is_pdf) /* For PDF, we cant set geometry */ + sprintf (geometry,"-g%dx%d ", width, height); - cmd = g_strdup_printf ("%s -sDEVICE=%s -r%d %s%s%s-q -dNOPAUSE %s \ + cmd = g_strdup_printf ("%s -sDEVICE=%s -r%d %s%s%s-q -dNOPAUSE %s \ -sOutputFile=%s %s -c quit", - gs, driver, resolution, geometry, - TextAlphaBits, GraphicsAlphaBits, - gs_opts, pnmfile, filename); + gs, driver, resolution, geometry, + TextAlphaBits, GraphicsAlphaBits, + gs_opts, pnmfile, filename); #ifdef PS_DEBUG - g_print ("Going to start ghostscript with:\n%s\n", cmd); + g_print ("Going to start ghostscript with:\n%s\n", cmd); #endif #ifndef USE_REAL_OUTPUTFILE - /* Start the command and use a pipe for reading the PNM-file. */ + /* Start the command and use a pipe for reading the PNM-file. */ #ifndef __EMX__ - fd_popen = popen (cmd, "r"); + fd_popen = popen (cmd, "r"); #else - fd_popen = popen (cmd, "rb"); + fd_popen = popen (cmd, "rb"); #endif #else - /* If someone does not like the pipe (or it does not work), just start */ - /* ghostscript with a real outputfile. When ghostscript has finished, */ - /* open the outputfile and return its filepointer. But be sure */ - /* to close and remove the file within ps_close(). */ + /* If someone does not like the pipe (or it does not work), just start */ + /* ghostscript with a real outputfile. When ghostscript has finished, */ + /* open the outputfile and return its filepointer. But be sure */ + /* to close and remove the file within ps_close(). */ #ifdef G_OS_WIN32 /* Work around braindead command line length limit. * Hmm, I wonder if this is necessary, but it doesn't harm... */ - if (strlen (cmd) >= 100) - { - FILE *indf; - indirfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "i%lx", - g_get_tmp_dir (), getpid ()); - indf = fopen (indirfile, "w"); - fprintf (indf, "%s\n", cmd + strlen (gs) + 1); - sprintf (cmd, "%s @%s", gs, indirfile); - fclose (indf); - } + if (strlen (cmd) >= 100) + { + FILE *indf; + indirfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "i%lx", + g_get_tmp_dir (), getpid ()); + indf = fopen (indirfile, "w"); + fprintf (indf, "%s\n", cmd + strlen (gs) + 1); + sprintf (cmd, "%s @%s", gs, indirfile); + fclose (indf); + } #endif - system (cmd); + system (cmd); #ifndef __EMX__ - fd_popen = fopen (pnmfile, "r"); + fd_popen = fopen (pnmfile, "r"); #else - fd_popen = fopen (pnmfile, "rb"); + fd_popen = fopen (pnmfile, "rb"); #endif #endif - g_free (cmd); + g_free (cmd); - return (fd_popen); + return (fd_popen); } /* Close the PNM-File of the PostScript interpreter */ static void ps_close (FILE *ifp) - { #ifndef USE_REAL_OUTPUTFILE - /* Finish reading from pipe. */ - pclose (ifp); + /* Finish reading from pipe. */ + pclose (ifp); #else /* If a real outputfile was used, close the file and remove it. */ - fclose (ifp); - unlink (pnmfile); + fclose (ifp); + unlink (pnmfile); #ifdef G_OS_WIN32 - if (indirfile != NULL) - unlink (indirfile); + if (indirfile != NULL) + unlink (indirfile); #endif #endif } @@ -1221,90 +1220,90 @@ ps_close (FILE *ifp) /* Read the header of a raw PNM-file and return type (4-6) or -1 on failure */ static gint read_pnmraw_type (FILE *ifp, - int *width, - int *height, - int *maxval) + gint *width, + gint *height, + gint *maxval) +{ + register int frst, scnd, thrd; + gint pnmtype; + char line[1024]; -{register int frst, scnd, thrd; - gint pnmtype; - char line[1024]; - - /* GhostScript may write some informational messages infront of the header. */ - /* We are just looking at a Px\n in the input stream. */ - frst = getc (ifp); - scnd = getc (ifp); - thrd = getc (ifp); - for (;;) - { - if (thrd == EOF) return (-1); + /* GhostScript may write some informational messages infront of the header. */ + /* We are just looking at a Px\n in the input stream. */ + frst = getc (ifp); + scnd = getc (ifp); + thrd = getc (ifp); + for (;;) + { + if (thrd == EOF) return (-1); #if defined (__EMX__) || defined (WIN32) - if (thrd == '\r') thrd = getc (ifp); + if (thrd == '\r') thrd = getc (ifp); #endif - if ((thrd == '\n') && (frst == 'P') && (scnd >= '1') && (scnd <= '6')) - break; - frst = scnd; - scnd = thrd; - thrd = getc (ifp); - } - pnmtype = scnd - '0'; - /* We dont use the ASCII-versions */ - if ((pnmtype >= 1) && (pnmtype <= 3)) return (-1); + if ((thrd == '\n') && (frst == 'P') && (scnd >= '1') && (scnd <= '6')) + break; + frst = scnd; + scnd = thrd; + thrd = getc (ifp); + } + pnmtype = scnd - '0'; + /* We dont use the ASCII-versions */ + if ((pnmtype >= 1) && (pnmtype <= 3)) return (-1); - /* Read width/height */ - for (;;) - { - if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); - if (line[0] != '#') break; - } - if (sscanf (line, "%d%d", width, height) != 2) return (-1); - *maxval = 255; + /* Read width/height */ + for (;;) + { + if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); + if (line[0] != '#') break; + } + if (sscanf (line, "%d%d", width, height) != 2) return (-1); + *maxval = 255; - if (pnmtype != 4) /* Read maxval */ - { - for (;;) - { - if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); - if (line[0] != '#') break; - } - if (sscanf (line, "%d", maxval) != 1) return (-1); - } - return (pnmtype); + if (pnmtype != 4) /* Read maxval */ + { + for (;;) + { + if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); + if (line[0] != '#') break; + } + if (sscanf (line, "%d", maxval) != 1) return (-1); + } + return (pnmtype); } /* Create an image. Sets layer_ID, drawable and rgn. Returns image_ID */ static gint32 -create_new_image (char *filename, - guint pagenum, - guint width, - guint height, - GImageType type, - gint32 *layer_ID, - GDrawable **drawable, - GPixelRgn *pixel_rgn) +create_new_image (gchar *filename, + guint pagenum, + guint width, + guint height, + GImageType type, + gint32 *layer_ID, + GDrawable **drawable, + GPixelRgn *pixel_rgn) +{ + gint32 image_ID; + GDrawableType gdtype; + char *tmp; -{gint32 image_ID; - GDrawableType gdtype; - char *tmp; + if (type == GRAY) gdtype = GRAY_IMAGE; + else if (type == INDEXED) gdtype = INDEXED_IMAGE; + else gdtype = RGB_IMAGE; - if (type == GRAY) gdtype = GRAY_IMAGE; - else if (type == INDEXED) gdtype = INDEXED_IMAGE; - else gdtype = RGB_IMAGE; + image_ID = gimp_image_new (width, height, type); + tmp = g_strdup_printf ("%s-pg%ld", filename, (long)pagenum); + gimp_image_set_filename (image_ID, tmp); + g_free (tmp); - image_ID = gimp_image_new (width, height, type); - tmp = g_strdup_printf ("%s-pg%ld", filename, (long)pagenum); - gimp_image_set_filename (image_ID, tmp); - g_free (tmp); + *layer_ID = gimp_layer_new (image_ID, "Background", width, height, + gdtype, 100, NORMAL_MODE); + gimp_image_add_layer (image_ID, *layer_ID, 0); - *layer_ID = gimp_layer_new (image_ID, "Background", width, height, - gdtype, 100, NORMAL_MODE); - gimp_image_add_layer (image_ID, *layer_ID, 0); + *drawable = gimp_drawable_get (*layer_ID); + gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width, + (*drawable)->height, TRUE, FALSE); - *drawable = gimp_drawable_get (*layer_ID); - gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width, - (*drawable)->height, TRUE, FALSE); - - return (image_ID); + return (image_ID); } @@ -1312,200 +1311,200 @@ create_new_image (char *filename, /* Returns 0 on success, -1 on failure. */ static gint32 skip_ps (FILE *ifp) +{ + register int k, c; + int i, pnmtype, width, height, maxval, bpl; -{register int k, c; - int i, pnmtype, width, height, maxval, bpl; + pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); + if (pnmtype == 4) /* Portable bitmap */ + bpl = (width + 7)/8; + else if (pnmtype == 5) + bpl = width; + else if (pnmtype == 6) + bpl = width*3; + else + return (-1); - pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); + for (i = 0; i < height; i++) + { + k = bpl; c = EOF; + while (k-- > 0) c = getc (ifp); + if (c == EOF) return (-1); - if (pnmtype == 4) /* Portable bitmap */ - bpl = (width + 7)/8; - else if (pnmtype == 5) - bpl = width; - else if (pnmtype == 6) - bpl = width*3; - else - return (-1); + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+1) / (double)height); + } - for (i = 0; i < height; i++) - { - k = bpl; c = EOF; - while (k-- > 0) c = getc (ifp); - if (c == EOF) return (-1); - - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+1) / (double)height); - } - return (0); + return (0); } /* Load PNM image generated from PostScript file */ static gint32 -load_ps (char *filename, - guint pagenum, - FILE *ifp, - int llx, - int lly, - int urx, - int ury) +load_ps (gchar *filename, + guint pagenum, + FILE *ifp, + gint llx, + gint lly, + gint urx, + gint ury) +{ + register guchar *dest; + guchar *data, *bitline = NULL, *byteline = NULL, *byteptr, *temp; + guchar bit2byte[256*8]; + int width, height, tile_height, scan_lines, total_scan_lines; + int image_width, image_height; + int skip_left, skip_bottom; + int i, j, pnmtype, maxval, bpp, nread; + GImageType imagetype; + gint32 layer_ID, image_ID; + GPixelRgn pixel_rgn; + GDrawable *drawable; + int err = 0, e; -{register unsigned char *dest; - unsigned char *data, *bitline = NULL, *byteline = NULL, *byteptr, *temp; - unsigned char bit2byte[256*8]; - int width, height, tile_height, scan_lines, total_scan_lines; - int image_width, image_height; - int skip_left, skip_bottom; - int i, j, pnmtype, maxval, bpp, nread; - GImageType imagetype; - gint32 layer_ID, image_ID; - GPixelRgn pixel_rgn; - GDrawable *drawable; - int err = 0, e; + pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); - pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); + if ((width == urx+1) && (height == ury+1)) /* gs respected BoundingBox ? */ + { + skip_left = llx; skip_bottom = lly; + image_width = width - skip_left; + image_height = height - skip_bottom; + } + else + { + skip_left = skip_bottom = 0; + image_width = width; + image_height = height; + } + if (pnmtype == 4) /* Portable Bitmap */ + { + imagetype = INDEXED; + nread = (width+7)/8; + bpp = 1; + bitline = (guchar *)g_malloc (nread); + byteline = (guchar *)g_malloc (nread*8); - if ((width == urx+1) && (height == ury+1)) /* gs respected BoundingBox ? */ - { - skip_left = llx; skip_bottom = lly; - image_width = width - skip_left; - image_height = height - skip_bottom; - } - else - { - skip_left = skip_bottom = 0; - image_width = width; - image_height = height; - } - if (pnmtype == 4) /* Portable Bitmap */ - { - imagetype = INDEXED; - nread = (width+7)/8; - bpp = 1; - bitline = (unsigned char *)g_malloc (nread); - byteline = (unsigned char *)g_malloc (nread*8); + /* Get an array for mapping 8 bits in a byte to 8 bytes */ + temp = bit2byte; + for (j = 0; j < 256; j++) + for (i = 7; i >= 0; i--) + *(temp++) = ((j & (1 << i)) != 0); + } + else if (pnmtype == 5) /* Portable Greymap */ + { + imagetype = GRAY; + nread = width; + bpp = 1; + byteline = (unsigned char *)g_malloc (nread); + } + else if (pnmtype == 6) /* Portable Pixmap */ + { + imagetype = RGB; + nread = width * 3; + bpp = 3; + byteline = (guchar *)g_malloc (nread); + } + else return (-1); - /* Get an array for mapping 8 bits in a byte to 8 bytes */ - temp = bit2byte; - for (j = 0; j < 256; j++) - for (i = 7; i >= 0; i--) - *(temp++) = ((j & (1 << i)) != 0); - } - else if (pnmtype == 5) /* Portable Greymap */ - { - imagetype = GRAY; - nread = width; - bpp = 1; - byteline = (unsigned char *)g_malloc (nread); - } - else if (pnmtype == 6) /* Portable Pixmap */ - { - imagetype = RGB; - nread = width * 3; - bpp = 3; - byteline = (unsigned char *)g_malloc (nread); - } - else return (-1); + image_ID = create_new_image (filename, pagenum, + image_width, image_height, imagetype, + &layer_ID, &drawable, &pixel_rgn); - image_ID = create_new_image (filename, pagenum, - image_width, image_height, imagetype, - &layer_ID, &drawable, &pixel_rgn); + tile_height = gimp_tile_height (); + data = g_malloc (tile_height * image_width * bpp); - tile_height = gimp_tile_height (); - data = g_malloc (tile_height * image_width * bpp); + dest = data; + total_scan_lines = scan_lines = 0; - dest = data; - total_scan_lines = scan_lines = 0; + if (pnmtype == 4) /* Read bitimage ? Must be mapped to indexed */ + {static unsigned char BWColorMap[2*3] = { 255, 255, 255, 0, 0, 0 }; - if (pnmtype == 4) /* Read bitimage ? Must be mapped to indexed */ - {static unsigned char BWColorMap[2*3] = { 255, 255, 255, 0, 0, 0 }; + gimp_image_set_cmap (image_ID, BWColorMap, 2); - gimp_image_set_cmap (image_ID, BWColorMap, 2); + for (i = 0; i < height; i++) + { + e = (fread (bitline, 1, nread, ifp) != nread); + if (total_scan_lines >= image_height) continue; + err |= e; + if (err) break; - for (i = 0; i < height; i++) - { - e = (fread (bitline, 1, nread, ifp) != nread); - if (total_scan_lines >= image_height) continue; - err |= e; - if (err) break; + j = width; /* Map 1 byte of bitimage to 8 bytes of indexed image */ + temp = bitline; + byteptr = byteline; + while (j >= 8) + { + memcpy (byteptr, bit2byte + *(temp++)*8, 8); + byteptr += 8; + j -= 8; + } + if (j > 0) + memcpy (byteptr, bit2byte + *temp*8, j); - j = width; /* Map 1 byte of bitimage to 8 bytes of indexed image */ - temp = bitline; - byteptr = byteline; - while (j >= 8) - { - memcpy (byteptr, bit2byte + *(temp++)*8, 8); - byteptr += 8; - j -= 8; - } - if (j > 0) - memcpy (byteptr, bit2byte + *temp*8, j); + memcpy (dest, byteline+skip_left, image_width); + dest += image_width; + scan_lines++; + total_scan_lines++; - memcpy (dest, byteline+skip_left, image_width); - dest += image_width; - scan_lines++; - total_scan_lines++; + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+1) / (double)image_height); - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+1) / (double)image_height); + if ((scan_lines == tile_height) || ((i+1) == image_height)) + { + gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, + image_width, scan_lines); + scan_lines = 0; + dest = data; + } + if (err) break; + } + } + else /* Read gray/rgb-image */ + { + for (i = 0; i < height; i++) + { + e = (fread (byteline, bpp, width, ifp) != width); + if (total_scan_lines >= image_height) continue; + err |= e; + if (err) break; - if ((scan_lines == tile_height) || ((i+1) == image_height)) - { - gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, - image_width, scan_lines); - scan_lines = 0; - dest = data; - } - if (err) break; - } - } - else /* Read gray/rgb-image */ - { - for (i = 0; i < height; i++) - { - e = (fread (byteline, bpp, width, ifp) != width); - if (total_scan_lines >= image_height) continue; - err |= e; - if (err) break; + memcpy (dest, byteline+skip_left*bpp, image_width*bpp); + dest += image_width*bpp; + scan_lines++; + total_scan_lines++; - memcpy (dest, byteline+skip_left*bpp, image_width*bpp); - dest += image_width*bpp; - scan_lines++; - total_scan_lines++; + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+1) / (double)image_height); - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+1) / (double)image_height); + if ((scan_lines == tile_height) || ((i+1) == image_height)) + { + gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, + image_width, scan_lines); + scan_lines = 0; + dest = data; + } + if (err) break; + } + } - if ((scan_lines == tile_height) || ((i+1) == image_height)) - { - gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, - image_width, scan_lines); - scan_lines = 0; - dest = data; - } - if (err) break; - } - } + g_free (data); + if (byteline) g_free (byteline); + if (bitline) g_free (bitline); - g_free (data); - if (byteline) g_free (byteline); - if (bitline) g_free (bitline); + if (err) + g_message ("EOF encountered on reading"); - if (err) - g_message ("EOF encountered on reading"); + gimp_drawable_flush (drawable); - gimp_drawable_flush (drawable); - - return (err ? -1 : image_ID); + return (err ? -1 : image_ID); } /* Write out the PostScript file header */ -static void save_ps_header (FILE *ofp, - char *filename) - -{time_t cutime = time (NULL); +static void save_ps_header (FILE *ofp, + gchar *filename) +{ + time_t cutime = time (NULL); fprintf (ofp, "%%!PS-Adobe-3.0%s\n", psvals.eps ? " EPSF-3.0" : ""); fprintf (ofp, "%%%%Creator: GIMP PostScript file plugin V %4.2f \ @@ -1520,17 +1519,17 @@ by Peter Kirchgessner\n", VERSIO); /* Write out transformation for image */ static void -save_ps_setup (FILE *ofp, - gint32 drawable_ID, - int width, - int height, - int bpp) - -{double x_offset, y_offset, x_size, y_size; - double x_scale, y_scale; - double width_inch, height_inch; - double f1, f2, dx, dy; - int xtrans, ytrans; +save_ps_setup (FILE *ofp, + gint32 drawable_ID, + gint width, + gint height, + gint bpp) +{ + double x_offset, y_offset, x_size, y_size; + double x_scale, y_scale; + double width_inch, height_inch; + double f1, f2, dx, dy; + int xtrans, ytrans; /* initialize */ @@ -1543,23 +1542,27 @@ save_ps_setup (FILE *ofp, height_inch = fabs (psvals.height); if (psvals.unit_mm) - { - x_offset /= 25.4; y_offset /= 25.4; - width_inch /= 25.4; height_inch /= 25.4; - } + { + x_offset /= 25.4; y_offset /= 25.4; + width_inch /= 25.4; height_inch /= 25.4; + } if (psvals.keep_ratio) /* Proportions to keep ? */ - { /* Fit the image into the allowed size */ - f1 = width_inch / width; - f2 = height_inch / height; - if (f1 < f2) - height_inch = width_inch * (double)(height)/(double)(width); - else - width_inch = fabs (height_inch) * (double)(width)/(double)(height); - } + { /* Fit the image into the allowed size */ + f1 = width_inch / width; + f2 = height_inch / height; + if (f1 < f2) + height_inch = width_inch * (double)(height)/(double)(width); + else + width_inch = fabs (height_inch) * (double)(width)/(double)(height); + } if ((psvals.rotate == 0) || (psvals.rotate == 180)) - { x_size = width_inch; y_size = height_inch; } + { + x_size = width_inch; y_size = height_inch; + } else - { y_size = width_inch; x_size = height_inch; } + { + y_size = width_inch; x_size = height_inch; + } fprintf (ofp, "%%%%BoundingBox: %d %d %d %d\n",(int)(x_offset*72.0), (int)(y_offset*72.0), (int)((x_offset+x_size)*72.0)+1, @@ -1567,9 +1570,9 @@ save_ps_setup (FILE *ofp, fprintf (ofp, "%%%%EndComments\n"); if (psvals.preview && (psvals.preview_size > 0)) - { - save_ps_preview (ofp, drawable_ID); - } + { + save_ps_preview (ofp, drawable_ID); + } fprintf (ofp, "%%%%BeginProlog\n"); fprintf (ofp, "%% Use own dictionary to avoid conflicts\n"); @@ -1581,16 +1584,18 @@ save_ps_setup (FILE *ofp, /* Calculate translation to startpoint of first scanline */ switch (psvals.rotate) - { + { case 0: dx = 0.0; dy = y_size*72.0; - break; + break; case 90: dx = dy = 0.0; - x_scale = 72.0 * width_inch; - y_scale = -72.0 * height_inch; - break; - case 180: dx = x_size*72.0; dy = 0.0; break; - case 270: dx = x_size*72.0; dy = y_size*72.0; break; - } + x_scale = 72.0 * width_inch; + y_scale = -72.0 * height_inch; + break; + case 180: dx = x_size*72.0; dy = 0.0; + break; + case 270: dx = x_size*72.0; dy = y_size*72.0; + break; + } if ((dx != 0.0) || (dy != 0.0)) fprintf (ofp, "%% Translate to begin of first scanline\n%f %f translate\n", dx, dy); @@ -1619,7 +1624,6 @@ save_ps_setup (FILE *ofp, static void save_ps_trailer (FILE *ofp) - { fprintf (ofp, "%%%%Trailer\n"); fprintf (ofp, "end\n%%%%EOF\n"); @@ -1630,210 +1634,210 @@ save_ps_trailer (FILE *ofp) /* If linecount is less than zero, all used memory is freed. */ static void -dither_grey (unsigned char *grey, - unsigned char *bw, - int npix, - int linecount) +dither_grey (guchar *grey, + guchar *bw, + gint npix, + gint linecount) +{ + register guchar *greyptr, *bwptr, mask; + register int *fse; + int x, greyval, fse_inline; + static int *fs_error = NULL; + static int do_init_arrays = 1; + static int limit_array[1278]; + static int east_error[256],seast_error[256],south_error[256],swest_error[256]; + int *limit = &(limit_array[512]); -{register unsigned char *greyptr, *bwptr, mask; - register int *fse; - int x, greyval, fse_inline; - static int *fs_error = NULL; - static int do_init_arrays = 1; - static int limit_array[1278]; - static int east_error[256],seast_error[256],south_error[256],swest_error[256]; - int *limit = &(limit_array[512]); + if (linecount <= 0) + { + if (fs_error) g_free (fs_error-1); + if (linecount < 0) return; + fs_error = (int *)g_malloc ((npix+2)*sizeof (int)); + memset ((char *)fs_error, 0, (npix+2)*sizeof (int)); + fs_error++; - if (linecount <= 0) - { - if (fs_error) g_free (fs_error-1); - if (linecount < 0) return; - fs_error = (int *)g_malloc ((npix+2)*sizeof (int)); - memset ((char *)fs_error, 0, (npix+2)*sizeof (int)); - fs_error++; + /* Initialize some arrays that speed up dithering */ + if (do_init_arrays) + { + do_init_arrays = 0; + for (x = -511; x <= 766; x++) + limit[x] = (x < 0) ? 0 : ((x > 255) ? 255 : x); + for (greyval = 0; greyval < 256; greyval++) + { + east_error[greyval] = (greyval < 128) ? ((greyval * 79) >> 8) + : (((greyval-255)*79) >> 8); + seast_error[greyval] = (greyval < 128) ? ((greyval * 34) >> 8) + : (((greyval-255)*34) >> 8); + south_error[greyval] = (greyval < 128) ? ((greyval * 56) >> 8) + : (((greyval-255)*56) >> 8); + swest_error[greyval] = (greyval < 128) ? ((greyval * 12) >> 8) + : (((greyval-255)*12) >> 8); + } + } + } + if (fs_error == NULL) return; - /* Initialize some arrays that speed up dithering */ - if (do_init_arrays) - { - do_init_arrays = 0; - for (x = -511; x <= 766; x++) - limit[x] = (x < 0) ? 0 : ((x > 255) ? 255 : x); - for (greyval = 0; greyval < 256; greyval++) - { - east_error[greyval] = (greyval < 128) ? ((greyval * 79) >> 8) - : (((greyval-255)*79) >> 8); - seast_error[greyval] = (greyval < 128) ? ((greyval * 34) >> 8) - : (((greyval-255)*34) >> 8); - south_error[greyval] = (greyval < 128) ? ((greyval * 56) >> 8) - : (((greyval-255)*56) >> 8); - swest_error[greyval] = (greyval < 128) ? ((greyval * 12) >> 8) - : (((greyval-255)*12) >> 8); - } - } - } - if (fs_error == NULL) return; + memset (bw, 0, (npix+7)/8); /* Initialize with white */ - memset (bw, 0, (npix+7)/8); /* Initialize with white */ + greyptr = grey; + bwptr = bw; + mask = 0x80; + fse_inline = fs_error[0]; + for (x = 0, fse = fs_error; x < npix; x++, fse++) + { + greyval = limit[*(greyptr++) + fse_inline]; /* 0 <= greyval <= 255 */ + if (greyval < 128) *bwptr |= mask; /* Set a black pixel */ - greyptr = grey; - bwptr = bw; - mask = 0x80; - fse_inline = fs_error[0]; - for (x = 0, fse = fs_error; x < npix; x++, fse++) - { - greyval = limit[*(greyptr++) + fse_inline]; /* 0 <= greyval <= 255 */ - if (greyval < 128) *bwptr |= mask; /* Set a black pixel */ + /* Error distribution */ + fse_inline = east_error[greyval] + fse[1]; + fse[1] = seast_error[greyval]; + fse[0] += south_error[greyval]; + fse[-1] += swest_error[greyval]; - /* Error distribution */ - fse_inline = east_error[greyval] + fse[1]; - fse[1] = seast_error[greyval]; - fse[0] += south_error[greyval]; - fse[-1] += swest_error[greyval]; - - mask >>= 1; /* Get mask for next b/w-pixel */ - if (!mask) - { - mask = 0x80; - bwptr++; - } - } + mask >>= 1; /* Get mask for next b/w-pixel */ + if (!mask) + { + mask = 0x80; + bwptr++; + } + } } /* Write a device independant screen preview */ static void -save_ps_preview (FILE *ofp, - gint32 drawable_ID) +save_ps_preview (FILE *ofp, + gint32 drawable_ID) +{ + register guchar *bwptr, *greyptr; + GDrawableType drawable_type; + GDrawable *drawable; + GPixelRgn src_rgn; + int width, height, x, y, nbsl, out_count; + int nchar_pl = 72, src_y; + double f1, f2; + guchar *grey, *bw, *src_row, *src_ptr; + guchar *cmap; + gint ncols, cind; -{register unsigned char *bwptr, *greyptr; - GDrawableType drawable_type; - GDrawable *drawable; - GPixelRgn src_rgn; - int width, height, x, y, nbsl, out_count; - int nchar_pl = 72, src_y; - double f1, f2; - unsigned char *grey, *bw, *src_row, *src_ptr; - unsigned char *cmap; - gint ncols, cind; + if (psvals.preview_size <= 0) return; - if (psvals.preview_size <= 0) return; + drawable = gimp_drawable_get (drawable_ID); + drawable_type = gimp_drawable_type (drawable_ID); - drawable = gimp_drawable_get (drawable_ID); - drawable_type = gimp_drawable_type (drawable_ID); + /* Calculate size of preview */ + if ( (drawable->width <= psvals.preview_size) + && (drawable->height <= psvals.preview_size)) + { + width = drawable->width; + height = drawable->height; + } + else + { + f1 = (double)psvals.preview_size / (double)drawable->width; + f2 = (double)psvals.preview_size / (double)drawable->height; + if (f1 < f2) + { + width = psvals.preview_size; + height = drawable->height * f1; + if (height <= 0) height = 1; + } + else + { + height = psvals.preview_size; + width = drawable->width * f1; + if (width <= 0) width = 1; + } + } - /* Calculate size of preview */ - if ( (drawable->width <= psvals.preview_size) - && (drawable->height <= psvals.preview_size)) - { - width = drawable->width; - height = drawable->height; - } - else - { - f1 = (double)psvals.preview_size / (double)drawable->width; - f2 = (double)psvals.preview_size / (double)drawable->height; - if (f1 < f2) - { - width = psvals.preview_size; - height = drawable->height * f1; - if (height <= 0) height = 1; - } - else - { - height = psvals.preview_size; - width = drawable->width * f1; - if (width <= 0) width = 1; - } - } + nbsl = (width+7)/8; /* Number of bytes per scanline in bitmap */ - nbsl = (width+7)/8; /* Number of bytes per scanline in bitmap */ + grey = (guchar *)g_malloc (width); + bw = (guchar *)g_malloc (nbsl); + src_row = (guchar *)g_malloc (drawable->width * drawable->bpp); - grey = (unsigned char *)g_malloc (width); - bw = (unsigned char *)g_malloc (nbsl); - src_row = (unsigned char *)g_malloc (drawable->width * drawable->bpp); + fprintf (ofp, "%%%%BeginPreview: %d %d 1 %d\n", width, height, + ((nbsl*2+nchar_pl-1)/nchar_pl)*height); - fprintf (ofp, "%%%%BeginPreview: %d %d 1 %d\n", width, height, - ((nbsl*2+nchar_pl-1)/nchar_pl)*height); + gimp_pixel_rgn_init (&src_rgn, drawable, 0, 0, drawable->width, + drawable->height, FALSE, FALSE); - gimp_pixel_rgn_init (&src_rgn, drawable, 0, 0, drawable->width, - drawable->height, FALSE, FALSE); + cmap = NULL; /* Check if we need a colour table */ + if (gimp_drawable_type (drawable_ID) == INDEXED_IMAGE) + cmap = (guchar *) + gimp_image_get_cmap (gimp_drawable_image_id (drawable_ID), &ncols); - cmap = NULL; /* Check if we need a colour table */ - if (gimp_drawable_type (drawable_ID) == INDEXED_IMAGE) - cmap = (unsigned char *) - gimp_image_get_cmap (gimp_drawable_image_id (drawable_ID), &ncols); + for (y = 0; y < height; y++) + { + /* Get a scanline from the input image and scale it to the desired width */ + src_y = (y * drawable->height) / height; + gimp_pixel_rgn_get_row (&src_rgn, src_row, 0, src_y, drawable->width); - for (y = 0; y < height; y++) - { - /* Get a scanline from the input image and scale it to the desired width */ - src_y = (y * drawable->height) / height; - gimp_pixel_rgn_get_row (&src_rgn, src_row, 0, src_y, drawable->width); + greyptr = grey; + if (drawable->bpp == 3) /* RGB-image */ + { + for (x = 0; x < width; x++) + { /* Convert to grey */ + src_ptr = src_row + ((x * drawable->width) / width) * 3; + *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; + } + } + else if (cmap) /* Indexed image */ + { + for (x = 0; x < width; x++) + { + src_ptr = src_row + ((x * drawable->width) / width); + cind = *src_ptr; /* Get colour index and convert to grey */ + src_ptr = (cind >= ncols) ? cmap : (cmap + 3*cind); + *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; + } + } + else /* Grey image */ + { + for (x = 0; x < width; x++) + *(greyptr++) = *(src_row + ((x * drawable->width) / width)); + } - greyptr = grey; - if (drawable->bpp == 3) /* RGB-image */ - { - for (x = 0; x < width; x++) - { /* Convert to grey */ - src_ptr = src_row + ((x * drawable->width) / width) * 3; - *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; - } - } - else if (cmap) /* Indexed image */ - { - for (x = 0; x < width; x++) - { - src_ptr = src_row + ((x * drawable->width) / width); - cind = *src_ptr; /* Get colour index and convert to grey */ - src_ptr = (cind >= ncols) ? cmap : (cmap + 3*cind); - *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; - } - } - else /* Grey image */ - { - for (x = 0; x < width; x++) - *(greyptr++) = *(src_row + ((x * drawable->width) / width)); - } + /* Now we have a greyscale line for the desired width. */ + /* Dither it to b/w */ + dither_grey (grey, bw, width, y); - /* Now we have a greyscale line for the desired width. */ - /* Dither it to b/w */ - dither_grey (grey, bw, width, y); + /* Write out the b/w line */ + out_count = 0; + bwptr = bw; + for (x = 0; x < nbsl; x++) + { + if (out_count == 0) fprintf (ofp, "%% "); + fprintf (ofp, "%02x", *(bwptr++)); + out_count += 2; + if (out_count >= nchar_pl) + { + fprintf (ofp, "\n"); + out_count = 0; + } + } + if (out_count != 0) + fprintf (ofp, "\n"); - /* Write out the b/w line */ - out_count = 0; - bwptr = bw; - for (x = 0; x < nbsl; x++) - { - if (out_count == 0) fprintf (ofp, "%% "); - fprintf (ofp, "%02x", *(bwptr++)); - out_count += 2; - if (out_count >= nchar_pl) - { - fprintf (ofp, "\n"); - out_count = 0; - } - } - if (out_count != 0) - fprintf (ofp, "\n"); + if ((l_run_mode != RUN_NONINTERACTIVE) && ((y % 20) == 0)) + gimp_progress_update ((double)(y) / (double)height); + } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((y % 20) == 0)) - gimp_progress_update ((double)(y) / (double)height); - } + fprintf (ofp, "%%%%EndPreview\n"); - fprintf (ofp, "%%%%EndPreview\n"); + dither_grey (grey, bw, width, -1); + g_free (src_row); + g_free (bw); + g_free (grey); - dither_grey (grey, bw, width, -1); - g_free (src_row); - g_free (bw); - g_free (grey); - - gimp_drawable_detach (drawable); + gimp_drawable_detach (drawable); } static gint -save_gray (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j; +save_gray (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j; int tile_height; unsigned char *data, *src; GPixelRgn pixel_rgn; @@ -1850,7 +1854,7 @@ save_gray (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); /* Set up transformation in PostScript */ save_ps_setup (ofp, drawable_ID, width, height, 1*8); @@ -1874,26 +1878,26 @@ save_gray (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_GRAY_TILE (data); /* Get more data */ - if (!level2) { - for (j = 0; j < width; j++) - { - putc (hex[(*src) >> 4], ofp); - putc (hex[(*(src++)) & 0x0f], ofp); - if (((j+1) % 39) == 0) putc ('\n', ofp); - } - putc ('\n', ofp); + if ((i % tile_height) == 0) GET_GRAY_TILE (data); /* Get more data */ + if (!level2) + { + for (j = 0; j < width; j++) + { + putc (hex[(*src) >> 4], ofp); + putc (hex[(*(src++)) & 0x0f], ofp); + if (((j+1) % 39) == 0) putc ('\n', ofp); + } + putc ('\n', ofp); + } + else + { + for (j = 0; j < width; j++) + ascii85_out (*(src++), ofp); + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - else - { - for (j = 0; j < width; j++) - ascii85_out (*(src++), ofp); - } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); g_free (data); @@ -1901,27 +1905,27 @@ save_gray (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_GRAY_TILE } static gint -save_bw (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j; +save_bw (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j; int ncols, nbsl, nwrite; int tile_height; - unsigned char *cmap, *ct; - unsigned char *data, *src; - unsigned char *scanline, *dst, mask; - unsigned char *hex_scanline; + guchar *cmap, *ct; + guchar *data, *src; + guchar *scanline, *dst, mask; + guchar *hex_scanline; GPixelRgn pixel_rgn; GDrawable *drawable; GDrawableType drawable_type; @@ -1938,7 +1942,7 @@ save_bw (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); nbsl = (width+7)/8; scanline = (char *)g_malloc (nbsl + 1); hex_scanline = (char *)g_malloc ((nbsl + 1)*2); @@ -1965,48 +1969,48 @@ save_bw (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_BW_TILE (data); /* Get more data */ - dst = scanline; - memset (dst, 0, nbsl); - mask = 0x80; - /* Build a bitmap for a scanline */ - for (j = 0; j < width; j++) - { - ct = cmap + *(src++)*3; - if (ct[0] || ct[1] || ct[2]) - *dst |= mask; - if (mask == 0x01) { mask = 0x80; dst++; } else mask >>= 1; - } - if (!level2) - { - /* Convert to hexstring */ - for (j = 0; j < nbsl; j++) - { - hex_scanline[j*2] = (unsigned char)hex[scanline[j] >> 4]; - hex_scanline[j*2+1] = (unsigned char)hex[scanline[j] & 0x0f]; - } - /* Write out hexstring */ - j = nbsl * 2; - dst = hex_scanline; - while (j > 0) - { - nwrite = (j > 78) ? 78 : j; - fwrite (dst, nwrite, 1, ofp); - putc ('\n', ofp); - j -= nwrite; - dst += nwrite; - } - } - else { + if ((i % tile_height) == 0) GET_BW_TILE (data); /* Get more data */ dst = scanline; - for (j = 0; j < nbsl; j++) - ascii85_out (*(dst++), ofp); + memset (dst, 0, nbsl); + mask = 0x80; + /* Build a bitmap for a scanline */ + for (j = 0; j < width; j++) + { + ct = cmap + *(src++)*3; + if (ct[0] || ct[1] || ct[2]) + *dst |= mask; + if (mask == 0x01) { mask = 0x80; dst++; } else mask >>= 1; + } + if (!level2) + { + /* Convert to hexstring */ + for (j = 0; j < nbsl; j++) + { + hex_scanline[j*2] = (unsigned char)hex[scanline[j] >> 4]; + hex_scanline[j*2+1] = (unsigned char)hex[scanline[j] & 0x0f]; + } + /* Write out hexstring */ + j = nbsl * 2; + dst = hex_scanline; + while (j > 0) + { + nwrite = (j > 78) ? 78 : j; + fwrite (dst, nwrite, 1, ofp); + putc ('\n', ofp); + j -= nwrite; + dst += nwrite; + } + } + else + { + dst = scanline; + for (j = 0; j < nbsl; j++) + ascii85_out (*(dst++), ofp); + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); @@ -2017,21 +2021,21 @@ save_bw (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_BW_TILE } static gint -save_index (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j; +save_index (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j; int ncols, bw; int tile_height; unsigned char *cmap, *cmap_start; @@ -2049,24 +2053,24 @@ save_index (FILE *ofp, ct = coltab; bw = 1; for (j = 0; j < 256; j++) - { - if (j >= ncols) { - memcpy (ct, background, 6); - ct += 6; - } - else - { - bw &= ((cmap[0] == 0) && (cmap[1] == 0) && (cmap[2] == 0)) + if (j >= ncols) + { + memcpy (ct, background, 6); + ct += 6; + } + else + { + bw &= ((cmap[0] == 0) && (cmap[1] == 0) && (cmap[2] == 0)) || ((cmap[0] == 255) && (cmap[1] == 255) && (cmap[2] == 255)); - *(ct++) = (unsigned char)hex[(*cmap) >> 4]; - *(ct++) = (unsigned char)hex[(*(cmap++)) & 0x0f]; - *(ct++) = (unsigned char)hex[(*cmap) >> 4]; - *(ct++) = (unsigned char)hex[(*(cmap++)) & 0x0f]; - *(ct++) = (unsigned char)hex[(*cmap) >> 4]; - *(ct++) = (unsigned char)hex[(*(cmap++)) & 0x0f]; + *(ct++) = (guchar)hex[(*cmap) >> 4]; + *(ct++) = (guchar)hex[(*(cmap++)) & 0x0f]; + *(ct++) = (guchar)hex[(*cmap) >> 4]; + *(ct++) = (guchar)hex[(*(cmap++)) & 0x0f]; + *(ct++) = (guchar)hex[(*cmap) >> 4]; + *(ct++) = (guchar)hex[(*(cmap++)) & 0x0f]; + } } - } if (bw) return (save_bw (ofp, image_ID, drawable_ID)); drawable = gimp_drawable_get (drawable_ID); @@ -2077,7 +2081,7 @@ save_index (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); /* Set up transformation in PostScript */ save_ps_setup (ofp, drawable_ID, width, height, 3*8); @@ -2101,30 +2105,30 @@ save_index (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_INDEX_TILE (data); /* Get more data */ - if (!level2) { - for (j = 0; j < width; j++) - { - fwrite (coltab+(*(src++))*6, 6, 1, ofp); - if (((j+1) % 13) == 0) putc ('\n', ofp); - } - putc ('\n', ofp); + if ((i % tile_height) == 0) GET_INDEX_TILE (data); /* Get more data */ + if (!level2) + { + for (j = 0; j < width; j++) + { + fwrite (coltab+(*(src++))*6, 6, 1, ofp); + if (((j+1) % 13) == 0) putc ('\n', ofp); + } + putc ('\n', ofp); + } + else + { + for (j = 0; j < width; j++) + { + cmap = cmap_start + 3 * (*(src++)); + ascii85_out (*(cmap++), ofp); + ascii85_out (*(cmap++), ofp); + ascii85_out (*(cmap++), ofp); + } + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - else - { - for (j = 0; j < width; j++) - { - cmap = cmap_start + 3 * (*(src++)); - ascii85_out (*(cmap++), ofp); - ascii85_out (*(cmap++), ofp); - ascii85_out (*(cmap++), ofp); - } - } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); @@ -2133,24 +2137,23 @@ save_index (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_INDEX_TILE } static gint -save_rgb (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - +save_rgb (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) { int height, width, tile_height; int i, j; - unsigned char *data, *src; + guchar *data, *src; GPixelRgn pixel_rgn; GDrawable *drawable; GDrawableType drawable_type; @@ -2165,7 +2168,7 @@ save_rgb (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); /* Set up transformation in PostScript */ save_ps_setup (ofp, drawable_ID, width, height, 3*8); @@ -2189,34 +2192,34 @@ save_rgb (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_RGB_TILE (data); /* Get more data */ - if (!level2) { - for (j = 0; j < width; j++) - { - putc (hex[(*src) >> 4], ofp); /* Red */ - putc (hex[(*(src++)) & 0x0f], ofp); - putc (hex[(*src) >> 4], ofp); /* Green */ - putc (hex[(*(src++)) & 0x0f], ofp); - putc (hex[(*src) >> 4], ofp); /* Blue */ - putc (hex[(*(src++)) & 0x0f], ofp); - if (((j+1) % 13) == 0) putc ('\n', ofp); - } - putc ('\n', ofp); + if ((i % tile_height) == 0) GET_RGB_TILE (data); /* Get more data */ + if (!level2) + { + for (j = 0; j < width; j++) + { + putc (hex[(*src) >> 4], ofp); /* Red */ + putc (hex[(*(src++)) & 0x0f], ofp); + putc (hex[(*src) >> 4], ofp); /* Green */ + putc (hex[(*(src++)) & 0x0f], ofp); + putc (hex[(*src) >> 4], ofp); /* Blue */ + putc (hex[(*(src++)) & 0x0f], ofp); + if (((j+1) % 13) == 0) putc ('\n', ofp); + } + putc ('\n', ofp); + } + else + { + for (j = 0; j < width; j++) + { + ascii85_out (*(src++), ofp); + ascii85_out (*(src++), ofp); + ascii85_out (*(src++), ofp); + } + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - else - { - for (j = 0; j < width; j++) - { - ascii85_out (*(src++), ofp); - ascii85_out (*(src++), ofp); - ascii85_out (*(src++), ofp); - } - } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); g_free (data); @@ -2224,22 +2227,22 @@ save_rgb (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_RGB_TILE } -static void -init_gtk () +static void +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("ps"); gtk_init (&argc, &argv); @@ -2250,49 +2253,39 @@ init_gtk () static gint load_dialog (void) - { - LoadDialogVals *vals; - GtkWidget *toggle; - GtkWidget *frame; + GtkWidget *dialog; GtkWidget *main_vbox; - GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *label; + GtkWidget *frame; + GtkWidget *vbox; GtkWidget *table; - GSList *group; - gchar buffer[STR_LENGTH]; - gint j, n_prop, alias, *alpha_bits; - - static char *label_text[] = - { N_("Resolution:"), N_("Width:"), N_("Height:"), N_("Pages:") }; - static char *radio_text[] = - { N_("B/W"), N_("Gray"), N_("Color"), N_("Automatic") }; - static char *alias_text[] = - { N_("None"), N_("Weak"), N_("Strong") }; + GtkWidget *spinbutton; + GtkObject *adj; + GtkWidget *pages_entry; + GtkWidget *toggle; init_gtk (); - vals = g_malloc (sizeof (*vals)); - vals->dialog = gimp_dialog_new (_("Load PostScript"), "ps", - gimp_plugin_help_func, "filters/ps.html", - GTK_WIN_POS_MOUSE, - FALSE, TRUE, FALSE, + dialog = gimp_dialog_new (_("Load PostScript"), "ps", + gimp_plugin_help_func, "filters/ps.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, - _("OK"), load_ok_callback, - vals, NULL, NULL, TRUE, FALSE, - _("Cancel"), gtk_widget_destroy, - NULL, 1, NULL, FALSE, TRUE, + _("OK"), load_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, - NULL); + NULL); - gtk_signal_connect (GTK_OBJECT (vals->dialog), "destroy", + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); main_vbox = gtk_vbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (vals->dialog)->vbox), main_vbox, + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), main_vbox, FALSE, FALSE, 0); gtk_widget_show (main_vbox); @@ -2310,125 +2303,108 @@ load_dialog (void) gtk_container_add (GTK_CONTAINER (frame), vbox); /* Resolution/Width/Height/Pages labels */ - n_prop = sizeof (label_text) / sizeof (label_text[0]); - table = gtk_table_new (n_prop, 2, FALSE); + table = gtk_table_new (4, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); - for (j = 0; j < n_prop; j++) - { - label = gtk_label_new (gettext(label_text[j])); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, j, j+1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - } + spinbutton = gimp_spin_button_new (&adj, plvals.resolution, + 5, 1440, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Resolution:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &plvals.resolution); - /* Resolution/Width/Height/Pages Entries */ - for (j = 0; j < n_prop; j++) - { - vals->entry[j] = gtk_entry_new (); - gtk_widget_set_usize (vals->entry[j], 80, 0); - if (j == 0) - g_snprintf (buffer, sizeof (buffer), "%d", (int)plvals.resolution); - else if (j == 1) - g_snprintf (buffer, sizeof (buffer), "%d", (int)plvals.width); - else if (j == 2) - g_snprintf (buffer, sizeof (buffer), "%d", (int)plvals.height); - else if (j == 3) - strcpy (buffer, plvals.pages); - gtk_entry_set_text (GTK_ENTRY (vals->entry[j]), buffer); - gtk_table_attach (GTK_TABLE (table), vals->entry[j], 1, 2, j, j+1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (vals->entry[j]); - } + spinbutton = gimp_spin_button_new (&adj, plvals.width, + 1, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Width:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &plvals.width); + + spinbutton = gimp_spin_button_new (&adj, plvals.height, + 1, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Height:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &plvals.height); + + pages_entry = gtk_entry_new (); + gtk_widget_set_usize (pages_entry, 80, 0); + gtk_entry_set_text (GTK_ENTRY (pages_entry), plvals.pages); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Pages:"), 1.0, 0.5, + pages_entry, TRUE); + gtk_signal_connect (GTK_OBJECT (pages_entry), "changed", + GTK_SIGNAL_FUNC (load_pages_entry_callback), + NULL); toggle = gtk_check_button_new_with_label (_("Try Bounding Box")); - gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->use_bbox = (plvals.use_bbox != 0); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) load_toggle_update, - &(vals->use_bbox)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->use_bbox); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &plvals.use_bbox); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), plvals.use_bbox); gtk_widget_show (toggle); gtk_widget_show (vbox); gtk_widget_show (frame); /* Colouring */ - frame = gtk_frame_new (_("Colouring")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + frame = gimp_radio_group_new2 (TRUE, _("Coloring"), + gimp_radio_button_update, + &plvals.pnm_type, (gpointer) plvals.pnm_type, + + _("B/W"), (gpointer) 4, NULL, + _("Gray"), (gpointer) 5, NULL, + _("Color"), (gpointer) 6, NULL, + _("Automatic"), (gpointer) 7, NULL, + + NULL); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); - - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), vbox); - - group = NULL; - for (j = 0; j < 4; j++) - { - toggle = gtk_radio_button_new_with_label (group, gettext (radio_text[j])); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - vals->dataformat[j] = (plvals.pnm_type == j+4); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) load_toggle_update, - &(vals->dataformat[j])); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - vals->dataformat[j]); - gtk_widget_show (toggle); - } - - gtk_widget_show (vbox); gtk_widget_show (frame); hbox = gtk_hbox_new (TRUE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); - for (alias = 0; alias < 2; alias++) - { - alpha_bits = alias ? &(vals->graphicsalphabits[0]) - : &(vals->textalphabits[0]); - frame = gtk_frame_new (alias ? _("Graphic Antialiasing") - : _("Text Antialiasing")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); + frame = gimp_radio_group_new2 (TRUE, _("Text Antialiasing"), + gimp_radio_button_update, + &plvals.textalpha, (gpointer) plvals.textalpha, - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), vbox); + _("None"), (gpointer) 1, NULL, + _("Weak"), (gpointer) 2, NULL, + _("Strong"), (gpointer) 4, NULL, - group = NULL; - for (j = 0; j < 3; j++) - { - toggle = gtk_radio_button_new_with_label (group, - gettext (alias_text[j])); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - alpha_bits[j] = alias ? (plvals.graphicsalpha == (1 << j)) - : (plvals.textalpha == (1 << j)); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) load_toggle_update, - alpha_bits+j); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - alpha_bits[j]); - gtk_widget_show (toggle); - } + NULL); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); - gtk_widget_show (vbox); - gtk_widget_show (frame); - } + frame = gimp_radio_group_new2 (TRUE, _("Graphic Antialiasing"), + gimp_radio_button_update, + &plvals.graphicsalpha, + (gpointer) plvals.graphicsalpha, - gtk_widget_show (vals->dialog); + _("None"), (gpointer) 1, NULL, + _("Weak"), (gpointer) 2, NULL, + _("Strong"), (gpointer) 4, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); + + gtk_widget_show (dialog); gtk_main (); gdk_flush (); - g_free (vals); - return plint.run; } @@ -2436,110 +2412,62 @@ load_dialog (void) static void load_ok_callback (GtkWidget *widget, gpointer data) - -{LoadDialogVals *vals = (LoadDialogVals *)data; - int nelem; - - /* Read resolution */ - plvals.resolution = atoi (gtk_entry_get_text (GTK_ENTRY (vals->entry[0]))); - - /* Read width */ - plvals.width = atoi (gtk_entry_get_text (GTK_ENTRY (vals->entry[1]))); - - /* Read height */ - plvals.height = atoi (gtk_entry_get_text (GTK_ENTRY (vals->entry[2]))); - - /* Read Pages */ - nelem = sizeof (plvals.pages); - strncpy (plvals.pages, gtk_entry_get_text(GTK_ENTRY (vals->entry[3])),nelem); - plvals.pages[nelem-1] = '\0'; - - /* Read try BoundingBox */ - plvals.use_bbox = (vals->use_bbox != 0); - - /* Read colouring */ - if (vals->dataformat[0] == 1) plvals.pnm_type = 4; - else if (vals->dataformat[1] == 1) plvals.pnm_type = 5; - else if (vals->dataformat[3] == 1) plvals.pnm_type = 7; - else plvals.pnm_type = 6; - - /* Read TextAlphaBits */ - if (vals->textalphabits[0] == 1) plvals.textalpha = 1; - else if (vals->textalphabits[1] == 1) plvals.textalpha = 2; - else if (vals->textalphabits[2] == 1) plvals.textalpha = 4; - else plvals.textalpha = 1; - - /* Read GraphicsAlphaBits */ - if (vals->graphicsalphabits[0] == 1) plvals.graphicsalpha = 1; - else if (vals->graphicsalphabits[1] == 1) plvals.graphicsalpha = 2; - else if (vals->graphicsalphabits[2] == 1) plvals.graphicsalpha = 4; - else plvals.graphicsalpha = 1; - +{ plint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (vals->dialog)); -} + gtk_widget_destroy (GTK_WIDGET (data)); +} static void -load_toggle_update (GtkWidget *widget, - gpointer data) - +load_pages_entry_callback (GtkWidget *widget, + gpointer data) { - int *toggle_val; + gint nelem = sizeof (plvals.pages); - toggle_val = (int *) data; - - *toggle_val = ((GTK_TOGGLE_BUTTON (widget)->active) != 0); + strncpy (plvals.pages, gtk_entry_get_text (GTK_ENTRY (widget)), nelem); + plvals.pages[nelem-1] = '\0'; } - /* Save interface functions */ static gint save_dialog (void) - { SaveDialogVals *vals; + GtkWidget *dialog; GtkWidget *toggle; GtkWidget *frame, *uframe; - GtkWidget *hbox, *vbox, *uvbox; + GtkWidget *hbox, *vbox; GtkWidget *main_vbox[2]; - GtkWidget *label; GtkWidget *table; - GSList *group; - gchar tmp[80]; - gint j, idata; - gdouble rdata; + GtkWidget *spinbutton; + GtkObject *adj; + gint j; - static gchar *label_text[] = - { N_("Width:"), N_("Height:"), N_("X-offset:"), N_("Y-offset:") }; - static gchar *radio_text[] = - { N_("0"), N_("90"), N_("180"), N_("270") }; - static gchar *unit_text[] = - { N_("Inch"), N_("Millimeter") }; + vals = g_new (SaveDialogVals, 1); - vals = g_malloc (sizeof (*vals)); + vals->level = (psvals.level > 1); - vals->dialog = gimp_dialog_new (_("Save as PostScript"), "ps", - gimp_plugin_help_func, "filters/ps.html", - GTK_WIN_POS_MOUSE, - FALSE, TRUE, FALSE, + dialog = gimp_dialog_new (_("Save as PostScript"), "ps", + gimp_plugin_help_func, "filters/ps.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, - _("OK"), save_ok_callback, - vals, NULL, NULL, TRUE, FALSE, - _("Cancel"), gtk_widget_destroy, - NULL, 1, NULL, FALSE, TRUE, + _("OK"), save_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, - NULL); + NULL); - gtk_signal_connect (GTK_OBJECT (vals->dialog), "destroy", + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Main hbox */ hbox = gtk_hbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (vals->dialog)->vbox), hbox, + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 0); main_vbox[0] = main_vbox[1] = NULL; @@ -2553,6 +2481,7 @@ save_dialog (void) frame = gtk_frame_new (_("Image Size")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (main_vbox[0]), frame, FALSE, FALSE, 0); + vbox = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); gtk_container_add (GTK_CONTAINER (frame), vbox); @@ -2561,97 +2490,80 @@ save_dialog (void) table = gtk_table_new (4, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); - for (j = 0; j < 4; j++) - { - label = gtk_label_new (gettext (label_text[j])); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, j, j+1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - } + spinbutton = gimp_spin_button_new (&vals->adjustment[0], psvals.width, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Width:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[0]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.width); - /* Width/Height/X-off/Y-off Entries */ - for (j = 0; j < 4; j++) - { - vals->entry[j] = gtk_entry_new (); - gtk_widget_set_usize (vals->entry[j], 50, 0); - if (j == 0) rdata = psvals.width; - else if (j == 1) rdata = psvals.height; - else if (j == 2) rdata = psvals.x_offset; - else rdata = psvals.y_offset; - gtk_entry_set_text (GTK_ENTRY (vals->entry[j]), ftoa ("%-8.2f", rdata)); - gtk_table_attach (GTK_TABLE (table), vals->entry[j], 1, 2, j, j+1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (vals->entry[j]); - } + spinbutton = gimp_spin_button_new (&vals->adjustment[1], psvals.height, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Height:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[1]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.height); + + spinbutton = gimp_spin_button_new (&vals->adjustment[2], psvals.x_offset, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("X-Offset:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[2]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.x_offset); + + spinbutton = gimp_spin_button_new (&vals->adjustment[3], psvals.y_offset, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Y-Offset:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[3]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.y_offset); toggle = gtk_check_button_new_with_label (_("Keep Aspect Ratio")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->keep_ratio = (psvals.keep_ratio != 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->keep_ratio)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->keep_ratio); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &psvals.keep_ratio); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), psvals.keep_ratio); gtk_widget_show (toggle); /* Unit */ - uframe = gtk_frame_new (_("Unit")); - gtk_frame_set_shadow_type (GTK_FRAME (uframe), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (vbox), uframe, FALSE, FALSE, 0); - uvbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (uvbox), 4); - gtk_container_add (GTK_CONTAINER (uframe), uvbox); + uframe = gimp_radio_group_new2 (TRUE, _("Unit"), + save_unit_toggle_update, + vals, (gpointer) psvals.unit_mm, - group = NULL; - for (j = 0; j < 2; j++) - { - toggle = gtk_radio_button_new_with_label (group, gettext (unit_text[j])); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (uvbox), toggle, FALSE, FALSE, 0); - vals->unit[j] = (psvals.unit_mm == j); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (j == 0) ? (GtkSignalFunc) save_toggle_update : - (GtkSignalFunc) save_mm_toggle_update, - (j == 0) ? (gpointer)(&(vals->unit[j])) : - (gpointer)vals); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - vals->unit[j]); - gtk_widget_show (toggle); - } - gtk_widget_show (uvbox); + _("Inch"), (gpointer) FALSE, NULL, + _("Millimeter"), (gpointer) TRUE, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (vbox), uframe, FALSE, FALSE, 0); gtk_widget_show (uframe); gtk_widget_show (vbox); gtk_widget_show (frame); /* Rotation */ - frame = gtk_frame_new (_("Rotation")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (main_vbox[1]), frame, TRUE, TRUE, 0); + frame = gimp_radio_group_new2 (TRUE, _("Rotation"), + gimp_radio_button_update, + &psvals.rotate, (gpointer) psvals.rotate, - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), vbox); + "0", (gpointer) 0, NULL, + "90", (gpointer) 90, NULL, + "180", (gpointer) 180, NULL, + "270", (gpointer) 270, NULL, - group = NULL; - for (j = 0; j < 4; j++) - { - toggle = gtk_radio_button_new_with_label (group, radio_text[j]); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - vals->rot[j] = (psvals.rotate == j*90); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->rot[j])); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - vals->rot[j]); - gtk_widget_show (toggle); - } - - gtk_widget_show (vbox); + NULL); + gtk_box_pack_start (GTK_BOX (main_vbox[1]), frame, FALSE, FALSE, 0); gtk_widget_show (frame); /* Format */ @@ -2665,165 +2577,102 @@ save_dialog (void) toggle = gtk_check_button_new_with_label (_("PostScript Level 2")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->level = (psvals.level > 1); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &(vals->level)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->level); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label (_("Encapsulated PostScript")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->eps = (psvals.eps != 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->eps)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->eps); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &psvals.eps); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), psvals.eps); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label (_("Preview")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->preview = psvals.preview; gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->preview)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->preview); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &psvals.preview); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), psvals.preview); gtk_widget_show (toggle); /* Preview size label/entry */ table = gtk_table_new (1, 2, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); - j = 0; - label = gtk_label_new (_("Preview Size:")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, j, j+1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); + gtk_object_set_data (GTK_OBJECT (toggle), "set_sensitive", table); + gtk_widget_set_sensitive (table, psvals.preview); - /* Entry */ - j= 0; - vals->psize_entry = gtk_entry_new (); - gtk_widget_set_usize (vals->psize_entry, 50, 0); - idata = psvals.preview_size; - if (idata < 0) idata = 0; - g_snprintf (tmp, sizeof (tmp), "%d", idata); - gtk_entry_set_text (GTK_ENTRY (vals->psize_entry), tmp); - gtk_table_attach (GTK_TABLE (table), vals->psize_entry, 1, 2, j, j+1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (vals->psize_entry); + spinbutton = gimp_spin_button_new (&adj, psvals.preview_size, + 0, 1024, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Preview Size:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &psvals.preview_size); + gtk_widget_show (spinbutton); gtk_widget_show (vbox); gtk_widget_show (frame); for (j = 0; j < sizeof (main_vbox) / sizeof (main_vbox[0]); j++) gtk_widget_show (main_vbox[j]); + gtk_widget_show (hbox); - gtk_widget_show (vals->dialog); + gtk_widget_show (dialog); gtk_main (); gdk_flush (); + psvals.level = (vals->level < 1); + g_free (vals); return psint.run; } - static void save_ok_callback (GtkWidget *widget, gpointer data) - -{SaveDialogVals *vals = (SaveDialogVals *)data; - double r; - int k, ival; - - /* Read width */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[0])), "%lf", &r); - if (k == 1) psvals.width = r; - - /* Read height */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[1])), "%lf", &r); - if (k == 1) psvals.height = r; - - /* Read x-offset */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[2])), "%lf", &r); - if (k == 1) psvals.x_offset = r; - - /* Read y-offset */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[3])), "%lf", &r); - if (k == 1) psvals.y_offset = r; - - /* Read keep aspect ratio */ - psvals.keep_ratio = (vals->keep_ratio != 0); - - /* Read unit */ - if (vals->unit[0] == 1) psvals.unit_mm = 0; - else psvals.unit_mm = 1; - - /* Read rotation */ - if (vals->rot[1] == 1) psvals.rotate = 90; - else if (vals->rot[2] == 1) psvals.rotate = 180; - else if (vals->rot[3] == 1) psvals.rotate = 270; - else psvals.rotate = 0; - - /* Read PostScript level 2 flag */ - psvals.level = vals->level ? 2 : 1; - - /* Read EPS flag */ - psvals.eps = (vals->eps != 0); - - /* Read Preview flag */ - psvals.preview = (vals->preview != 0); - - /* Read preview size */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->psize_entry)), "%d", &ival); - if (k == 1) psvals.preview_size = ival; - - psint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (vals->dialog)); -} - - -static void -save_toggle_update (GtkWidget *widget, - gpointer data) - { - int *toggle_val; + psint.run = TRUE; - toggle_val = (int *) data; - - *toggle_val = ((GTK_TOGGLE_BUTTON (widget)->active) != 0); + gtk_widget_destroy (GTK_WIDGET (data)); } - static void -save_mm_toggle_update (GtkWidget *widget, - gpointer data) - -{ double factor = 0.0, r; - SaveDialogVals *vals = (SaveDialogVals *)data; - int newval, oldval = vals->unit[1]; - int mm_to_inch, inch_to_mm, j, k; - - newval = vals->unit[1] = ((GTK_TOGGLE_BUTTON (widget)->active) != 0); - mm_to_inch = (oldval == 1) && (newval == 0); - inch_to_mm = (oldval == 0) && (newval == 1); - if (mm_to_inch) factor = 1.0 / 25.4; - else if (inch_to_mm) factor = 25.4; - if (factor != 0.0) - { - for (j = 0; j < 4; j++) +save_unit_toggle_update (GtkWidget *widget, + gpointer data) +{ + if (GTK_TOGGLE_BUTTON (widget)->active) { - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[j])), "%lf", &r); - if (k == 1) - { - gtk_entry_set_text (GTK_ENTRY(vals->entry[j]),ftoa("%-8.2f",r*factor)); - gtk_widget_show (vals->entry[j]); - } + SaveDialogVals *vals; + gdouble factor; + gdouble value; + gint unit_mm; + gint i; + + vals = (SaveDialogVals *) data; + unit_mm = (gint) gtk_object_get_user_data (GTK_OBJECT (widget)); + + psvals.unit_mm = unit_mm; + + if (unit_mm) + factor = 25.4; + else + factor = 1.0 / 25.4; + + for (i = 0; i < 4; i++) + { + value = GTK_ADJUSTMENT (vals->adjustment[i])->value * factor; + + gtk_adjustment_set_value (GTK_ADJUSTMENT (vals->adjustment[i]), value); + } } - } } diff --git a/plug-ins/common/ps.c b/plug-ins/common/ps.c index dab307a1ed..cb5de127dc 100644 --- a/plug-ins/common/ps.c +++ b/plug-ins/common/ps.c @@ -55,13 +55,14 @@ static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.08 16-Jan-2000"; #include #include #include -#include #include #include #include #include +#include +#include #include "libgimp/stdplugins-intl.h" @@ -76,13 +77,13 @@ static char ident[] = "@(#) GIMP PostScript/PDF file-plugin v1.08 16-Jan-2000"; /* Load info */ typedef struct { - guint resolution; /* resolution (dpi) at which to run ghostscript */ - guint width, height; /* desired size (ghostscript may ignore this) */ - gint use_bbox; /* 0: use width/height, 1: try to use BoundingBox */ - char pages[STR_LENGTH];/* Pages to load (eg.: 1,3,5-7) */ - gint pnm_type; /* 4: pbm, 5: pgm, 6: ppm, 7: automatic */ - gint textalpha; /* antialiasing: 1,2, or 4 TextAlphaBits */ - gint graphicsalpha; /* antialiasing: 1,2, or 4 GraphicsAlphaBits */ + guint resolution; /* resolution (dpi) at which to run ghostscript */ + guint width, height; /* desired size (ghostscript may ignore this) */ + gint use_bbox; /* 0: use width/height, 1: try to use BoundingBox */ + gchar pages[STR_LENGTH]; /* Pages to load (eg.: 1,3,5-7) */ + gint pnm_type; /* 4: pbm, 5: pgm, 6: ppm, 7: automatic */ + gint textalpha; /* antialiasing: 1,2, or 4 TextAlphaBits */ + gint graphicsalpha; /* antialiasing: 1,2, or 4 GraphicsAlphaBits */ } PSLoadVals; typedef struct @@ -112,13 +113,13 @@ typedef struct { gdouble width, height; /* Size of image */ gdouble x_offset, y_offset; /* Offset to image on page */ - gint unit_mm; /* Unit of measure (0: inch, 1: mm) */ - gint keep_ratio; /* Keep aspect ratio */ - gint rotate; /* Rotation (0, 90, 180, 270) */ - gint level; /* PostScript Level */ - gint eps; /* Encapsulated PostScript flag */ - gint preview; /* Preview Flag */ - gint preview_size; /* Preview size */ + gint unit_mm; /* Unit of measure (0: inch, 1: mm) */ + gint keep_ratio; /* Keep aspect ratio */ + gint rotate; /* Rotation (0, 90, 180, 270) */ + gint level; /* PostScript Level */ + gint eps; /* Encapsulated PostScript flag */ + gint preview; /* Preview Flag */ + gint preview_size; /* Preview size */ } PSSaveVals; typedef struct @@ -148,123 +149,115 @@ static PSSaveInterface psint = /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID); +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); -static gint save_gray (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); -static gint save_bw (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); -static gint save_index (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); -static gint save_rgb (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); +static gint save_gray (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); +static gint save_bw (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); +static gint save_index (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); +static gint save_rgb (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); -static gint32 create_new_image (char *filename, guint pagenum, - guint width, guint height, - GImageType type, gint32 *layer_ID, GDrawable **drawable, - GPixelRgn *pixel_rgn); +static gint32 create_new_image (gchar *filename, + guint pagenum, + guint width, + guint height, + GImageType type, + gint32 *layer_ID, + GDrawable **drawable, + GPixelRgn *pixel_rgn); static void check_load_vals (void); static void check_save_vals (void); -static char *ftoa (char *format, double r); +static gint page_in_list (gchar *list, + guint pagenum); -static gint page_in_list (char *list, guint pagenum); +static gint get_bbox (gchar *filename, + gint *x0, + gint *y0, + gint *x1, + gint *y1); -static gint get_bbox (char *filename, - int *x0, int *y0, int *x1, int *y1); - -static FILE *ps_open (char *filename, - const PSLoadVals *loadopt, - int *llx, int* lly, int* urx, int* ury); +static FILE *ps_open (gchar *filename, + const PSLoadVals *loadopt, + gint *llx, + gint *lly, + int *urx, + gint *ury); static void ps_close (FILE *ifp); static gint32 skip_ps (FILE *ifp); -static gint32 load_ps (char *filename, - guint pagenum, - FILE *ifp, - int llx, int lly, int urx, int ury); +static gint32 load_ps (gchar *filename, + guint pagenum, + FILE *ifp, + gint llx, + gint lly, + gint urx, + gint ury); -static void save_ps_header (FILE *ofp, - char *filename); -static void save_ps_setup (FILE *ofp, - gint32 drawable_ID, - int width, - int height, - int bpp); -static void save_ps_trailer (FILE *ofp); -static void save_ps_preview (FILE *ofp, - gint32 drawable_ID); -static void dither_grey (unsigned char *grey, - unsigned char *bw, - int npix, - int linecount); +static void save_ps_header (FILE *ofp, + gchar *filename); +static void save_ps_setup (FILE *ofp, + gint32 drawable_ID, + gint width, + gint height, + gint bpp); +static void save_ps_trailer (FILE *ofp); +static void save_ps_preview (FILE *ofp, + gint32 drawable_ID); +static void dither_grey (guchar *grey, + guchar *bw, + gint npix, + gint linecount); /* Dialog-handling */ -static void init_gtk (void); +static void init_gtk (void); + +static gint load_dialog (void); +static void load_ok_callback (GtkWidget *widget, + gpointer data); +static void load_pages_entry_callback (GtkWidget *widget, + gpointer data); typedef struct { - GtkWidget *dialog; - GtkWidget *entry[4]; - int use_bbox; - int dataformat[4]; - int textalphabits[3]; - int graphicsalphabits[3]; -} LoadDialogVals; - -static gint load_dialog (void); -static void load_ok_callback (GtkWidget *widget, - gpointer data); -static void load_toggle_update (GtkWidget *widget, - gpointer data); - -typedef struct -{ - GtkWidget *dialog; - GtkWidget *entry[4]; - GtkWidget *psize_entry; - int keep_ratio; - int unit[2]; - int rot[4]; - int level; - int eps; - int preview; - int preview_size; + GtkObject *adjustment[4]; + gint level; } SaveDialogVals; static gint save_dialog (void); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_toggle_update (GtkWidget *widget, - gpointer data); -static void save_mm_toggle_update (GtkWidget *widget, +static void save_unit_toggle_update (GtkWidget *widget, gpointer data); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; @@ -279,81 +272,78 @@ static int ascii85_linewidth = 0; static void ascii85_init (void) { - ascii85_len = 0; - ascii85_linewidth = 0; + ascii85_len = 0; + ascii85_linewidth = 0; } static void ascii85_flush (FILE *ofp) { - char c[5]; - int i; - gboolean zero_case = (ascii85_buf == 0); + char c[5]; + int i; + gboolean zero_case = (ascii85_buf == 0); - - for (i=4; i >= 0; i--) + for (i=4; i >= 0; i--) { - c[i] = (ascii85_buf % 85) + '!'; - ascii85_buf /= 85; + c[i] = (ascii85_buf % 85) + '!'; + ascii85_buf /= 85; } - /* check for special case: "!!!!!" becomes "z", but only if not - * at end of data. */ - if (zero_case && (ascii85_len == 4)) + /* check for special case: "!!!!!" becomes "z", but only if not + * at end of data. */ + if (zero_case && (ascii85_len == 4)) { - putc ('z', ofp); - ascii85_linewidth++; + putc ('z', ofp); + ascii85_linewidth++; } - else + else { - ascii85_linewidth += ascii85_len+1; - for (i=0; i < ascii85_len+1; i++) - putc (c[i], ofp); + ascii85_linewidth += ascii85_len+1; + for (i=0; i < ascii85_len+1; i++) + putc (c[i], ofp); } - if (ascii85_linewidth >= 75) + if (ascii85_linewidth >= 75) { - putc ('\n', ofp); - ascii85_linewidth = 0; + putc ('\n', ofp); + ascii85_linewidth = 0; } - ascii85_len = 0; - ascii85_buf = 0; + ascii85_len = 0; + ascii85_buf = 0; } static inline void ascii85_out (unsigned char byte, FILE *ofp) { - if (ascii85_len == 4) - ascii85_flush (ofp); + if (ascii85_len == 4) + ascii85_flush (ofp); - ascii85_buf <<= 8; - ascii85_buf |= byte; - ascii85_len++; + ascii85_buf <<= 8; + ascii85_buf |= byte; + ascii85_len++; } static void ascii85_done (FILE *ofp) { - if (ascii85_len) + if (ascii85_len) { - /* zero any unfilled buffer portion, then flush */ - ascii85_buf <<= (8 * (4-ascii85_len)); - ascii85_flush (ofp); + /* zero any unfilled buffer portion, then flush */ + ascii85_buf <<= (8 * (4-ascii85_len)); + ascii85_flush (ofp); } - putc ('~', ofp); - putc ('>', ofp); - putc ('\n', ofp); + putc ('~', ofp); + putc ('>', ofp); + putc ('\n', ofp); } MAIN () - static void query (void) - { static GParamDef load_args[] = { @@ -365,9 +355,9 @@ query (void) { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) - / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef set_load_args[] = { @@ -380,7 +370,8 @@ query (void) { PARAM_INT32, "TextAlphaBits", "1, 2, or 4" }, { PARAM_INT32, "GraphicsAlphaBits", "1, 2, or 4" } }; - static int nset_load_args = sizeof (set_load_args) / sizeof (set_load_args[0]); + static gint nset_load_args = (sizeof (set_load_args) / + sizeof (set_load_args[0])); static GParamDef save_args[] = { @@ -401,7 +392,7 @@ query (void) { PARAM_INT32, "preview", "0: no preview, >0: max. size of preview" }, { PARAM_INT32, "level", "1: PostScript Level 1, 2: PostScript Level 2" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -431,9 +422,8 @@ query (void) gimp_install_procedure ("file_ps_save", _("save file in PostScript file format"), - _("PostScript saving handles all image types except \ -those with alpha channels."), - "Peter Kirchgessner ", + _("PostScript saving handles all image types except those with alpha channels."), + "Peter Kirchgessner ", "Peter Kirchgessner", dversio, "/PostScript", @@ -442,82 +432,91 @@ those with alpha channels."), nsave_args, 0, save_args, NULL); - /* Register file plugin by plugin name and handable extensions */ - gimp_register_magic_load_handler ("file_ps_load", "ps,eps,pdf", "", + gimp_register_magic_load_handler ("file_ps_load", + "ps,eps,pdf", + "", "0,string,%!,0,string,%PDF"); - gimp_register_save_handler ("file_ps_save", "ps,eps", ""); + gimp_register_save_handler ("file_ps_save", + "ps,eps", + ""); } #ifdef GIMP_HAVE_RESOLUTION_INFO static void ps_set_save_size (PSSaveVals *vals, - gint32 image_ID) - -{gdouble xres, yres, factor, iw, ih; - guint width, height; - GUnit unit; + gint32 image_ID) +{ + gdouble xres, yres, factor, iw, ih; + guint width, height; + GUnit unit; gimp_image_get_resolution (image_ID, &xres, &yres); + if ((xres < 1e-5) || (yres < 1e-5)) + { + xres = yres = 72.0; + } + /* Calculate size of image in inches */ + width = gimp_image_width (image_ID); + height = gimp_image_height (image_ID); + iw = width / xres; + ih = height / yres; + unit = gimp_image_get_unit (image_ID); factor = gimp_unit_get_factor (unit); - if ((factor < 1e-5) || (xres < 1e-5) || (yres < 1e-5)) - { - factor = 1.0; xres = yres = 72.0; - } - /* Calculate size of image in inches */ - width = gimp_image_width (image_ID); - height = gimp_image_height (image_ID); - iw = width / xres / factor; - ih = height / yres / factor; + if (factor == 0.0254 || + factor == 0.254 || + factor == 2.54 || + factor == 25.4) + { + vals->unit_mm = TRUE; + } + if (vals->unit_mm) - { - iw *= 25.4; ih *= 25.4; - } - vals->width = iw; + { + iw *= 25.4; + ih *= 25.4; + } + vals->width = iw; vals->height = ih; } #endif static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) - { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID = -1; - gint32 drawable_ID = -1; - gint32 orig_image_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID = -1; + gint32 drawable_ID = -1; + gint32 orig_image_ID = -1; GimpExportReturnType export = EXPORT_CANCEL; - int k; + gint k; l_run_mode = run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_ps_load") == 0) { INIT_I18N_UI(); - *nreturn_vals = 2; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = -1; - switch (run_mode) - { + { case RUN_INTERACTIVE: /* Possibly retrieve data */ gimp_get_data ("file_ps_load", &plvals); - if (!load_dialog ()) return; + if (! load_dialog ()) + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -535,20 +534,28 @@ run (char *name, default: break; - } + } + if (status == STATUS_SUCCESS) - { - check_load_vals (); - image_ID = load_image (param[1].data.d_string); + { + check_load_vals (); + image_ID = load_image (param[1].data.d_string); - status = (image_ID != -1) ? STATUS_SUCCESS : STATUS_EXECUTION_ERROR; + if (image_ID != -1) + { + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_ID; + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } - /* Store plvals data */ - if (status == STATUS_SUCCESS) - gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); - } - values[0].data.d_status = status; - values[1].data.d_image = image_ID; + /* Store plvals data */ + if (status == STATUS_SUCCESS) + gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); } else if (strcmp (name, "file_ps_save") == 0) { @@ -557,18 +564,19 @@ run (char *name, image_ID = orig_image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - /* eventually export the image */ + /* eventually export the image */ switch (run_mode) { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: init_gtk (); - export = gimp_export_image (&image_ID, &drawable_ID, "PS", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + export = gimp_export_image (&image_ID, &drawable_ID, "PS", + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -592,29 +600,29 @@ run (char *name, #endif /* First acquire information with a dialog */ if (! save_dialog ()) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 15) - { - status = STATUS_CALLING_ERROR; - } + { + status = STATUS_CALLING_ERROR; + } else - { - psvals.width = param[5].data.d_float; - psvals.height = param[6].data.d_float; - psvals.x_offset = param[7].data.d_float; - psvals.y_offset = param[8].data.d_float; - psvals.unit_mm = (param[9].data.d_int32 != 0); - psvals.keep_ratio = (param[10].data.d_int32 != 0); - psvals.rotate = param[11].data.d_int32; - psvals.eps = param[12].data.d_int32; - psvals.preview = (param[13].data.d_int32 != 0); - psvals.preview_size = param[13].data.d_int32; - psvals.level = param[14].data.d_int32; - } + { + psvals.width = param[5].data.d_float; + psvals.height = param[6].data.d_float; + psvals.x_offset = param[7].data.d_float; + psvals.y_offset = param[8].data.d_float; + psvals.unit_mm = (param[9].data.d_int32 != 0); + psvals.keep_ratio = (param[10].data.d_int32 != 0); + psvals.rotate = param[11].data.d_int32; + psvals.eps = param[12].data.d_int32; + psvals.preview = (param[13].data.d_int32 != 0); + psvals.preview_size = param[13].data.d_int32; + psvals.level = param[14].data.d_int32; + } break; case RUN_WITH_LAST_VALS: @@ -627,168 +635,171 @@ run (char *name, } if (status == STATUS_SUCCESS) - { + { #ifdef GIMP_HAVE_RESOLUTION_INFO - if ((psvals.width == 0.0) || (psvals.height == 0.0)) - ps_set_save_size (&psvals, orig_image_ID); + if ((psvals.width == 0.0) || (psvals.height == 0.0)) + ps_set_save_size (&psvals, orig_image_ID); #endif - check_save_vals (); - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) - { - /* Store psvals data */ - gimp_set_data ("file_ps_save", &psvals, sizeof (PSSaveVals)); - } - else - { - status = STATUS_EXECUTION_ERROR; - } - } + check_save_vals (); + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + /* Store psvals data */ + gimp_set_data ("file_ps_save", &psvals, sizeof (PSSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); - - values[0].data.d_status = status; } else if (strcmp (name, "file_ps_load_setargs") == 0) { /* Make sure all the arguments are there! */ if (nparams != 8) - { - status = STATUS_CALLING_ERROR; - } + { + status = STATUS_CALLING_ERROR; + } else - { - plvals.resolution = param[0].data.d_int32; - plvals.width = param[1].data.d_int32; - plvals.height = param[2].data.d_int32; - plvals.use_bbox = param[3].data.d_int32; - if (param[4].data.d_string != NULL) - strncpy (plvals.pages,param[4].data.d_string,sizeof (plvals.pages)); - else - plvals.pages[0] = '\0'; - plvals.pages[sizeof (plvals.pages) - 1] = '\0'; - plvals.pnm_type = param[5].data.d_int32; - plvals.textalpha = param[6].data.d_int32; - plvals.graphicsalpha = param[7].data.d_int32; - check_load_vals (); - gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); - } - values[0].data.d_status = status; + { + plvals.resolution = param[0].data.d_int32; + plvals.width = param[1].data.d_int32; + plvals.height = param[2].data.d_int32; + plvals.use_bbox = param[3].data.d_int32; + if (param[4].data.d_string != NULL) + strncpy (plvals.pages, param[4].data.d_string, + sizeof (plvals.pages)); + else + plvals.pages[0] = '\0'; + plvals.pages[sizeof (plvals.pages) - 1] = '\0'; + plvals.pnm_type = param[5].data.d_int32; + plvals.textalpha = param[6].data.d_int32; + plvals.graphicsalpha = param[7].data.d_int32; + check_load_vals (); + gimp_set_data ("file_ps_load", &plvals, sizeof (PSLoadVals)); + } } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) - +load_image (gchar *filename) { - gint32 image_ID, *image_list, *nl; - guint page_count; - FILE *ifp; - char *temp; - int llx, lly, urx, ury; - int k, n_images, max_images, max_pagenum; + gint32 image_ID, *image_list, *nl; + guint page_count; + FILE *ifp; + char *temp; + int llx, lly, urx, ury; + int k, n_images, max_images, max_pagenum; #ifdef PS_DEBUG - g_print ("load_image:\n resolution = %d\n", plvals.resolution); - g_print (" %dx%d pixels\n", plvals.width, plvals.height); - g_print (" BoundingBox: %d\n", plvals.use_bbox); - g_print (" Colouring: %d\n", plvals.pnm_type); - g_print (" TextAlphaBits: %d\n", plvals.textalpha); - g_print (" GraphicsAlphaBits: %d\n", plvals.graphicsalpha); + g_print ("load_image:\n resolution = %d\n", plvals.resolution); + g_print (" %dx%d pixels\n", plvals.width, plvals.height); + g_print (" BoundingBox: %d\n", plvals.use_bbox); + g_print (" Colouring: %d\n", plvals.pnm_type); + g_print (" TextAlphaBits: %d\n", plvals.textalpha); + g_print (" GraphicsAlphaBits: %d\n", plvals.graphicsalpha); #endif - /* Try to see if PostScript file is available */ - ifp = fopen (filename, "r"); - if (ifp == NULL) - { - g_message (_("PS: can't open file for reading")); - return (-1); - } - fclose (ifp); + /* Try to see if PostScript file is available */ + ifp = fopen (filename, "r"); + if (ifp == NULL) + { + g_message (_("PS: can't open file for reading")); + return (-1); + } + fclose (ifp); - if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Interpreting and Loading %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + if (l_run_mode != RUN_NONINTERACTIVE) + { + temp = g_strdup_printf (_("Interpreting and Loading %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } - ifp = ps_open (filename, &plvals, &llx, &lly, &urx, &ury); - if (!ifp) - { - g_message (_("PS: can't interprete file")); - return (-1); - } + ifp = ps_open (filename, &plvals, &llx, &lly, &urx, &ury); + if (!ifp) + { + g_message (_("PS: can't interprete file")); + return (-1); + } - image_list = (gint32 *)g_malloc (10 * sizeof (gint32)); - n_images = 0; - max_images = 10; + image_list = (gint32 *)g_malloc (10 * sizeof (gint32)); + n_images = 0; + max_images = 10; - max_pagenum = 9999; /* Try to get the maximum pagenumber to read */ - if (!page_in_list (plvals.pages, max_pagenum)) /* Is there a limit in list ? */ - { - max_pagenum = -1; - for (temp = plvals.pages; *temp != '\0'; temp++) - { - if ((*temp < '0') || (*temp > '9')) continue; /* Search next digit */ - sscanf (temp, "%d", &k); - if (k > max_pagenum) max_pagenum = k; - while ((*temp >= '0') && (*temp <= '9')) temp++; - temp--; - } - if (max_pagenum < 1) max_pagenum = 9999; - } + max_pagenum = 9999; /* Try to get the maximum pagenumber to read */ + if (!page_in_list (plvals.pages, max_pagenum)) /* Is there a limit in list ? */ + { + max_pagenum = -1; + for (temp = plvals.pages; *temp != '\0'; temp++) + { + if ((*temp < '0') || (*temp > '9')) continue; /* Search next digit */ + sscanf (temp, "%d", &k); + if (k > max_pagenum) max_pagenum = k; + while ((*temp >= '0') && (*temp <= '9')) temp++; + temp--; + } + if (max_pagenum < 1) max_pagenum = 9999; + } - /* Load all images */ - for (page_count = 1; page_count <= max_pagenum; page_count++) - { - if (page_in_list (plvals.pages, page_count)) - { - image_ID = load_ps (filename, page_count, ifp, llx, lly, urx, ury); - if (image_ID == -1) break; + /* Load all images */ + for (page_count = 1; page_count <= max_pagenum; page_count++) + { + if (page_in_list (plvals.pages, page_count)) + { + image_ID = load_ps (filename, page_count, ifp, llx, lly, urx, ury); + if (image_ID == -1) break; #ifdef GIMP_HAVE_RESOLUTION_INFO - gimp_image_set_resolution (image_ID, - (double)plvals.resolution, (double)plvals.resolution); - gimp_image_set_unit (image_ID, UNIT_INCH); + gimp_image_set_resolution (image_ID, + (double) plvals.resolution, + (double) plvals.resolution); #endif - if (n_images == max_images) - { - nl = (gint32 *)g_realloc (image_list, (max_images+10)*sizeof (gint32)); - if (nl == NULL) break; - image_list = nl; - max_images += 10; - } - image_list[n_images++] = image_ID; - } - else /* Skip an image */ - { - image_ID = skip_ps (ifp); - if (image_ID == -1) break; - } - } + if (n_images == max_images) + { + nl = (gint32 *) g_realloc (image_list, + (max_images+10)*sizeof (gint32)); + if (nl == NULL) break; + image_list = nl; + max_images += 10; + } + image_list[n_images++] = image_ID; + } + else /* Skip an image */ + { + image_ID = skip_ps (ifp); + if (image_ID == -1) break; + } + } - ps_close (ifp); + ps_close (ifp); - /* Display images in reverse order. The last will be displayed by GIMP itself*/ - if (l_run_mode != RUN_NONINTERACTIVE) - { - for (k = n_images-1; k >= 1; k--) - gimp_display_new (image_list[k]); - } + /* Display images in reverse order. The last will be displayed by GIMP itself*/ + if (l_run_mode != RUN_NONINTERACTIVE) + { + for (k = n_images-1; k >= 1; k--) + gimp_display_new (image_list[k]); + } - image_ID = (n_images > 0) ? image_list[0] : -1; - g_free (image_list); + image_ID = (n_images > 0) ? image_list[0] : -1; + g_free (image_list); - return (image_ID); + return (image_ID); } static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) - { FILE* ofp; GDrawableType drawable_type; @@ -803,13 +814,13 @@ save_image (char *filename, /* Make sure we're not saving an image with an alpha channel */ if (gimp_drawable_has_alpha (drawable_ID)) - { - g_message (_("PostScript save cannot handle images with alpha channels")); - return FALSE; - } + { + g_message (_("PostScript save cannot handle images with alpha channels")); + return FALSE; + } switch (drawable_type) - { + { case INDEXED_IMAGE: case GRAY_IMAGE: case RGB_IMAGE: @@ -818,22 +829,22 @@ save_image (char *filename, g_message (_("PS: cannot operate on unknown image types")); return (FALSE); break; - } + } /* Open the output file. */ ofp = fopen (filename, "wb"); if (!ofp) - { - g_message (_("PS: can't open file for writing")); - return (FALSE); - } + { + g_message (_("PS: can't open file for writing")); + return (FALSE); + } if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Saving %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + { + temp = g_strdup_printf (_("Saving %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } save_ps_header (ofp, filename); @@ -855,13 +866,16 @@ save_image (char *filename, /* Check (and correct) the load values plvals */ static void check_load_vals (void) - { - if (plvals.resolution < 5) plvals.resolution = 5; - else if (plvals.resolution > 1440) plvals.resolution = 1440; + if (plvals.resolution < 5) + plvals.resolution = 5; + else if (plvals.resolution > 1440) + plvals.resolution = 1440; - if (plvals.width < 2) plvals.width = 2; - if (plvals.height < 2) plvals.height = 2; + if (plvals.width < 2) + plvals.width = 2; + if (plvals.height < 2) + plvals.height = 2; plvals.use_bbox = (plvals.use_bbox != 0); if (plvals.pages[0] == '\0') strcpy (plvals.pages, "1-99"); @@ -879,39 +893,24 @@ check_load_vals (void) /* Check (and correct) the save values psvals */ static void check_save_vals (void) +{ + int i; -{int i; - - i = psvals.rotate; - if ((i != 0) && (i != 90) && (i != 180) && (i != 270)) - psvals.rotate = 90; - if (psvals.preview_size <= 0) psvals.preview = 0; -} - - -/* Convert float to ascii for use in labels (cuts off trailing blanks). */ -/* The pointer returned is only valid up to the next call of the function. */ -static char *ftoa (char *format, - double r) - -{static char buffer[32]; - register int n; - - sprintf (buffer, format, r); - n = strlen (buffer)-1; - while ((n >= 0) && (buffer[n] == ' ')) - buffer[n--] = '\0'; - return (buffer); + i = psvals.rotate; + if ((i != 0) && (i != 90) && (i != 180) && (i != 270)) + psvals.rotate = 90; + if (psvals.preview_size <= 0) + psvals.preview = FALSE; } /* Check if a page is in a given list */ static gint -page_in_list (char *list, - guint page_num) - -{char tmplist[STR_LENGTH], *c0, *c1; - int state, start_num, end_num; +page_in_list (gchar *list, + guint page_num) +{ + char tmplist[STR_LENGTH], *c0, *c1; + int state, start_num, end_num; #define READ_STARTNUM 0 #define READ_ENDNUM 1 #define CHK_LIST(a,b,c) {int low=(a),high=(b),swp; \ @@ -919,97 +918,97 @@ page_in_list (char *list, if (low>high) {swp=low; low=high; high=swp;} \ if ((low<=(c))&&(high>=(c))) return (1); } } - if ((list == NULL) || (*list == '\0')) return (1); + if ((list == NULL) || (*list == '\0')) return (1); - strncpy (tmplist, list, STR_LENGTH); - tmplist[STR_LENGTH-1] = '\0'; + strncpy (tmplist, list, STR_LENGTH); + tmplist[STR_LENGTH-1] = '\0'; - c0 = c1 = tmplist; - while (*c1) /* Remove all whitespace and break on unsupported characters */ - { - if ((*c1 >= '0') && (*c1 <= '9')) - { - *(c0++) = *c1; - } - else if ((*c1 == '-') || (*c1 == ',')) - { /* Try to remove double occurances of these characters */ - if (c0 == tmplist) - { - *(c0++) = *c1; - } - else - { - if (*(c0-1) != *c1) - *(c0++) = *c1; - } - } - else break; - c1++; - } - if (c0 == tmplist) return (1); - *c0 = '\0'; + c0 = c1 = tmplist; + while (*c1) /* Remove all whitespace and break on unsupported characters */ + { + if ((*c1 >= '0') && (*c1 <= '9')) + { + *(c0++) = *c1; + } + else if ((*c1 == '-') || (*c1 == ',')) + { /* Try to remove double occurances of these characters */ + if (c0 == tmplist) + { + *(c0++) = *c1; + } + else + { + if (*(c0-1) != *c1) + *(c0++) = *c1; + } + } + else break; + c1++; + } + if (c0 == tmplist) return (1); + *c0 = '\0'; - /* Now we have a comma separated list like 1-4-1,-3,1- */ + /* Now we have a comma separated list like 1-4-1,-3,1- */ - start_num = end_num = -1; - state = READ_STARTNUM; - for (c0 = tmplist; *c0 != '\0'; c0++) - { - switch (state) - { - case READ_STARTNUM: - if (*c0 == ',') - { - if ((start_num > 0) && (start_num == (int)page_num)) return (-1); - start_num = -1; - } - else if (*c0 == '-') - { - if (start_num < 0) start_num = 1; - state = READ_ENDNUM; - } - else /* '0' - '9' */ - { - if (start_num < 0) start_num = 0; - start_num *= 10; - start_num += *c0 - '0'; - } - break; + start_num = end_num = -1; + state = READ_STARTNUM; + for (c0 = tmplist; *c0 != '\0'; c0++) + { + switch (state) + { + case READ_STARTNUM: + if (*c0 == ',') + { + if ((start_num > 0) && (start_num == (int)page_num)) return (-1); + start_num = -1; + } + else if (*c0 == '-') + { + if (start_num < 0) start_num = 1; + state = READ_ENDNUM; + } + else /* '0' - '9' */ + { + if (start_num < 0) start_num = 0; + start_num *= 10; + start_num += *c0 - '0'; + } + break; - case READ_ENDNUM: - if (*c0 == ',') - { - if (end_num < 0) end_num = 9999; - CHK_LIST (start_num, end_num, (int)page_num); - start_num = end_num = -1; - state = READ_STARTNUM; - } - else if (*c0 == '-') - { - CHK_LIST (start_num, end_num, (int)page_num); - start_num = end_num; - end_num = -1; - } - else /* '0' - '9' */ - { - if (end_num < 0) end_num = 0; - end_num *= 10; - end_num += *c0 - '0'; - } - break; - } - } - if (state == READ_STARTNUM) - { - if (start_num > 0) - return (start_num == (int)page_num); - } - else - { - if (end_num < 0) end_num = 9999; - CHK_LIST (start_num, end_num, (int)page_num); - } - return (0); + case READ_ENDNUM: + if (*c0 == ',') + { + if (end_num < 0) end_num = 9999; + CHK_LIST (start_num, end_num, (int)page_num); + start_num = end_num = -1; + state = READ_STARTNUM; + } + else if (*c0 == '-') + { + CHK_LIST (start_num, end_num, (int)page_num); + start_num = end_num; + end_num = -1; + } + else /* '0' - '9' */ + { + if (end_num < 0) end_num = 0; + end_num *= 10; + end_num += *c0 - '0'; + } + break; + } + } + if (state == READ_STARTNUM) + { + if (start_num > 0) + return (start_num == (int)page_num); + } + else + { + if (end_num < 0) end_num = 9999; + CHK_LIST (start_num, end_num, (int)page_num); + } + return (0); #undef CHK_LIST } @@ -1017,202 +1016,202 @@ page_in_list (char *list, /* Get the BoundingBox of a PostScript file. On success, 0 is returned. */ /* On failure, -1 is returned. */ static gint -get_bbox (char *filename, - int *x0, - int *y0, - int *x1, - int *y1) +get_bbox (gchar *filename, + gint *x0, + gint *y0, + gint *x1, + gint *y1) +{ + char line[1024], *src; + FILE *ifp; + int retval = -1; -{char line[1024], *src; - FILE *ifp; - int retval = -1; + ifp = fopen (filename, "rb"); + if (ifp == NULL) return (-1); - ifp = fopen (filename, "rb"); - if (ifp == NULL) return (-1); - - for (;;) - { - if (fgets (line, sizeof (line)-1, ifp) == NULL) break; - if ((line[0] != '%') || (line[1] != '%')) continue; - src = &(line[2]); - while ((*src == ' ') || (*src == '\t')) src++; - if (strncmp (src, "BoundingBox", 11) != 0) continue; - src += 11; - while ((*src == ' ') || (*src == '\t') || (*src == ':')) src++; - if (strncmp (src, "(atend)", 7) == 0) continue; - if (sscanf (src, "%d%d%d%d", x0, y0, x1, y1) == 4) - retval = 0; - break; - } - fclose (ifp); - return (retval); + for (;;) + { + if (fgets (line, sizeof (line)-1, ifp) == NULL) break; + if ((line[0] != '%') || (line[1] != '%')) continue; + src = &(line[2]); + while ((*src == ' ') || (*src == '\t')) src++; + if (strncmp (src, "BoundingBox", 11) != 0) continue; + src += 11; + while ((*src == ' ') || (*src == '\t') || (*src == ':')) src++; + if (strncmp (src, "(atend)", 7) == 0) continue; + if (sscanf (src, "%d%d%d%d", x0, y0, x1, y1) == 4) + retval = 0; + break; + } + fclose (ifp); + return (retval); } -static char *pnmfile; +static gchar *pnmfile; #ifdef G_OS_WIN32 -static char *indirfile = NULL; +static gchar *indirfile = NULL; #endif /* Open the PostScript file. On failure, NULL is returned. */ /* The filepointer returned will give a PNM-file generated */ /* by the PostScript-interpreter. */ static FILE * -ps_open (char *filename, +ps_open (gchar *filename, const PSLoadVals *loadopt, - int *llx, - int *lly, - int *urx, - int *ury) + gint *llx, + gint *lly, + gint *urx, + gint *ury) +{ + char *cmd, *gs, *gs_opts, *driver; + FILE *fd_popen; + int width, height, resolution; + int x0, y0, x1, y1; + int is_pdf; + char TextAlphaBits[64], GraphicsAlphaBits[64], geometry[32]; -{char *cmd, *gs, *gs_opts, *driver; - FILE *fd_popen; - int width, height, resolution; - int x0, y0, x1, y1; - int is_pdf; - char TextAlphaBits[64], GraphicsAlphaBits[64], geometry[32]; + resolution = loadopt->resolution; + *llx = *lly = 0; + width = loadopt->width; + height = loadopt->height; + *urx = width-1; + *ury = height-1; - resolution = loadopt->resolution; - *llx = *lly = 0; - width = loadopt->width; - height = loadopt->height; - *urx = width-1; - *ury = height-1; - - /* Check if the file is a PDF. For PDF, we cant set geometry */ - is_pdf = 0; + /* Check if the file is a PDF. For PDF, we cant set geometry */ + is_pdf = 0; #ifndef __EMX__ - fd_popen = fopen (filename, "r"); + fd_popen = fopen (filename, "r"); #else - fd_popen = fopen (filename, "rb"); + fd_popen = fopen (filename, "rb"); #endif - if (fd_popen != NULL) - {char hdr[4]; + if (fd_popen != NULL) + { + char hdr[4]; - fread (hdr, 1, 4, fd_popen); - is_pdf = (strncmp (hdr, "%PDF", 4) == 0); - fclose (fd_popen); - } + fread (hdr, 1, 4, fd_popen); + is_pdf = (strncmp (hdr, "%PDF", 4) == 0); + fclose (fd_popen); + } - if ((!is_pdf) && (loadopt->use_bbox)) /* Try the BoundingBox ? */ - { - if ( (get_bbox (filename, &x0, &y0, &x1, &y1) == 0) - && (x0 >= 0) && (y0 >= 0) && (x1 > x0) && (y1 > y0)) - { - *llx = (int)((x0/72.0) * resolution + 0.01); - *lly = (int)((y0/72.0) * resolution + 0.01); - *urx = (int)((x1/72.0) * resolution + 0.01); - *ury = (int)((y1/72.0) * resolution + 0.01); - width = *urx + 1; - height = *ury + 1; - } - } - if (loadopt->pnm_type == 4) driver = "pbmraw"; - else if (loadopt->pnm_type == 5) driver = "pgmraw"; - else if (loadopt->pnm_type == 7) driver = "pnmraw"; - else driver = "ppmraw"; + if ((!is_pdf) && (loadopt->use_bbox)) /* Try the BoundingBox ? */ + { + if ( (get_bbox (filename, &x0, &y0, &x1, &y1) == 0) + && (x0 >= 0) && (y0 >= 0) && (x1 > x0) && (y1 > y0)) + { + *llx = (int)((x0/72.0) * resolution + 0.01); + *lly = (int)((y0/72.0) * resolution + 0.01); + *urx = (int)((x1/72.0) * resolution + 0.01); + *ury = (int)((y1/72.0) * resolution + 0.01); + width = *urx + 1; + height = *ury + 1; + } + } + if (loadopt->pnm_type == 4) driver = "pbmraw"; + else if (loadopt->pnm_type == 5) driver = "pgmraw"; + else if (loadopt->pnm_type == 7) driver = "pnmraw"; + else driver = "ppmraw"; #ifdef USE_REAL_OUTPUTFILE - /* For instance, the Win32 port of ghostscript doesn't work correctly when - * using standard output as output file. - * Thus, use a real output file. - */ - pnmfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "p%lx", - g_get_tmp_dir (), getpid ()); + /* For instance, the Win32 port of ghostscript doesn't work correctly when + * using standard output as output file. + * Thus, use a real output file. + */ + pnmfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "p%lx", + g_get_tmp_dir (), getpid ()); #else - pnmfile = "-"; + pnmfile = "-"; #endif - gs = getenv ("GS_PROG"); + gs = getenv ("GS_PROG"); #ifndef G_OS_WIN32 - if (gs == NULL) gs = "gs"; + if (gs == NULL) gs = "gs"; #else - /* We want the console ghostscript application. It should be in the PATH */ - if (gs == NULL) gs = "gswin32c"; + /* We want the console ghostscript application. It should be in the PATH */ + if (gs == NULL) gs = "gswin32c"; #endif - gs_opts = getenv ("GS_OPTIONS"); - if (gs_opts == NULL) - gs_opts = "-dSAFER"; - else - gs_opts = ""; /* Ghostscript will add these options */ + gs_opts = getenv ("GS_OPTIONS"); + if (gs_opts == NULL) + gs_opts = "-dSAFER"; + else + gs_opts = ""; /* Ghostscript will add these options */ - TextAlphaBits[0] = GraphicsAlphaBits[0] = geometry[0] = '\0'; + TextAlphaBits[0] = GraphicsAlphaBits[0] = geometry[0] = '\0'; - /* Antialiasing not available for PBM-device */ - if ((loadopt->pnm_type != 4) && (loadopt->textalpha != 1)) - sprintf (TextAlphaBits, "-dTextAlphaBits=%d ", (int)loadopt->textalpha); + /* Antialiasing not available for PBM-device */ + if ((loadopt->pnm_type != 4) && (loadopt->textalpha != 1)) + sprintf (TextAlphaBits, "-dTextAlphaBits=%d ", (int)loadopt->textalpha); - if ((loadopt->pnm_type != 4) && (loadopt->graphicsalpha != 1)) - sprintf (GraphicsAlphaBits, "-dGraphicsAlphaBits=%d ", - (int)loadopt->graphicsalpha); + if ((loadopt->pnm_type != 4) && (loadopt->graphicsalpha != 1)) + sprintf (GraphicsAlphaBits, "-dGraphicsAlphaBits=%d ", + (int)loadopt->graphicsalpha); - if (!is_pdf) /* For PDF, we cant set geometry */ - sprintf (geometry,"-g%dx%d ", width, height); + if (!is_pdf) /* For PDF, we cant set geometry */ + sprintf (geometry,"-g%dx%d ", width, height); - cmd = g_strdup_printf ("%s -sDEVICE=%s -r%d %s%s%s-q -dNOPAUSE %s \ + cmd = g_strdup_printf ("%s -sDEVICE=%s -r%d %s%s%s-q -dNOPAUSE %s \ -sOutputFile=%s %s -c quit", - gs, driver, resolution, geometry, - TextAlphaBits, GraphicsAlphaBits, - gs_opts, pnmfile, filename); + gs, driver, resolution, geometry, + TextAlphaBits, GraphicsAlphaBits, + gs_opts, pnmfile, filename); #ifdef PS_DEBUG - g_print ("Going to start ghostscript with:\n%s\n", cmd); + g_print ("Going to start ghostscript with:\n%s\n", cmd); #endif #ifndef USE_REAL_OUTPUTFILE - /* Start the command and use a pipe for reading the PNM-file. */ + /* Start the command and use a pipe for reading the PNM-file. */ #ifndef __EMX__ - fd_popen = popen (cmd, "r"); + fd_popen = popen (cmd, "r"); #else - fd_popen = popen (cmd, "rb"); + fd_popen = popen (cmd, "rb"); #endif #else - /* If someone does not like the pipe (or it does not work), just start */ - /* ghostscript with a real outputfile. When ghostscript has finished, */ - /* open the outputfile and return its filepointer. But be sure */ - /* to close and remove the file within ps_close(). */ + /* If someone does not like the pipe (or it does not work), just start */ + /* ghostscript with a real outputfile. When ghostscript has finished, */ + /* open the outputfile and return its filepointer. But be sure */ + /* to close and remove the file within ps_close(). */ #ifdef G_OS_WIN32 /* Work around braindead command line length limit. * Hmm, I wonder if this is necessary, but it doesn't harm... */ - if (strlen (cmd) >= 100) - { - FILE *indf; - indirfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "i%lx", - g_get_tmp_dir (), getpid ()); - indf = fopen (indirfile, "w"); - fprintf (indf, "%s\n", cmd + strlen (gs) + 1); - sprintf (cmd, "%s @%s", gs, indirfile); - fclose (indf); - } + if (strlen (cmd) >= 100) + { + FILE *indf; + indirfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "i%lx", + g_get_tmp_dir (), getpid ()); + indf = fopen (indirfile, "w"); + fprintf (indf, "%s\n", cmd + strlen (gs) + 1); + sprintf (cmd, "%s @%s", gs, indirfile); + fclose (indf); + } #endif - system (cmd); + system (cmd); #ifndef __EMX__ - fd_popen = fopen (pnmfile, "r"); + fd_popen = fopen (pnmfile, "r"); #else - fd_popen = fopen (pnmfile, "rb"); + fd_popen = fopen (pnmfile, "rb"); #endif #endif - g_free (cmd); + g_free (cmd); - return (fd_popen); + return (fd_popen); } /* Close the PNM-File of the PostScript interpreter */ static void ps_close (FILE *ifp) - { #ifndef USE_REAL_OUTPUTFILE - /* Finish reading from pipe. */ - pclose (ifp); + /* Finish reading from pipe. */ + pclose (ifp); #else /* If a real outputfile was used, close the file and remove it. */ - fclose (ifp); - unlink (pnmfile); + fclose (ifp); + unlink (pnmfile); #ifdef G_OS_WIN32 - if (indirfile != NULL) - unlink (indirfile); + if (indirfile != NULL) + unlink (indirfile); #endif #endif } @@ -1221,90 +1220,90 @@ ps_close (FILE *ifp) /* Read the header of a raw PNM-file and return type (4-6) or -1 on failure */ static gint read_pnmraw_type (FILE *ifp, - int *width, - int *height, - int *maxval) + gint *width, + gint *height, + gint *maxval) +{ + register int frst, scnd, thrd; + gint pnmtype; + char line[1024]; -{register int frst, scnd, thrd; - gint pnmtype; - char line[1024]; - - /* GhostScript may write some informational messages infront of the header. */ - /* We are just looking at a Px\n in the input stream. */ - frst = getc (ifp); - scnd = getc (ifp); - thrd = getc (ifp); - for (;;) - { - if (thrd == EOF) return (-1); + /* GhostScript may write some informational messages infront of the header. */ + /* We are just looking at a Px\n in the input stream. */ + frst = getc (ifp); + scnd = getc (ifp); + thrd = getc (ifp); + for (;;) + { + if (thrd == EOF) return (-1); #if defined (__EMX__) || defined (WIN32) - if (thrd == '\r') thrd = getc (ifp); + if (thrd == '\r') thrd = getc (ifp); #endif - if ((thrd == '\n') && (frst == 'P') && (scnd >= '1') && (scnd <= '6')) - break; - frst = scnd; - scnd = thrd; - thrd = getc (ifp); - } - pnmtype = scnd - '0'; - /* We dont use the ASCII-versions */ - if ((pnmtype >= 1) && (pnmtype <= 3)) return (-1); + if ((thrd == '\n') && (frst == 'P') && (scnd >= '1') && (scnd <= '6')) + break; + frst = scnd; + scnd = thrd; + thrd = getc (ifp); + } + pnmtype = scnd - '0'; + /* We dont use the ASCII-versions */ + if ((pnmtype >= 1) && (pnmtype <= 3)) return (-1); - /* Read width/height */ - for (;;) - { - if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); - if (line[0] != '#') break; - } - if (sscanf (line, "%d%d", width, height) != 2) return (-1); - *maxval = 255; + /* Read width/height */ + for (;;) + { + if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); + if (line[0] != '#') break; + } + if (sscanf (line, "%d%d", width, height) != 2) return (-1); + *maxval = 255; - if (pnmtype != 4) /* Read maxval */ - { - for (;;) - { - if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); - if (line[0] != '#') break; - } - if (sscanf (line, "%d", maxval) != 1) return (-1); - } - return (pnmtype); + if (pnmtype != 4) /* Read maxval */ + { + for (;;) + { + if (fgets (line, sizeof (line)-1, ifp) == NULL) return (-1); + if (line[0] != '#') break; + } + if (sscanf (line, "%d", maxval) != 1) return (-1); + } + return (pnmtype); } /* Create an image. Sets layer_ID, drawable and rgn. Returns image_ID */ static gint32 -create_new_image (char *filename, - guint pagenum, - guint width, - guint height, - GImageType type, - gint32 *layer_ID, - GDrawable **drawable, - GPixelRgn *pixel_rgn) +create_new_image (gchar *filename, + guint pagenum, + guint width, + guint height, + GImageType type, + gint32 *layer_ID, + GDrawable **drawable, + GPixelRgn *pixel_rgn) +{ + gint32 image_ID; + GDrawableType gdtype; + char *tmp; -{gint32 image_ID; - GDrawableType gdtype; - char *tmp; + if (type == GRAY) gdtype = GRAY_IMAGE; + else if (type == INDEXED) gdtype = INDEXED_IMAGE; + else gdtype = RGB_IMAGE; - if (type == GRAY) gdtype = GRAY_IMAGE; - else if (type == INDEXED) gdtype = INDEXED_IMAGE; - else gdtype = RGB_IMAGE; + image_ID = gimp_image_new (width, height, type); + tmp = g_strdup_printf ("%s-pg%ld", filename, (long)pagenum); + gimp_image_set_filename (image_ID, tmp); + g_free (tmp); - image_ID = gimp_image_new (width, height, type); - tmp = g_strdup_printf ("%s-pg%ld", filename, (long)pagenum); - gimp_image_set_filename (image_ID, tmp); - g_free (tmp); + *layer_ID = gimp_layer_new (image_ID, "Background", width, height, + gdtype, 100, NORMAL_MODE); + gimp_image_add_layer (image_ID, *layer_ID, 0); - *layer_ID = gimp_layer_new (image_ID, "Background", width, height, - gdtype, 100, NORMAL_MODE); - gimp_image_add_layer (image_ID, *layer_ID, 0); + *drawable = gimp_drawable_get (*layer_ID); + gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width, + (*drawable)->height, TRUE, FALSE); - *drawable = gimp_drawable_get (*layer_ID); - gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width, - (*drawable)->height, TRUE, FALSE); - - return (image_ID); + return (image_ID); } @@ -1312,200 +1311,200 @@ create_new_image (char *filename, /* Returns 0 on success, -1 on failure. */ static gint32 skip_ps (FILE *ifp) +{ + register int k, c; + int i, pnmtype, width, height, maxval, bpl; -{register int k, c; - int i, pnmtype, width, height, maxval, bpl; + pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); + if (pnmtype == 4) /* Portable bitmap */ + bpl = (width + 7)/8; + else if (pnmtype == 5) + bpl = width; + else if (pnmtype == 6) + bpl = width*3; + else + return (-1); - pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); + for (i = 0; i < height; i++) + { + k = bpl; c = EOF; + while (k-- > 0) c = getc (ifp); + if (c == EOF) return (-1); - if (pnmtype == 4) /* Portable bitmap */ - bpl = (width + 7)/8; - else if (pnmtype == 5) - bpl = width; - else if (pnmtype == 6) - bpl = width*3; - else - return (-1); + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+1) / (double)height); + } - for (i = 0; i < height; i++) - { - k = bpl; c = EOF; - while (k-- > 0) c = getc (ifp); - if (c == EOF) return (-1); - - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+1) / (double)height); - } - return (0); + return (0); } /* Load PNM image generated from PostScript file */ static gint32 -load_ps (char *filename, - guint pagenum, - FILE *ifp, - int llx, - int lly, - int urx, - int ury) +load_ps (gchar *filename, + guint pagenum, + FILE *ifp, + gint llx, + gint lly, + gint urx, + gint ury) +{ + register guchar *dest; + guchar *data, *bitline = NULL, *byteline = NULL, *byteptr, *temp; + guchar bit2byte[256*8]; + int width, height, tile_height, scan_lines, total_scan_lines; + int image_width, image_height; + int skip_left, skip_bottom; + int i, j, pnmtype, maxval, bpp, nread; + GImageType imagetype; + gint32 layer_ID, image_ID; + GPixelRgn pixel_rgn; + GDrawable *drawable; + int err = 0, e; -{register unsigned char *dest; - unsigned char *data, *bitline = NULL, *byteline = NULL, *byteptr, *temp; - unsigned char bit2byte[256*8]; - int width, height, tile_height, scan_lines, total_scan_lines; - int image_width, image_height; - int skip_left, skip_bottom; - int i, j, pnmtype, maxval, bpp, nread; - GImageType imagetype; - gint32 layer_ID, image_ID; - GPixelRgn pixel_rgn; - GDrawable *drawable; - int err = 0, e; + pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); - pnmtype = read_pnmraw_type (ifp, &width, &height, &maxval); + if ((width == urx+1) && (height == ury+1)) /* gs respected BoundingBox ? */ + { + skip_left = llx; skip_bottom = lly; + image_width = width - skip_left; + image_height = height - skip_bottom; + } + else + { + skip_left = skip_bottom = 0; + image_width = width; + image_height = height; + } + if (pnmtype == 4) /* Portable Bitmap */ + { + imagetype = INDEXED; + nread = (width+7)/8; + bpp = 1; + bitline = (guchar *)g_malloc (nread); + byteline = (guchar *)g_malloc (nread*8); - if ((width == urx+1) && (height == ury+1)) /* gs respected BoundingBox ? */ - { - skip_left = llx; skip_bottom = lly; - image_width = width - skip_left; - image_height = height - skip_bottom; - } - else - { - skip_left = skip_bottom = 0; - image_width = width; - image_height = height; - } - if (pnmtype == 4) /* Portable Bitmap */ - { - imagetype = INDEXED; - nread = (width+7)/8; - bpp = 1; - bitline = (unsigned char *)g_malloc (nread); - byteline = (unsigned char *)g_malloc (nread*8); + /* Get an array for mapping 8 bits in a byte to 8 bytes */ + temp = bit2byte; + for (j = 0; j < 256; j++) + for (i = 7; i >= 0; i--) + *(temp++) = ((j & (1 << i)) != 0); + } + else if (pnmtype == 5) /* Portable Greymap */ + { + imagetype = GRAY; + nread = width; + bpp = 1; + byteline = (unsigned char *)g_malloc (nread); + } + else if (pnmtype == 6) /* Portable Pixmap */ + { + imagetype = RGB; + nread = width * 3; + bpp = 3; + byteline = (guchar *)g_malloc (nread); + } + else return (-1); - /* Get an array for mapping 8 bits in a byte to 8 bytes */ - temp = bit2byte; - for (j = 0; j < 256; j++) - for (i = 7; i >= 0; i--) - *(temp++) = ((j & (1 << i)) != 0); - } - else if (pnmtype == 5) /* Portable Greymap */ - { - imagetype = GRAY; - nread = width; - bpp = 1; - byteline = (unsigned char *)g_malloc (nread); - } - else if (pnmtype == 6) /* Portable Pixmap */ - { - imagetype = RGB; - nread = width * 3; - bpp = 3; - byteline = (unsigned char *)g_malloc (nread); - } - else return (-1); + image_ID = create_new_image (filename, pagenum, + image_width, image_height, imagetype, + &layer_ID, &drawable, &pixel_rgn); - image_ID = create_new_image (filename, pagenum, - image_width, image_height, imagetype, - &layer_ID, &drawable, &pixel_rgn); + tile_height = gimp_tile_height (); + data = g_malloc (tile_height * image_width * bpp); - tile_height = gimp_tile_height (); - data = g_malloc (tile_height * image_width * bpp); + dest = data; + total_scan_lines = scan_lines = 0; - dest = data; - total_scan_lines = scan_lines = 0; + if (pnmtype == 4) /* Read bitimage ? Must be mapped to indexed */ + {static unsigned char BWColorMap[2*3] = { 255, 255, 255, 0, 0, 0 }; - if (pnmtype == 4) /* Read bitimage ? Must be mapped to indexed */ - {static unsigned char BWColorMap[2*3] = { 255, 255, 255, 0, 0, 0 }; + gimp_image_set_cmap (image_ID, BWColorMap, 2); - gimp_image_set_cmap (image_ID, BWColorMap, 2); + for (i = 0; i < height; i++) + { + e = (fread (bitline, 1, nread, ifp) != nread); + if (total_scan_lines >= image_height) continue; + err |= e; + if (err) break; - for (i = 0; i < height; i++) - { - e = (fread (bitline, 1, nread, ifp) != nread); - if (total_scan_lines >= image_height) continue; - err |= e; - if (err) break; + j = width; /* Map 1 byte of bitimage to 8 bytes of indexed image */ + temp = bitline; + byteptr = byteline; + while (j >= 8) + { + memcpy (byteptr, bit2byte + *(temp++)*8, 8); + byteptr += 8; + j -= 8; + } + if (j > 0) + memcpy (byteptr, bit2byte + *temp*8, j); - j = width; /* Map 1 byte of bitimage to 8 bytes of indexed image */ - temp = bitline; - byteptr = byteline; - while (j >= 8) - { - memcpy (byteptr, bit2byte + *(temp++)*8, 8); - byteptr += 8; - j -= 8; - } - if (j > 0) - memcpy (byteptr, bit2byte + *temp*8, j); + memcpy (dest, byteline+skip_left, image_width); + dest += image_width; + scan_lines++; + total_scan_lines++; - memcpy (dest, byteline+skip_left, image_width); - dest += image_width; - scan_lines++; - total_scan_lines++; + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+1) / (double)image_height); - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+1) / (double)image_height); + if ((scan_lines == tile_height) || ((i+1) == image_height)) + { + gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, + image_width, scan_lines); + scan_lines = 0; + dest = data; + } + if (err) break; + } + } + else /* Read gray/rgb-image */ + { + for (i = 0; i < height; i++) + { + e = (fread (byteline, bpp, width, ifp) != width); + if (total_scan_lines >= image_height) continue; + err |= e; + if (err) break; - if ((scan_lines == tile_height) || ((i+1) == image_height)) - { - gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, - image_width, scan_lines); - scan_lines = 0; - dest = data; - } - if (err) break; - } - } - else /* Read gray/rgb-image */ - { - for (i = 0; i < height; i++) - { - e = (fread (byteline, bpp, width, ifp) != width); - if (total_scan_lines >= image_height) continue; - err |= e; - if (err) break; + memcpy (dest, byteline+skip_left*bpp, image_width*bpp); + dest += image_width*bpp; + scan_lines++; + total_scan_lines++; - memcpy (dest, byteline+skip_left*bpp, image_width*bpp); - dest += image_width*bpp; - scan_lines++; - total_scan_lines++; + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+1) / (double)image_height); - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+1) / (double)image_height); + if ((scan_lines == tile_height) || ((i+1) == image_height)) + { + gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, + image_width, scan_lines); + scan_lines = 0; + dest = data; + } + if (err) break; + } + } - if ((scan_lines == tile_height) || ((i+1) == image_height)) - { - gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, - image_width, scan_lines); - scan_lines = 0; - dest = data; - } - if (err) break; - } - } + g_free (data); + if (byteline) g_free (byteline); + if (bitline) g_free (bitline); - g_free (data); - if (byteline) g_free (byteline); - if (bitline) g_free (bitline); + if (err) + g_message ("EOF encountered on reading"); - if (err) - g_message ("EOF encountered on reading"); + gimp_drawable_flush (drawable); - gimp_drawable_flush (drawable); - - return (err ? -1 : image_ID); + return (err ? -1 : image_ID); } /* Write out the PostScript file header */ -static void save_ps_header (FILE *ofp, - char *filename) - -{time_t cutime = time (NULL); +static void save_ps_header (FILE *ofp, + gchar *filename) +{ + time_t cutime = time (NULL); fprintf (ofp, "%%!PS-Adobe-3.0%s\n", psvals.eps ? " EPSF-3.0" : ""); fprintf (ofp, "%%%%Creator: GIMP PostScript file plugin V %4.2f \ @@ -1520,17 +1519,17 @@ by Peter Kirchgessner\n", VERSIO); /* Write out transformation for image */ static void -save_ps_setup (FILE *ofp, - gint32 drawable_ID, - int width, - int height, - int bpp) - -{double x_offset, y_offset, x_size, y_size; - double x_scale, y_scale; - double width_inch, height_inch; - double f1, f2, dx, dy; - int xtrans, ytrans; +save_ps_setup (FILE *ofp, + gint32 drawable_ID, + gint width, + gint height, + gint bpp) +{ + double x_offset, y_offset, x_size, y_size; + double x_scale, y_scale; + double width_inch, height_inch; + double f1, f2, dx, dy; + int xtrans, ytrans; /* initialize */ @@ -1543,23 +1542,27 @@ save_ps_setup (FILE *ofp, height_inch = fabs (psvals.height); if (psvals.unit_mm) - { - x_offset /= 25.4; y_offset /= 25.4; - width_inch /= 25.4; height_inch /= 25.4; - } + { + x_offset /= 25.4; y_offset /= 25.4; + width_inch /= 25.4; height_inch /= 25.4; + } if (psvals.keep_ratio) /* Proportions to keep ? */ - { /* Fit the image into the allowed size */ - f1 = width_inch / width; - f2 = height_inch / height; - if (f1 < f2) - height_inch = width_inch * (double)(height)/(double)(width); - else - width_inch = fabs (height_inch) * (double)(width)/(double)(height); - } + { /* Fit the image into the allowed size */ + f1 = width_inch / width; + f2 = height_inch / height; + if (f1 < f2) + height_inch = width_inch * (double)(height)/(double)(width); + else + width_inch = fabs (height_inch) * (double)(width)/(double)(height); + } if ((psvals.rotate == 0) || (psvals.rotate == 180)) - { x_size = width_inch; y_size = height_inch; } + { + x_size = width_inch; y_size = height_inch; + } else - { y_size = width_inch; x_size = height_inch; } + { + y_size = width_inch; x_size = height_inch; + } fprintf (ofp, "%%%%BoundingBox: %d %d %d %d\n",(int)(x_offset*72.0), (int)(y_offset*72.0), (int)((x_offset+x_size)*72.0)+1, @@ -1567,9 +1570,9 @@ save_ps_setup (FILE *ofp, fprintf (ofp, "%%%%EndComments\n"); if (psvals.preview && (psvals.preview_size > 0)) - { - save_ps_preview (ofp, drawable_ID); - } + { + save_ps_preview (ofp, drawable_ID); + } fprintf (ofp, "%%%%BeginProlog\n"); fprintf (ofp, "%% Use own dictionary to avoid conflicts\n"); @@ -1581,16 +1584,18 @@ save_ps_setup (FILE *ofp, /* Calculate translation to startpoint of first scanline */ switch (psvals.rotate) - { + { case 0: dx = 0.0; dy = y_size*72.0; - break; + break; case 90: dx = dy = 0.0; - x_scale = 72.0 * width_inch; - y_scale = -72.0 * height_inch; - break; - case 180: dx = x_size*72.0; dy = 0.0; break; - case 270: dx = x_size*72.0; dy = y_size*72.0; break; - } + x_scale = 72.0 * width_inch; + y_scale = -72.0 * height_inch; + break; + case 180: dx = x_size*72.0; dy = 0.0; + break; + case 270: dx = x_size*72.0; dy = y_size*72.0; + break; + } if ((dx != 0.0) || (dy != 0.0)) fprintf (ofp, "%% Translate to begin of first scanline\n%f %f translate\n", dx, dy); @@ -1619,7 +1624,6 @@ save_ps_setup (FILE *ofp, static void save_ps_trailer (FILE *ofp) - { fprintf (ofp, "%%%%Trailer\n"); fprintf (ofp, "end\n%%%%EOF\n"); @@ -1630,210 +1634,210 @@ save_ps_trailer (FILE *ofp) /* If linecount is less than zero, all used memory is freed. */ static void -dither_grey (unsigned char *grey, - unsigned char *bw, - int npix, - int linecount) +dither_grey (guchar *grey, + guchar *bw, + gint npix, + gint linecount) +{ + register guchar *greyptr, *bwptr, mask; + register int *fse; + int x, greyval, fse_inline; + static int *fs_error = NULL; + static int do_init_arrays = 1; + static int limit_array[1278]; + static int east_error[256],seast_error[256],south_error[256],swest_error[256]; + int *limit = &(limit_array[512]); -{register unsigned char *greyptr, *bwptr, mask; - register int *fse; - int x, greyval, fse_inline; - static int *fs_error = NULL; - static int do_init_arrays = 1; - static int limit_array[1278]; - static int east_error[256],seast_error[256],south_error[256],swest_error[256]; - int *limit = &(limit_array[512]); + if (linecount <= 0) + { + if (fs_error) g_free (fs_error-1); + if (linecount < 0) return; + fs_error = (int *)g_malloc ((npix+2)*sizeof (int)); + memset ((char *)fs_error, 0, (npix+2)*sizeof (int)); + fs_error++; - if (linecount <= 0) - { - if (fs_error) g_free (fs_error-1); - if (linecount < 0) return; - fs_error = (int *)g_malloc ((npix+2)*sizeof (int)); - memset ((char *)fs_error, 0, (npix+2)*sizeof (int)); - fs_error++; + /* Initialize some arrays that speed up dithering */ + if (do_init_arrays) + { + do_init_arrays = 0; + for (x = -511; x <= 766; x++) + limit[x] = (x < 0) ? 0 : ((x > 255) ? 255 : x); + for (greyval = 0; greyval < 256; greyval++) + { + east_error[greyval] = (greyval < 128) ? ((greyval * 79) >> 8) + : (((greyval-255)*79) >> 8); + seast_error[greyval] = (greyval < 128) ? ((greyval * 34) >> 8) + : (((greyval-255)*34) >> 8); + south_error[greyval] = (greyval < 128) ? ((greyval * 56) >> 8) + : (((greyval-255)*56) >> 8); + swest_error[greyval] = (greyval < 128) ? ((greyval * 12) >> 8) + : (((greyval-255)*12) >> 8); + } + } + } + if (fs_error == NULL) return; - /* Initialize some arrays that speed up dithering */ - if (do_init_arrays) - { - do_init_arrays = 0; - for (x = -511; x <= 766; x++) - limit[x] = (x < 0) ? 0 : ((x > 255) ? 255 : x); - for (greyval = 0; greyval < 256; greyval++) - { - east_error[greyval] = (greyval < 128) ? ((greyval * 79) >> 8) - : (((greyval-255)*79) >> 8); - seast_error[greyval] = (greyval < 128) ? ((greyval * 34) >> 8) - : (((greyval-255)*34) >> 8); - south_error[greyval] = (greyval < 128) ? ((greyval * 56) >> 8) - : (((greyval-255)*56) >> 8); - swest_error[greyval] = (greyval < 128) ? ((greyval * 12) >> 8) - : (((greyval-255)*12) >> 8); - } - } - } - if (fs_error == NULL) return; + memset (bw, 0, (npix+7)/8); /* Initialize with white */ - memset (bw, 0, (npix+7)/8); /* Initialize with white */ + greyptr = grey; + bwptr = bw; + mask = 0x80; + fse_inline = fs_error[0]; + for (x = 0, fse = fs_error; x < npix; x++, fse++) + { + greyval = limit[*(greyptr++) + fse_inline]; /* 0 <= greyval <= 255 */ + if (greyval < 128) *bwptr |= mask; /* Set a black pixel */ - greyptr = grey; - bwptr = bw; - mask = 0x80; - fse_inline = fs_error[0]; - for (x = 0, fse = fs_error; x < npix; x++, fse++) - { - greyval = limit[*(greyptr++) + fse_inline]; /* 0 <= greyval <= 255 */ - if (greyval < 128) *bwptr |= mask; /* Set a black pixel */ + /* Error distribution */ + fse_inline = east_error[greyval] + fse[1]; + fse[1] = seast_error[greyval]; + fse[0] += south_error[greyval]; + fse[-1] += swest_error[greyval]; - /* Error distribution */ - fse_inline = east_error[greyval] + fse[1]; - fse[1] = seast_error[greyval]; - fse[0] += south_error[greyval]; - fse[-1] += swest_error[greyval]; - - mask >>= 1; /* Get mask for next b/w-pixel */ - if (!mask) - { - mask = 0x80; - bwptr++; - } - } + mask >>= 1; /* Get mask for next b/w-pixel */ + if (!mask) + { + mask = 0x80; + bwptr++; + } + } } /* Write a device independant screen preview */ static void -save_ps_preview (FILE *ofp, - gint32 drawable_ID) +save_ps_preview (FILE *ofp, + gint32 drawable_ID) +{ + register guchar *bwptr, *greyptr; + GDrawableType drawable_type; + GDrawable *drawable; + GPixelRgn src_rgn; + int width, height, x, y, nbsl, out_count; + int nchar_pl = 72, src_y; + double f1, f2; + guchar *grey, *bw, *src_row, *src_ptr; + guchar *cmap; + gint ncols, cind; -{register unsigned char *bwptr, *greyptr; - GDrawableType drawable_type; - GDrawable *drawable; - GPixelRgn src_rgn; - int width, height, x, y, nbsl, out_count; - int nchar_pl = 72, src_y; - double f1, f2; - unsigned char *grey, *bw, *src_row, *src_ptr; - unsigned char *cmap; - gint ncols, cind; + if (psvals.preview_size <= 0) return; - if (psvals.preview_size <= 0) return; + drawable = gimp_drawable_get (drawable_ID); + drawable_type = gimp_drawable_type (drawable_ID); - drawable = gimp_drawable_get (drawable_ID); - drawable_type = gimp_drawable_type (drawable_ID); + /* Calculate size of preview */ + if ( (drawable->width <= psvals.preview_size) + && (drawable->height <= psvals.preview_size)) + { + width = drawable->width; + height = drawable->height; + } + else + { + f1 = (double)psvals.preview_size / (double)drawable->width; + f2 = (double)psvals.preview_size / (double)drawable->height; + if (f1 < f2) + { + width = psvals.preview_size; + height = drawable->height * f1; + if (height <= 0) height = 1; + } + else + { + height = psvals.preview_size; + width = drawable->width * f1; + if (width <= 0) width = 1; + } + } - /* Calculate size of preview */ - if ( (drawable->width <= psvals.preview_size) - && (drawable->height <= psvals.preview_size)) - { - width = drawable->width; - height = drawable->height; - } - else - { - f1 = (double)psvals.preview_size / (double)drawable->width; - f2 = (double)psvals.preview_size / (double)drawable->height; - if (f1 < f2) - { - width = psvals.preview_size; - height = drawable->height * f1; - if (height <= 0) height = 1; - } - else - { - height = psvals.preview_size; - width = drawable->width * f1; - if (width <= 0) width = 1; - } - } + nbsl = (width+7)/8; /* Number of bytes per scanline in bitmap */ - nbsl = (width+7)/8; /* Number of bytes per scanline in bitmap */ + grey = (guchar *)g_malloc (width); + bw = (guchar *)g_malloc (nbsl); + src_row = (guchar *)g_malloc (drawable->width * drawable->bpp); - grey = (unsigned char *)g_malloc (width); - bw = (unsigned char *)g_malloc (nbsl); - src_row = (unsigned char *)g_malloc (drawable->width * drawable->bpp); + fprintf (ofp, "%%%%BeginPreview: %d %d 1 %d\n", width, height, + ((nbsl*2+nchar_pl-1)/nchar_pl)*height); - fprintf (ofp, "%%%%BeginPreview: %d %d 1 %d\n", width, height, - ((nbsl*2+nchar_pl-1)/nchar_pl)*height); + gimp_pixel_rgn_init (&src_rgn, drawable, 0, 0, drawable->width, + drawable->height, FALSE, FALSE); - gimp_pixel_rgn_init (&src_rgn, drawable, 0, 0, drawable->width, - drawable->height, FALSE, FALSE); + cmap = NULL; /* Check if we need a colour table */ + if (gimp_drawable_type (drawable_ID) == INDEXED_IMAGE) + cmap = (guchar *) + gimp_image_get_cmap (gimp_drawable_image_id (drawable_ID), &ncols); - cmap = NULL; /* Check if we need a colour table */ - if (gimp_drawable_type (drawable_ID) == INDEXED_IMAGE) - cmap = (unsigned char *) - gimp_image_get_cmap (gimp_drawable_image_id (drawable_ID), &ncols); + for (y = 0; y < height; y++) + { + /* Get a scanline from the input image and scale it to the desired width */ + src_y = (y * drawable->height) / height; + gimp_pixel_rgn_get_row (&src_rgn, src_row, 0, src_y, drawable->width); - for (y = 0; y < height; y++) - { - /* Get a scanline from the input image and scale it to the desired width */ - src_y = (y * drawable->height) / height; - gimp_pixel_rgn_get_row (&src_rgn, src_row, 0, src_y, drawable->width); + greyptr = grey; + if (drawable->bpp == 3) /* RGB-image */ + { + for (x = 0; x < width; x++) + { /* Convert to grey */ + src_ptr = src_row + ((x * drawable->width) / width) * 3; + *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; + } + } + else if (cmap) /* Indexed image */ + { + for (x = 0; x < width; x++) + { + src_ptr = src_row + ((x * drawable->width) / width); + cind = *src_ptr; /* Get colour index and convert to grey */ + src_ptr = (cind >= ncols) ? cmap : (cmap + 3*cind); + *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; + } + } + else /* Grey image */ + { + for (x = 0; x < width; x++) + *(greyptr++) = *(src_row + ((x * drawable->width) / width)); + } - greyptr = grey; - if (drawable->bpp == 3) /* RGB-image */ - { - for (x = 0; x < width; x++) - { /* Convert to grey */ - src_ptr = src_row + ((x * drawable->width) / width) * 3; - *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; - } - } - else if (cmap) /* Indexed image */ - { - for (x = 0; x < width; x++) - { - src_ptr = src_row + ((x * drawable->width) / width); - cind = *src_ptr; /* Get colour index and convert to grey */ - src_ptr = (cind >= ncols) ? cmap : (cmap + 3*cind); - *(greyptr++) = (3*src_ptr[0] + 6*src_ptr[1] + src_ptr[2]) / 10; - } - } - else /* Grey image */ - { - for (x = 0; x < width; x++) - *(greyptr++) = *(src_row + ((x * drawable->width) / width)); - } + /* Now we have a greyscale line for the desired width. */ + /* Dither it to b/w */ + dither_grey (grey, bw, width, y); - /* Now we have a greyscale line for the desired width. */ - /* Dither it to b/w */ - dither_grey (grey, bw, width, y); + /* Write out the b/w line */ + out_count = 0; + bwptr = bw; + for (x = 0; x < nbsl; x++) + { + if (out_count == 0) fprintf (ofp, "%% "); + fprintf (ofp, "%02x", *(bwptr++)); + out_count += 2; + if (out_count >= nchar_pl) + { + fprintf (ofp, "\n"); + out_count = 0; + } + } + if (out_count != 0) + fprintf (ofp, "\n"); - /* Write out the b/w line */ - out_count = 0; - bwptr = bw; - for (x = 0; x < nbsl; x++) - { - if (out_count == 0) fprintf (ofp, "%% "); - fprintf (ofp, "%02x", *(bwptr++)); - out_count += 2; - if (out_count >= nchar_pl) - { - fprintf (ofp, "\n"); - out_count = 0; - } - } - if (out_count != 0) - fprintf (ofp, "\n"); + if ((l_run_mode != RUN_NONINTERACTIVE) && ((y % 20) == 0)) + gimp_progress_update ((double)(y) / (double)height); + } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((y % 20) == 0)) - gimp_progress_update ((double)(y) / (double)height); - } + fprintf (ofp, "%%%%EndPreview\n"); - fprintf (ofp, "%%%%EndPreview\n"); + dither_grey (grey, bw, width, -1); + g_free (src_row); + g_free (bw); + g_free (grey); - dither_grey (grey, bw, width, -1); - g_free (src_row); - g_free (bw); - g_free (grey); - - gimp_drawable_detach (drawable); + gimp_drawable_detach (drawable); } static gint -save_gray (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j; +save_gray (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j; int tile_height; unsigned char *data, *src; GPixelRgn pixel_rgn; @@ -1850,7 +1854,7 @@ save_gray (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); /* Set up transformation in PostScript */ save_ps_setup (ofp, drawable_ID, width, height, 1*8); @@ -1874,26 +1878,26 @@ save_gray (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_GRAY_TILE (data); /* Get more data */ - if (!level2) { - for (j = 0; j < width; j++) - { - putc (hex[(*src) >> 4], ofp); - putc (hex[(*(src++)) & 0x0f], ofp); - if (((j+1) % 39) == 0) putc ('\n', ofp); - } - putc ('\n', ofp); + if ((i % tile_height) == 0) GET_GRAY_TILE (data); /* Get more data */ + if (!level2) + { + for (j = 0; j < width; j++) + { + putc (hex[(*src) >> 4], ofp); + putc (hex[(*(src++)) & 0x0f], ofp); + if (((j+1) % 39) == 0) putc ('\n', ofp); + } + putc ('\n', ofp); + } + else + { + for (j = 0; j < width; j++) + ascii85_out (*(src++), ofp); + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - else - { - for (j = 0; j < width; j++) - ascii85_out (*(src++), ofp); - } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); g_free (data); @@ -1901,27 +1905,27 @@ save_gray (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_GRAY_TILE } static gint -save_bw (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j; +save_bw (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j; int ncols, nbsl, nwrite; int tile_height; - unsigned char *cmap, *ct; - unsigned char *data, *src; - unsigned char *scanline, *dst, mask; - unsigned char *hex_scanline; + guchar *cmap, *ct; + guchar *data, *src; + guchar *scanline, *dst, mask; + guchar *hex_scanline; GPixelRgn pixel_rgn; GDrawable *drawable; GDrawableType drawable_type; @@ -1938,7 +1942,7 @@ save_bw (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); nbsl = (width+7)/8; scanline = (char *)g_malloc (nbsl + 1); hex_scanline = (char *)g_malloc ((nbsl + 1)*2); @@ -1965,48 +1969,48 @@ save_bw (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_BW_TILE (data); /* Get more data */ - dst = scanline; - memset (dst, 0, nbsl); - mask = 0x80; - /* Build a bitmap for a scanline */ - for (j = 0; j < width; j++) - { - ct = cmap + *(src++)*3; - if (ct[0] || ct[1] || ct[2]) - *dst |= mask; - if (mask == 0x01) { mask = 0x80; dst++; } else mask >>= 1; - } - if (!level2) - { - /* Convert to hexstring */ - for (j = 0; j < nbsl; j++) - { - hex_scanline[j*2] = (unsigned char)hex[scanline[j] >> 4]; - hex_scanline[j*2+1] = (unsigned char)hex[scanline[j] & 0x0f]; - } - /* Write out hexstring */ - j = nbsl * 2; - dst = hex_scanline; - while (j > 0) - { - nwrite = (j > 78) ? 78 : j; - fwrite (dst, nwrite, 1, ofp); - putc ('\n', ofp); - j -= nwrite; - dst += nwrite; - } - } - else { + if ((i % tile_height) == 0) GET_BW_TILE (data); /* Get more data */ dst = scanline; - for (j = 0; j < nbsl; j++) - ascii85_out (*(dst++), ofp); + memset (dst, 0, nbsl); + mask = 0x80; + /* Build a bitmap for a scanline */ + for (j = 0; j < width; j++) + { + ct = cmap + *(src++)*3; + if (ct[0] || ct[1] || ct[2]) + *dst |= mask; + if (mask == 0x01) { mask = 0x80; dst++; } else mask >>= 1; + } + if (!level2) + { + /* Convert to hexstring */ + for (j = 0; j < nbsl; j++) + { + hex_scanline[j*2] = (unsigned char)hex[scanline[j] >> 4]; + hex_scanline[j*2+1] = (unsigned char)hex[scanline[j] & 0x0f]; + } + /* Write out hexstring */ + j = nbsl * 2; + dst = hex_scanline; + while (j > 0) + { + nwrite = (j > 78) ? 78 : j; + fwrite (dst, nwrite, 1, ofp); + putc ('\n', ofp); + j -= nwrite; + dst += nwrite; + } + } + else + { + dst = scanline; + for (j = 0; j < nbsl; j++) + ascii85_out (*(dst++), ofp); + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); @@ -2017,21 +2021,21 @@ save_bw (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_BW_TILE } static gint -save_index (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j; +save_index (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j; int ncols, bw; int tile_height; unsigned char *cmap, *cmap_start; @@ -2049,24 +2053,24 @@ save_index (FILE *ofp, ct = coltab; bw = 1; for (j = 0; j < 256; j++) - { - if (j >= ncols) { - memcpy (ct, background, 6); - ct += 6; - } - else - { - bw &= ((cmap[0] == 0) && (cmap[1] == 0) && (cmap[2] == 0)) + if (j >= ncols) + { + memcpy (ct, background, 6); + ct += 6; + } + else + { + bw &= ((cmap[0] == 0) && (cmap[1] == 0) && (cmap[2] == 0)) || ((cmap[0] == 255) && (cmap[1] == 255) && (cmap[2] == 255)); - *(ct++) = (unsigned char)hex[(*cmap) >> 4]; - *(ct++) = (unsigned char)hex[(*(cmap++)) & 0x0f]; - *(ct++) = (unsigned char)hex[(*cmap) >> 4]; - *(ct++) = (unsigned char)hex[(*(cmap++)) & 0x0f]; - *(ct++) = (unsigned char)hex[(*cmap) >> 4]; - *(ct++) = (unsigned char)hex[(*(cmap++)) & 0x0f]; + *(ct++) = (guchar)hex[(*cmap) >> 4]; + *(ct++) = (guchar)hex[(*(cmap++)) & 0x0f]; + *(ct++) = (guchar)hex[(*cmap) >> 4]; + *(ct++) = (guchar)hex[(*(cmap++)) & 0x0f]; + *(ct++) = (guchar)hex[(*cmap) >> 4]; + *(ct++) = (guchar)hex[(*(cmap++)) & 0x0f]; + } } - } if (bw) return (save_bw (ofp, image_ID, drawable_ID)); drawable = gimp_drawable_get (drawable_ID); @@ -2077,7 +2081,7 @@ save_index (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); /* Set up transformation in PostScript */ save_ps_setup (ofp, drawable_ID, width, height, 3*8); @@ -2101,30 +2105,30 @@ save_index (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_INDEX_TILE (data); /* Get more data */ - if (!level2) { - for (j = 0; j < width; j++) - { - fwrite (coltab+(*(src++))*6, 6, 1, ofp); - if (((j+1) % 13) == 0) putc ('\n', ofp); - } - putc ('\n', ofp); + if ((i % tile_height) == 0) GET_INDEX_TILE (data); /* Get more data */ + if (!level2) + { + for (j = 0; j < width; j++) + { + fwrite (coltab+(*(src++))*6, 6, 1, ofp); + if (((j+1) % 13) == 0) putc ('\n', ofp); + } + putc ('\n', ofp); + } + else + { + for (j = 0; j < width; j++) + { + cmap = cmap_start + 3 * (*(src++)); + ascii85_out (*(cmap++), ofp); + ascii85_out (*(cmap++), ofp); + ascii85_out (*(cmap++), ofp); + } + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - else - { - for (j = 0; j < width; j++) - { - cmap = cmap_start + 3 * (*(src++)); - ascii85_out (*(cmap++), ofp); - ascii85_out (*(cmap++), ofp); - ascii85_out (*(cmap++), ofp); - } - } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); @@ -2133,24 +2137,23 @@ save_index (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_INDEX_TILE } static gint -save_rgb (FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - +save_rgb (FILE *ofp, + gint32 image_ID, + gint32 drawable_ID) { int height, width, tile_height; int i, j; - unsigned char *data, *src; + guchar *data, *src; GPixelRgn pixel_rgn; GDrawable *drawable; GDrawableType drawable_type; @@ -2165,7 +2168,7 @@ save_rgb (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *)g_malloc (tile_height * width * drawable->bpp); /* Set up transformation in PostScript */ save_ps_setup (ofp, drawable_ID, width, height, 3*8); @@ -2189,34 +2192,34 @@ save_rgb (FILE *ofp, src = begin; } for (i = 0; i < height; i++) - { - if ((i % tile_height) == 0) GET_RGB_TILE (data); /* Get more data */ - if (!level2) { - for (j = 0; j < width; j++) - { - putc (hex[(*src) >> 4], ofp); /* Red */ - putc (hex[(*(src++)) & 0x0f], ofp); - putc (hex[(*src) >> 4], ofp); /* Green */ - putc (hex[(*(src++)) & 0x0f], ofp); - putc (hex[(*src) >> 4], ofp); /* Blue */ - putc (hex[(*(src++)) & 0x0f], ofp); - if (((j+1) % 13) == 0) putc ('\n', ofp); - } - putc ('\n', ofp); + if ((i % tile_height) == 0) GET_RGB_TILE (data); /* Get more data */ + if (!level2) + { + for (j = 0; j < width; j++) + { + putc (hex[(*src) >> 4], ofp); /* Red */ + putc (hex[(*(src++)) & 0x0f], ofp); + putc (hex[(*src) >> 4], ofp); /* Green */ + putc (hex[(*(src++)) & 0x0f], ofp); + putc (hex[(*src) >> 4], ofp); /* Blue */ + putc (hex[(*(src++)) & 0x0f], ofp); + if (((j+1) % 13) == 0) putc ('\n', ofp); + } + putc ('\n', ofp); + } + else + { + for (j = 0; j < width; j++) + { + ascii85_out (*(src++), ofp); + ascii85_out (*(src++), ofp); + ascii85_out (*(src++), ofp); + } + } + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) i / (double) height); } - else - { - for (j = 0; j < width; j++) - { - ascii85_out (*(src++), ofp); - ascii85_out (*(src++), ofp); - ascii85_out (*(src++), ofp); - } - } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double) i / (double) height); - } if (level2) ascii85_done (ofp); fprintf (ofp, "showpage\n"); g_free (data); @@ -2224,22 +2227,22 @@ save_rgb (FILE *ofp, gimp_drawable_detach (drawable); if (ferror (ofp)) - { - g_message (_("write error occured")); - return (FALSE); - } + { + g_message (_("write error occured")); + return (FALSE); + } return (TRUE); #undef GET_RGB_TILE } -static void -init_gtk () +static void +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("ps"); gtk_init (&argc, &argv); @@ -2250,49 +2253,39 @@ init_gtk () static gint load_dialog (void) - { - LoadDialogVals *vals; - GtkWidget *toggle; - GtkWidget *frame; + GtkWidget *dialog; GtkWidget *main_vbox; - GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *label; + GtkWidget *frame; + GtkWidget *vbox; GtkWidget *table; - GSList *group; - gchar buffer[STR_LENGTH]; - gint j, n_prop, alias, *alpha_bits; - - static char *label_text[] = - { N_("Resolution:"), N_("Width:"), N_("Height:"), N_("Pages:") }; - static char *radio_text[] = - { N_("B/W"), N_("Gray"), N_("Color"), N_("Automatic") }; - static char *alias_text[] = - { N_("None"), N_("Weak"), N_("Strong") }; + GtkWidget *spinbutton; + GtkObject *adj; + GtkWidget *pages_entry; + GtkWidget *toggle; init_gtk (); - vals = g_malloc (sizeof (*vals)); - vals->dialog = gimp_dialog_new (_("Load PostScript"), "ps", - gimp_plugin_help_func, "filters/ps.html", - GTK_WIN_POS_MOUSE, - FALSE, TRUE, FALSE, + dialog = gimp_dialog_new (_("Load PostScript"), "ps", + gimp_plugin_help_func, "filters/ps.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, - _("OK"), load_ok_callback, - vals, NULL, NULL, TRUE, FALSE, - _("Cancel"), gtk_widget_destroy, - NULL, 1, NULL, FALSE, TRUE, + _("OK"), load_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, - NULL); + NULL); - gtk_signal_connect (GTK_OBJECT (vals->dialog), "destroy", + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); main_vbox = gtk_vbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (vals->dialog)->vbox), main_vbox, + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), main_vbox, FALSE, FALSE, 0); gtk_widget_show (main_vbox); @@ -2310,125 +2303,108 @@ load_dialog (void) gtk_container_add (GTK_CONTAINER (frame), vbox); /* Resolution/Width/Height/Pages labels */ - n_prop = sizeof (label_text) / sizeof (label_text[0]); - table = gtk_table_new (n_prop, 2, FALSE); + table = gtk_table_new (4, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); - for (j = 0; j < n_prop; j++) - { - label = gtk_label_new (gettext(label_text[j])); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, j, j+1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - } + spinbutton = gimp_spin_button_new (&adj, plvals.resolution, + 5, 1440, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Resolution:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &plvals.resolution); - /* Resolution/Width/Height/Pages Entries */ - for (j = 0; j < n_prop; j++) - { - vals->entry[j] = gtk_entry_new (); - gtk_widget_set_usize (vals->entry[j], 80, 0); - if (j == 0) - g_snprintf (buffer, sizeof (buffer), "%d", (int)plvals.resolution); - else if (j == 1) - g_snprintf (buffer, sizeof (buffer), "%d", (int)plvals.width); - else if (j == 2) - g_snprintf (buffer, sizeof (buffer), "%d", (int)plvals.height); - else if (j == 3) - strcpy (buffer, plvals.pages); - gtk_entry_set_text (GTK_ENTRY (vals->entry[j]), buffer); - gtk_table_attach (GTK_TABLE (table), vals->entry[j], 1, 2, j, j+1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (vals->entry[j]); - } + spinbutton = gimp_spin_button_new (&adj, plvals.width, + 1, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Width:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &plvals.width); + + spinbutton = gimp_spin_button_new (&adj, plvals.height, + 1, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Height:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &plvals.height); + + pages_entry = gtk_entry_new (); + gtk_widget_set_usize (pages_entry, 80, 0); + gtk_entry_set_text (GTK_ENTRY (pages_entry), plvals.pages); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Pages:"), 1.0, 0.5, + pages_entry, TRUE); + gtk_signal_connect (GTK_OBJECT (pages_entry), "changed", + GTK_SIGNAL_FUNC (load_pages_entry_callback), + NULL); toggle = gtk_check_button_new_with_label (_("Try Bounding Box")); - gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->use_bbox = (plvals.use_bbox != 0); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) load_toggle_update, - &(vals->use_bbox)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->use_bbox); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &plvals.use_bbox); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), plvals.use_bbox); gtk_widget_show (toggle); gtk_widget_show (vbox); gtk_widget_show (frame); /* Colouring */ - frame = gtk_frame_new (_("Colouring")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + frame = gimp_radio_group_new2 (TRUE, _("Coloring"), + gimp_radio_button_update, + &plvals.pnm_type, (gpointer) plvals.pnm_type, + + _("B/W"), (gpointer) 4, NULL, + _("Gray"), (gpointer) 5, NULL, + _("Color"), (gpointer) 6, NULL, + _("Automatic"), (gpointer) 7, NULL, + + NULL); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); - - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), vbox); - - group = NULL; - for (j = 0; j < 4; j++) - { - toggle = gtk_radio_button_new_with_label (group, gettext (radio_text[j])); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - vals->dataformat[j] = (plvals.pnm_type == j+4); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) load_toggle_update, - &(vals->dataformat[j])); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - vals->dataformat[j]); - gtk_widget_show (toggle); - } - - gtk_widget_show (vbox); gtk_widget_show (frame); hbox = gtk_hbox_new (TRUE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); - for (alias = 0; alias < 2; alias++) - { - alpha_bits = alias ? &(vals->graphicsalphabits[0]) - : &(vals->textalphabits[0]); - frame = gtk_frame_new (alias ? _("Graphic Antialiasing") - : _("Text Antialiasing")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); + frame = gimp_radio_group_new2 (TRUE, _("Text Antialiasing"), + gimp_radio_button_update, + &plvals.textalpha, (gpointer) plvals.textalpha, - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), vbox); + _("None"), (gpointer) 1, NULL, + _("Weak"), (gpointer) 2, NULL, + _("Strong"), (gpointer) 4, NULL, - group = NULL; - for (j = 0; j < 3; j++) - { - toggle = gtk_radio_button_new_with_label (group, - gettext (alias_text[j])); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - alpha_bits[j] = alias ? (plvals.graphicsalpha == (1 << j)) - : (plvals.textalpha == (1 << j)); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) load_toggle_update, - alpha_bits+j); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - alpha_bits[j]); - gtk_widget_show (toggle); - } + NULL); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); - gtk_widget_show (vbox); - gtk_widget_show (frame); - } + frame = gimp_radio_group_new2 (TRUE, _("Graphic Antialiasing"), + gimp_radio_button_update, + &plvals.graphicsalpha, + (gpointer) plvals.graphicsalpha, - gtk_widget_show (vals->dialog); + _("None"), (gpointer) 1, NULL, + _("Weak"), (gpointer) 2, NULL, + _("Strong"), (gpointer) 4, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); + + gtk_widget_show (dialog); gtk_main (); gdk_flush (); - g_free (vals); - return plint.run; } @@ -2436,110 +2412,62 @@ load_dialog (void) static void load_ok_callback (GtkWidget *widget, gpointer data) - -{LoadDialogVals *vals = (LoadDialogVals *)data; - int nelem; - - /* Read resolution */ - plvals.resolution = atoi (gtk_entry_get_text (GTK_ENTRY (vals->entry[0]))); - - /* Read width */ - plvals.width = atoi (gtk_entry_get_text (GTK_ENTRY (vals->entry[1]))); - - /* Read height */ - plvals.height = atoi (gtk_entry_get_text (GTK_ENTRY (vals->entry[2]))); - - /* Read Pages */ - nelem = sizeof (plvals.pages); - strncpy (plvals.pages, gtk_entry_get_text(GTK_ENTRY (vals->entry[3])),nelem); - plvals.pages[nelem-1] = '\0'; - - /* Read try BoundingBox */ - plvals.use_bbox = (vals->use_bbox != 0); - - /* Read colouring */ - if (vals->dataformat[0] == 1) plvals.pnm_type = 4; - else if (vals->dataformat[1] == 1) plvals.pnm_type = 5; - else if (vals->dataformat[3] == 1) plvals.pnm_type = 7; - else plvals.pnm_type = 6; - - /* Read TextAlphaBits */ - if (vals->textalphabits[0] == 1) plvals.textalpha = 1; - else if (vals->textalphabits[1] == 1) plvals.textalpha = 2; - else if (vals->textalphabits[2] == 1) plvals.textalpha = 4; - else plvals.textalpha = 1; - - /* Read GraphicsAlphaBits */ - if (vals->graphicsalphabits[0] == 1) plvals.graphicsalpha = 1; - else if (vals->graphicsalphabits[1] == 1) plvals.graphicsalpha = 2; - else if (vals->graphicsalphabits[2] == 1) plvals.graphicsalpha = 4; - else plvals.graphicsalpha = 1; - +{ plint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (vals->dialog)); -} + gtk_widget_destroy (GTK_WIDGET (data)); +} static void -load_toggle_update (GtkWidget *widget, - gpointer data) - +load_pages_entry_callback (GtkWidget *widget, + gpointer data) { - int *toggle_val; + gint nelem = sizeof (plvals.pages); - toggle_val = (int *) data; - - *toggle_val = ((GTK_TOGGLE_BUTTON (widget)->active) != 0); + strncpy (plvals.pages, gtk_entry_get_text (GTK_ENTRY (widget)), nelem); + plvals.pages[nelem-1] = '\0'; } - /* Save interface functions */ static gint save_dialog (void) - { SaveDialogVals *vals; + GtkWidget *dialog; GtkWidget *toggle; GtkWidget *frame, *uframe; - GtkWidget *hbox, *vbox, *uvbox; + GtkWidget *hbox, *vbox; GtkWidget *main_vbox[2]; - GtkWidget *label; GtkWidget *table; - GSList *group; - gchar tmp[80]; - gint j, idata; - gdouble rdata; + GtkWidget *spinbutton; + GtkObject *adj; + gint j; - static gchar *label_text[] = - { N_("Width:"), N_("Height:"), N_("X-offset:"), N_("Y-offset:") }; - static gchar *radio_text[] = - { N_("0"), N_("90"), N_("180"), N_("270") }; - static gchar *unit_text[] = - { N_("Inch"), N_("Millimeter") }; + vals = g_new (SaveDialogVals, 1); - vals = g_malloc (sizeof (*vals)); + vals->level = (psvals.level > 1); - vals->dialog = gimp_dialog_new (_("Save as PostScript"), "ps", - gimp_plugin_help_func, "filters/ps.html", - GTK_WIN_POS_MOUSE, - FALSE, TRUE, FALSE, + dialog = gimp_dialog_new (_("Save as PostScript"), "ps", + gimp_plugin_help_func, "filters/ps.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, - _("OK"), save_ok_callback, - vals, NULL, NULL, TRUE, FALSE, - _("Cancel"), gtk_widget_destroy, - NULL, 1, NULL, FALSE, TRUE, + _("OK"), save_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, - NULL); + NULL); - gtk_signal_connect (GTK_OBJECT (vals->dialog), "destroy", + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit), NULL); /* Main hbox */ hbox = gtk_hbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (vals->dialog)->vbox), hbox, + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 0); main_vbox[0] = main_vbox[1] = NULL; @@ -2553,6 +2481,7 @@ save_dialog (void) frame = gtk_frame_new (_("Image Size")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (main_vbox[0]), frame, FALSE, FALSE, 0); + vbox = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); gtk_container_add (GTK_CONTAINER (frame), vbox); @@ -2561,97 +2490,80 @@ save_dialog (void) table = gtk_table_new (4, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); - for (j = 0; j < 4; j++) - { - label = gtk_label_new (gettext (label_text[j])); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, j, j+1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - } + spinbutton = gimp_spin_button_new (&vals->adjustment[0], psvals.width, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Width:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[0]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.width); - /* Width/Height/X-off/Y-off Entries */ - for (j = 0; j < 4; j++) - { - vals->entry[j] = gtk_entry_new (); - gtk_widget_set_usize (vals->entry[j], 50, 0); - if (j == 0) rdata = psvals.width; - else if (j == 1) rdata = psvals.height; - else if (j == 2) rdata = psvals.x_offset; - else rdata = psvals.y_offset; - gtk_entry_set_text (GTK_ENTRY (vals->entry[j]), ftoa ("%-8.2f", rdata)); - gtk_table_attach (GTK_TABLE (table), vals->entry[j], 1, 2, j, j+1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (vals->entry[j]); - } + spinbutton = gimp_spin_button_new (&vals->adjustment[1], psvals.height, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Height:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[1]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.height); + + spinbutton = gimp_spin_button_new (&vals->adjustment[2], psvals.x_offset, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("X-Offset:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[2]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.x_offset); + + spinbutton = gimp_spin_button_new (&vals->adjustment[3], psvals.y_offset, + 1e-5, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 3, + _("Y-Offset:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (vals->adjustment[3]), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &psvals.y_offset); toggle = gtk_check_button_new_with_label (_("Keep Aspect Ratio")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->keep_ratio = (psvals.keep_ratio != 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->keep_ratio)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->keep_ratio); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &psvals.keep_ratio); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), psvals.keep_ratio); gtk_widget_show (toggle); /* Unit */ - uframe = gtk_frame_new (_("Unit")); - gtk_frame_set_shadow_type (GTK_FRAME (uframe), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (vbox), uframe, FALSE, FALSE, 0); - uvbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (uvbox), 4); - gtk_container_add (GTK_CONTAINER (uframe), uvbox); + uframe = gimp_radio_group_new2 (TRUE, _("Unit"), + save_unit_toggle_update, + vals, (gpointer) psvals.unit_mm, - group = NULL; - for (j = 0; j < 2; j++) - { - toggle = gtk_radio_button_new_with_label (group, gettext (unit_text[j])); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (uvbox), toggle, FALSE, FALSE, 0); - vals->unit[j] = (psvals.unit_mm == j); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (j == 0) ? (GtkSignalFunc) save_toggle_update : - (GtkSignalFunc) save_mm_toggle_update, - (j == 0) ? (gpointer)(&(vals->unit[j])) : - (gpointer)vals); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - vals->unit[j]); - gtk_widget_show (toggle); - } - gtk_widget_show (uvbox); + _("Inch"), (gpointer) FALSE, NULL, + _("Millimeter"), (gpointer) TRUE, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (vbox), uframe, FALSE, FALSE, 0); gtk_widget_show (uframe); gtk_widget_show (vbox); gtk_widget_show (frame); /* Rotation */ - frame = gtk_frame_new (_("Rotation")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (main_vbox[1]), frame, TRUE, TRUE, 0); + frame = gimp_radio_group_new2 (TRUE, _("Rotation"), + gimp_radio_button_update, + &psvals.rotate, (gpointer) psvals.rotate, - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), vbox); + "0", (gpointer) 0, NULL, + "90", (gpointer) 90, NULL, + "180", (gpointer) 180, NULL, + "270", (gpointer) 270, NULL, - group = NULL; - for (j = 0; j < 4; j++) - { - toggle = gtk_radio_button_new_with_label (group, radio_text[j]); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - vals->rot[j] = (psvals.rotate == j*90); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->rot[j])); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - vals->rot[j]); - gtk_widget_show (toggle); - } - - gtk_widget_show (vbox); + NULL); + gtk_box_pack_start (GTK_BOX (main_vbox[1]), frame, FALSE, FALSE, 0); gtk_widget_show (frame); /* Format */ @@ -2665,165 +2577,102 @@ save_dialog (void) toggle = gtk_check_button_new_with_label (_("PostScript Level 2")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->level = (psvals.level > 1); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &(vals->level)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->level); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label (_("Encapsulated PostScript")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->eps = (psvals.eps != 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->eps)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->eps); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &psvals.eps); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), psvals.eps); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label (_("Preview")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); - vals->preview = psvals.preview; gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &(vals->preview)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), vals->preview); + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &psvals.preview); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), psvals.preview); gtk_widget_show (toggle); /* Preview size label/entry */ table = gtk_table_new (1, 2, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); - j = 0; - label = gtk_label_new (_("Preview Size:")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, j, j+1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); + gtk_object_set_data (GTK_OBJECT (toggle), "set_sensitive", table); + gtk_widget_set_sensitive (table, psvals.preview); - /* Entry */ - j= 0; - vals->psize_entry = gtk_entry_new (); - gtk_widget_set_usize (vals->psize_entry, 50, 0); - idata = psvals.preview_size; - if (idata < 0) idata = 0; - g_snprintf (tmp, sizeof (tmp), "%d", idata); - gtk_entry_set_text (GTK_ENTRY (vals->psize_entry), tmp); - gtk_table_attach (GTK_TABLE (table), vals->psize_entry, 1, 2, j, j+1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (vals->psize_entry); + spinbutton = gimp_spin_button_new (&adj, psvals.preview_size, + 0, 1024, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Preview Size:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &psvals.preview_size); + gtk_widget_show (spinbutton); gtk_widget_show (vbox); gtk_widget_show (frame); for (j = 0; j < sizeof (main_vbox) / sizeof (main_vbox[0]); j++) gtk_widget_show (main_vbox[j]); + gtk_widget_show (hbox); - gtk_widget_show (vals->dialog); + gtk_widget_show (dialog); gtk_main (); gdk_flush (); + psvals.level = (vals->level < 1); + g_free (vals); return psint.run; } - static void save_ok_callback (GtkWidget *widget, gpointer data) - -{SaveDialogVals *vals = (SaveDialogVals *)data; - double r; - int k, ival; - - /* Read width */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[0])), "%lf", &r); - if (k == 1) psvals.width = r; - - /* Read height */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[1])), "%lf", &r); - if (k == 1) psvals.height = r; - - /* Read x-offset */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[2])), "%lf", &r); - if (k == 1) psvals.x_offset = r; - - /* Read y-offset */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[3])), "%lf", &r); - if (k == 1) psvals.y_offset = r; - - /* Read keep aspect ratio */ - psvals.keep_ratio = (vals->keep_ratio != 0); - - /* Read unit */ - if (vals->unit[0] == 1) psvals.unit_mm = 0; - else psvals.unit_mm = 1; - - /* Read rotation */ - if (vals->rot[1] == 1) psvals.rotate = 90; - else if (vals->rot[2] == 1) psvals.rotate = 180; - else if (vals->rot[3] == 1) psvals.rotate = 270; - else psvals.rotate = 0; - - /* Read PostScript level 2 flag */ - psvals.level = vals->level ? 2 : 1; - - /* Read EPS flag */ - psvals.eps = (vals->eps != 0); - - /* Read Preview flag */ - psvals.preview = (vals->preview != 0); - - /* Read preview size */ - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->psize_entry)), "%d", &ival); - if (k == 1) psvals.preview_size = ival; - - psint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (vals->dialog)); -} - - -static void -save_toggle_update (GtkWidget *widget, - gpointer data) - { - int *toggle_val; + psint.run = TRUE; - toggle_val = (int *) data; - - *toggle_val = ((GTK_TOGGLE_BUTTON (widget)->active) != 0); + gtk_widget_destroy (GTK_WIDGET (data)); } - static void -save_mm_toggle_update (GtkWidget *widget, - gpointer data) - -{ double factor = 0.0, r; - SaveDialogVals *vals = (SaveDialogVals *)data; - int newval, oldval = vals->unit[1]; - int mm_to_inch, inch_to_mm, j, k; - - newval = vals->unit[1] = ((GTK_TOGGLE_BUTTON (widget)->active) != 0); - mm_to_inch = (oldval == 1) && (newval == 0); - inch_to_mm = (oldval == 0) && (newval == 1); - if (mm_to_inch) factor = 1.0 / 25.4; - else if (inch_to_mm) factor = 25.4; - if (factor != 0.0) - { - for (j = 0; j < 4; j++) +save_unit_toggle_update (GtkWidget *widget, + gpointer data) +{ + if (GTK_TOGGLE_BUTTON (widget)->active) { - k = sscanf (gtk_entry_get_text (GTK_ENTRY (vals->entry[j])), "%lf", &r); - if (k == 1) - { - gtk_entry_set_text (GTK_ENTRY(vals->entry[j]),ftoa("%-8.2f",r*factor)); - gtk_widget_show (vals->entry[j]); - } + SaveDialogVals *vals; + gdouble factor; + gdouble value; + gint unit_mm; + gint i; + + vals = (SaveDialogVals *) data; + unit_mm = (gint) gtk_object_get_user_data (GTK_OBJECT (widget)); + + psvals.unit_mm = unit_mm; + + if (unit_mm) + factor = 25.4; + else + factor = 1.0 / 25.4; + + for (i = 0; i < 4; i++) + { + value = GTK_ADJUSTMENT (vals->adjustment[i])->value * factor; + + gtk_adjustment_set_value (GTK_ADJUSTMENT (vals->adjustment[i]), value); + } } - } } diff --git a/plug-ins/common/psp.c b/plug-ins/common/psp.c index 2ef68e137d..3734f8f08a 100644 --- a/plug-ins/common/psp.c +++ b/plug-ins/common/psp.c @@ -286,13 +286,13 @@ typedef struct /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); @@ -300,10 +300,10 @@ static gint save_image (char *filename, */ GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; /* Save info */ @@ -324,7 +324,7 @@ static PSPSaveVals psvals = static PSPSaveInterface psint = { - FALSE /* run */ + FALSE /* run */ }; static guint16 major, minor; @@ -333,7 +333,7 @@ static guint tile_height; MAIN() static void -query () +query (void) { static GParamDef load_args[] = { @@ -345,8 +345,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); /* static GParamDef save_args[] = */ /* { */ @@ -358,7 +359,7 @@ query () /* { PARAM_INT32, "compression", "Specify 0 for no compression, " */ /* "1 for RLE, and 2 for LZ77" } */ /* }; */ -/* static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); */ +/* static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); */ INIT_I18N(); @@ -394,27 +395,17 @@ query () save_args, NULL); */ - gimp_register_magic_load_handler ("file_psp_load", "psp,tub", "", + gimp_register_magic_load_handler ("file_psp_load", + "psp,tub", + "", "0,string,Paint Shop Pro Image File\n\032"); /* Removed until Saving is implemented -- njl195@zepler.org - gimp_register_save_handler ("file_psp_save", "psp,tub", ""); + gimp_register_save_handler ("file_psp_save", + "psp,tub", + ""); */ } -static void -save_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - static void save_ok_callback (GtkWidget *widget, gpointer data) @@ -428,10 +419,10 @@ static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("psp"); gtk_init (&argc, &argv); @@ -442,13 +433,7 @@ static gint save_dialog (void) { GtkWidget *dlg; - GtkWidget *toggle; GtkWidget *frame; - GtkWidget *toggle_vbox; - GSList *group; - gint use_none = (psvals.compression == PSP_COMP_NONE); - gint use_rle = (psvals.compression == PSP_COMP_RLE); - gint use_lz77 = (psvals.compression == PSP_COMP_LZ77); dlg = gimp_dialog_new (_("Save as PSP"), "psp", gimp_plugin_help_func, "filters/psp.html", @@ -467,43 +452,18 @@ save_dialog (void) NULL); /* file save type */ - frame = gtk_frame_new (_("Data Compression")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + frame = gimp_radio_group_new2 (TRUE, _("Data Compression"), + gimp_radio_button_update, + &psvals.compression, + (gpointer) psvals.compression, + + _("None"), (gpointer) PSP_COMP_NONE, NULL, + _("RLE"), (gpointer) PSP_COMP_RLE, NULL, + _("LZ77"), (gpointer) PSP_COMP_LZ77, NULL, + + NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - group = NULL; - toggle = gtk_radio_button_new_with_label (group, _("None")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_none); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_none); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("RLE")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_rle); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_rle); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("LZ77")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_lz77); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_lz77); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); gtk_widget_show (frame); gtk_widget_show (dlg); @@ -511,21 +471,13 @@ save_dialog (void) gtk_main (); gdk_flush (); - if (use_none) - psvals.compression = PSP_COMP_NONE; - else if (use_rle) - psvals.compression = PSP_COMP_RLE; - else - psvals.compression = PSP_COMP_LZ77; - return psint.run; } - -static char * -block_name (int id) +static gchar * +block_name (gint id) { - static char *block_names[] = + static gchar *block_names[] = { "IMAGE", "CREATOR", @@ -551,8 +503,8 @@ block_name (int id) return err_name; } -static int -read_block_header (FILE *f, +static gint +read_block_header (FILE *f, guint32 *init_len, guint32 *total_len) { @@ -602,13 +554,13 @@ read_block_header (FILE *f, return id; } -static int -read_general_image_attribute_block (FILE *f, - guint init_len, - guint total_len, +static gint +read_general_image_attribute_block (FILE *f, + guint init_len, + guint total_len, PSPimage *ia) { - char buf[6]; + gchar buf[6]; #ifdef G_HAVE_GINT64 gint64 res[1]; #else @@ -692,8 +644,10 @@ read_general_image_attribute_block (FILE *f, return 0; } -static int -try_fseek (FILE *f, long pos, int whence) +static gint +try_fseek (FILE *f, + glong pos, + gint whence) { if (fseek (f, pos, whence) < 0) { @@ -704,10 +658,10 @@ try_fseek (FILE *f, long pos, int whence) return 0; } -static int -read_creator_block (FILE *f, - gint image_ID, - guint total_len, +static gint +read_creator_block (FILE *f, + gint image_ID, + guint total_len, PSPimage *ia) { long data_start; @@ -892,10 +846,10 @@ gimp_layer_mode_from_psp_blend_mode (PSPLayerBlendModes mode) return -1; } -static char * +static gchar * blend_mode_name (PSPLayerBlendModes mode) { - static char *blend_mode_names[] = + static gchar *blend_mode_names[] = { "NORMAL", "DARKEN", @@ -926,10 +880,10 @@ blend_mode_name (PSPLayerBlendModes mode) return err_name; } -static char * -bitmap_type_name (int type) +static gchar * +bitmap_type_name (gint type) { - static char *bitmap_type_names[] = + static gchar *bitmap_type_names[] = { "IMAGE", "TRANS_MASK", @@ -949,8 +903,8 @@ bitmap_type_name (int type) return err_name; } -static char * -channel_type_name (int type) +static gchar * +channel_type_name (gint type) { static char *channel_type_names[] = { @@ -971,25 +925,28 @@ channel_type_name (int type) } static void * -psp_zalloc (void *opaque, guint items, guint size) +psp_zalloc (void *opaque, + guint items, + guint size) { return g_malloc (items*size); } static void -psp_zfree (void *opaque, void *ptr) +psp_zfree (void *opaque, + void *ptr) { g_free (ptr); } static int -read_channel_data (FILE *f, - PSPimage *ia, - guchar **pixels, - guint bytespp, - guint offset, - GDrawable *drawable, - guint32 compressed_len) +read_channel_data (FILE *f, + PSPimage *ia, + guchar **pixels, + guint bytespp, + guint offset, + GDrawable *drawable, + guint32 compressed_len) { gint i, y, width = drawable->width, height = drawable->height; gint npixels = width * height; @@ -1117,15 +1074,15 @@ read_channel_data (FILE *f, return 0; } -static int -read_layer_block (FILE *f, - gint image_ID, - guint total_len, +static gint +read_layer_block (FILE *f, + gint image_ID, + guint total_len, PSPimage *ia) { - int i; + gint i; long block_start, sub_block_start, channel_start; - int sub_id; + gint sub_id; guint32 sub_init_len, sub_total_len; guchar *name; guint16 namelen; @@ -1452,10 +1409,10 @@ read_layer_block (FILE *f, return layer_ID; } -static int -read_tube_block (FILE *f, - gint image_ID, - guint total_len, +static gint +read_tube_block (FILE *f, + gint image_ID, + guint total_len, PSPimage *ia) { guint16 version; @@ -1528,8 +1485,8 @@ read_tube_block (FILE *f, return 0; } -static char * -compression_name (int compression) +static gchar * +compression_name (gint compression) { switch (compression) { @@ -1546,7 +1503,7 @@ compression_name (int compression) } static gint32 -load_image (char *filename) +load_image (gchar *filename) { FILE *f; struct stat st; @@ -1727,37 +1684,37 @@ load_image (char *filename) } static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) { g_message ("PSP: Saving not implemented yet"); - return 0; + return FALSE; } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; - gint32 image_ID; - gint32 drawable_ID; tile_height = gimp_tile_height (); run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_psp_load") == 0) { @@ -1766,13 +1723,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_psp_save") == 0) @@ -1788,18 +1744,21 @@ run (char *name, INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "PSP", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED | CAN_HANDLE_ALPHA | CAN_HANDLE_LAYERS)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED | + CAN_HANDLE_ALPHA | + CAN_HANDLE_LAYERS)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: break; } - + switch (run_mode) { case RUN_INTERACTIVE: @@ -1809,18 +1768,22 @@ run (char *name, /* First acquire information with a dialog */ if (! save_dialog ()) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ - if (nparams != 6 - || param[5].data.d_int32 < 0 - || param[5].data.d_int32 > PSP_COMP_LZ77) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + if (nparams != 6) + { + status = STATUS_CALLING_ERROR; + } + else { psvals.compression = (param[5].data.d_int32) ? TRUE : FALSE; + + if (param[5].data.d_int32 < 0 || + param[5].data.d_int32 > PSP_COMP_LZ77) + status = STATUS_CALLING_ERROR; } case RUN_WITH_LAST_VALS: @@ -1836,16 +1799,20 @@ run (char *name, if (save_image (param[3].data.d_string, image_ID, drawable_ID)) { gimp_set_data ("file_psp_save", &psvals, sizeof (PSPSaveVals)); - - status = STATUS_SUCCESS; } else - status = STATUS_EXECUTION_ERROR; + { + status = STATUS_EXECUTION_ERROR; + } } - values[0].data.d_status = status; - if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } diff --git a/plug-ins/common/randomize.c b/plug-ins/common/randomize.c index defc652eda..227d70d74a 100644 --- a/plug-ins/common/randomize.c +++ b/plug-ins/common/randomize.c @@ -167,10 +167,10 @@ static void run (gchar *name, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static void randomize (GDrawable *drawable); @@ -181,10 +181,11 @@ static inline void randomize_prepare_row (GPixelRgn *pixel_rgn, int y, int w); -static gint randomize_dialog (void); - -static void randomize_ok_callback (GtkWidget *widget, - gpointer data); +static gint randomize_dialog (void); +static void randomize_ok_callback (GtkWidget *widget, + gpointer data); +static void randomize_time_toggle_update (GtkWidget *widget, + gpointer data); /************************************ Guts ***********************************/ @@ -390,11 +391,11 @@ run (gchar *name, * Initialize the rand() function seed */ if (pivals.seed_type == SEED_TIME) - srand(time(NULL)); - else - srand(pivals.rndm_seed); + pivals.rndm_seed = time(NULL); - randomize(drawable); + srand (pivals.rndm_seed); + + randomize (drawable); /* * If we ran interactively (even repeating) update the display. */ @@ -694,23 +695,13 @@ randomize_dialog (void) { GtkWidget *dlg; GtkWidget *frame; - GtkWidget *seed_hbox; - GtkWidget *seed_vbox; GtkWidget *table; - GtkWidget *label; + GtkWidget *seed_hbox; GtkWidget *spinbutton; GtkObject *adj; - GtkWidget *radio_button; - GSList *group = NULL; gchar **argv; gint argc; - /* - * various initializations - */ - gint do_time = (pivals.seed_type == SEED_TIME); - gint do_user = (pivals.seed_type == SEED_USER); - argc = 1; argv = g_new (gchar *, 1); argv[0] = g_strdup ("randomize"); @@ -734,6 +725,8 @@ randomize_dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + gimp_help_init (); + /* * Parameter settings * @@ -744,88 +737,24 @@ randomize_dialog (void) gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (4, 3, FALSE); + table = gtk_table_new (3, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show(table); - gimp_help_init (); - - /* - * Randomization seed initialization controls - */ - label = gtk_label_new (_("Randomization Seed:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); - gtk_widget_show (label); - - /* - * Box to hold seed initialization radio buttons - */ - seed_vbox = gtk_vbox_new (FALSE, 2); - gtk_table_attach (GTK_TABLE (table), seed_vbox, 1, 2, 1, 2, - GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 0); - gtk_widget_show (seed_vbox); - - /* - * Time button - */ - radio_button = gtk_radio_button_new_with_label (NULL, _("Current Time")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button)); - gtk_box_pack_start (GTK_BOX (seed_vbox), radio_button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (radio_button), "toggled", - GTK_SIGNAL_FUNC (gimp_toggle_button_update), - &do_time); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), do_time); - gtk_widget_show (radio_button); - gimp_help_set_help_data (radio_button, - _("Seed random number generator from the current " - "time - this guarantees a reasonable " - "randomization"), NULL); - /* - * Box to hold seed user initialization controls - */ - seed_hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX (seed_vbox), seed_hbox, FALSE, FALSE, 0); - gtk_widget_show (seed_hbox); - - /* - * User button - */ - radio_button = gtk_radio_button_new_with_label (group, _("Other Value")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button)); - gtk_box_pack_start (GTK_BOX (seed_hbox), radio_button, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (radio_button), "toggled", - GTK_SIGNAL_FUNC (gimp_toggle_button_update), - &do_user); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), do_user); - gtk_widget_show (radio_button); - gimp_help_set_help_data (radio_button, - _("Enable user-entered value for random number " - "generator seed - this allows you to repeat a " - "given \"random\" operation"), NULL); - - /* - * Randomization seed number (text) - */ - spinbutton = gimp_spin_button_new (&adj, pivals.rndm_seed, - G_MININT, G_MAXINT, 1, 10, 0, 1, 0); - gtk_box_pack_start (GTK_BOX (seed_hbox), spinbutton, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (adj), "value_changed", - GTK_SIGNAL_FUNC (gimp_int_adjustment_update), - &pivals.rndm_seed); - gtk_widget_show (spinbutton); - gimp_help_set_help_data (spinbutton, - _("Value for seeding the random number generator"), - NULL); - gtk_widget_show (seed_hbox); + /* Random Seed */ + seed_hbox = gimp_random_seed_new (&pivals.rndm_seed, &pivals.seed_type, + SEED_TIME, SEED_USER); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Random Seed:"), 1.0, 0.5, + seed_hbox, TRUE); /* * Randomization percentage label & scale (1 to 100) */ - adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, _("Randomization %:"), SCALE_WIDTH, 0, pivals.rndm_pct, 1.0, 100.0, 1.0, 10.0, 0, _("Percentage of pixels to be filtered"), NULL); @@ -836,7 +765,7 @@ randomize_dialog (void) /* * Repeat count label & scale (1 to 100) */ - adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, _("Repeat:"), SCALE_WIDTH, 0, pivals.rndm_rcount, 1.0, 100.0, 1.0, 10.0, 0, _("Number of times to apply filter"), NULL); @@ -852,18 +781,6 @@ randomize_dialog (void) gimp_help_free (); gdk_flush (); - /* - * Figure out which type of seed initialization to apply. - */ - if (do_time) - { - pivals.seed_type = SEED_TIME; - } - else - { - pivals.seed_type = SEED_USER; - } - return rndm_int.run; } @@ -875,3 +792,17 @@ randomize_ok_callback (GtkWidget *widget, gtk_widget_destroy (GTK_WIDGET (data)); } + +static void +randomize_time_toggle_update (GtkWidget *widget, + gpointer data) +{ + gint *toggle_val; + + toggle_val = (gint *) data; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + *toggle_val = SEED_TIME; + else + *toggle_val = SEED_USER; +} diff --git a/plug-ins/common/scatter_hsv.c b/plug-ins/common/scatter_hsv.c index 5001ade26e..08c831dc8e 100644 --- a/plug-ins/common/scatter_hsv.c +++ b/plug-ins/common/scatter_hsv.c @@ -22,7 +22,6 @@ #include "config.h" -#include #include #include #include @@ -32,14 +31,11 @@ #include #include +#include #include #include "libgimp/stdplugins-intl.h" -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - #define PLUG_IN_NAME "plug_in_scatter_hsv" #define SHORT_NAME "scatter_hsv" #define MAIN_FUNCTION scatter_hsv @@ -288,15 +284,15 @@ static int randomize_value (int now, double rand_val; steps = max - min + 1; - rand_val = ((double) rand()/(double)RAND_MAX); + rand_val = ((double) rand() / (double) G_MAXRAND); for (index = 1; index < VALS.holdness; index++) { - double tmp = ((double) rand()/(double)RAND_MAX); + double tmp = ((double) rand()/(double)G_MAXRAND); if (tmp < rand_val) rand_val = tmp; } - flag = ((RAND_MAX / 2) < rand()) ? 1 : -1; + flag = ((G_MAXRAND / 2) < rand()) ? 1 : -1; new = now + flag * ((int) (rand_max * rand_val) % steps); if (new < min) @@ -360,10 +356,13 @@ DIALOG (void) GtkWidget *dlg; GtkWidget *vbox; GtkWidget *frame; + GtkWidget *pframe; + GtkWidget *abox; GtkWidget *table; GtkObject *adj; - gchar **argv; - gint argc; + guchar *color_cube; + gchar **argv; + gint argc; argc = 1; argv = g_new (gchar *, 1); @@ -372,6 +371,16 @@ DIALOG (void) gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); + gdk_set_use_xshm (gimp_use_xshm ()); + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + + color_cube = gimp_color_cube (); + gtk_preview_set_color_cube (color_cube[0], color_cube[1], + color_cube[2], color_cube[3]); + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); + dlg = gimp_dialog_new (_("Scatter HSV"), "scatter_hsv", gimp_plugin_help_func, "filters/scatter_hsv.html", GTK_WIN_POS_MOUSE, @@ -392,6 +401,44 @@ DIALOG (void) gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dlg)->vbox), vbox); + frame = gtk_frame_new (_("Preview (1:4) - Right Click to Jump")); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_add (GTK_CONTAINER (frame), abox); + gtk_widget_show (abox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (pframe), GTK_SHADOW_IN); + gtk_container_set_border_width (GTK_CONTAINER (pframe), 4); + gtk_container_add (GTK_CONTAINER (abox), pframe); + gtk_widget_show (pframe); + + preview = gtk_preview_new (GTK_PREVIEW_COLOR); + { + gint width = gimp_drawable_width (drawable_id); + gint height = gimp_drawable_height (drawable_id); + + preview_width = (PREVIEW_WIDTH < width) ? PREVIEW_WIDTH : width; + preview_height = (PREVIEW_HEIGHT < height) ? PREVIEW_HEIGHT : height; + } + gtk_preview_size (GTK_PREVIEW (preview), preview_width * 2, preview_height); + scatter_hsv_preview_update (); + gtk_container_add (GTK_CONTAINER (pframe), preview); + gtk_widget_set_events (preview, + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_BUTTON_MOTION_MASK | + GDK_POINTER_MOTION_HINT_MASK); + gtk_signal_connect (GTK_OBJECT (preview), "event", + (GtkSignalFunc) preview_event_handler, + NULL); + gtk_widget_show (preview); + + gtk_widget_show (frame); + frame = gtk_frame_new (_("Parameter Settings")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); @@ -439,47 +486,6 @@ DIALOG (void) gtk_widget_show (table); gtk_widget_show (frame); - frame = gtk_frame_new (_("Preview (1:4) - Right Click to Jump")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - /* preparation for preview */ - gdk_set_use_xshm (gimp_use_xshm ()); - gtk_preview_set_gamma (gimp_gamma ()); - gtk_preview_set_install_cmap (gimp_install_cmap ()); - { - guchar *color_cube; - color_cube = gimp_color_cube (); - gtk_preview_set_color_cube (color_cube[0], color_cube[1], - color_cube[2], color_cube[3]); - } - gtk_widget_set_default_visual (gtk_preview_get_visual ()); - gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); - - preview = gtk_preview_new (GTK_PREVIEW_COLOR); - { - gint width = gimp_drawable_width (drawable_id); - gint height = gimp_drawable_height (drawable_id); - - preview_width = (PREVIEW_WIDTH < width) ? PREVIEW_WIDTH : width; - preview_height = (PREVIEW_HEIGHT < height) ? PREVIEW_HEIGHT : height; - } - gtk_preview_size (GTK_PREVIEW (preview), preview_width * 2, preview_height); - scatter_hsv_preview_update (); - gtk_container_add (GTK_CONTAINER (frame), preview); - gtk_widget_set_events (preview, - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_BUTTON_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK); - gtk_signal_connect (GTK_OBJECT (preview), "event", - (GtkSignalFunc) preview_event_handler, - NULL); - gtk_widget_show (preview); - - gtk_widget_show (frame); - gtk_widget_show (vbox); gtk_widget_show (dlg); diff --git a/plug-ins/common/smooth_palette.c b/plug-ins/common/smooth_palette.c index 9838da0916..3c1b09d408 100644 --- a/plug-ins/common/smooth_palette.c +++ b/plug-ins/common/smooth_palette.c @@ -384,6 +384,7 @@ static gint dialog (void) { GtkWidget *dlg; + GtkWidget *frame; GtkWidget *table; GtkWidget *spinbutton; GtkObject *adj; @@ -413,13 +414,18 @@ dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - table = gtk_table_new (3, 2, FALSE); - gtk_container_set_border_width (GTK_CONTAINER (table), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); - gtk_widget_show (table); + frame = gtk_frame_new (_("Parameter Settings")); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + table = gtk_table_new (3, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_widget_show (table); + spinbutton = gimp_spin_button_new (&adj, config.width, 1, GIMP_MAX_IMAGE_SIZE, 1, 10, 0, 1, 0); diff --git a/plug-ins/common/snoise.c b/plug-ins/common/snoise.c index f27f9006ed..fc7389e20e 100644 --- a/plug-ins/common/snoise.c +++ b/plug-ins/common/snoise.c @@ -75,21 +75,17 @@ /*---- Defines ----*/ -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - #define TABLE_SIZE 64 #define WEIGHT(T) ((2.0*fabs(T)-3.0)*(T)*(T)+1.0) -#define ENTRY_WIDTH 40 #define SCALE_WIDTH 128 -#define SCALE_MAX 16.0 +#define SCALE_MAX 16.0 /*---- Typedefs ----*/ -typedef struct { +typedef struct +{ gint tilable; gint turbulent; gint seed; @@ -100,61 +96,69 @@ typedef struct { gint timeseed; } SolidNoiseValues; -typedef struct { +typedef struct +{ gint run; } SolidNoiseInterface; -typedef struct { - double x, y; +typedef struct +{ + gdouble x, y; } Vector2d; /*---- Prototypes ----*/ static void query (void); -static void run (char *name, int nparams, GParam *param, - int *nreturn_vals, GParam **return_vals); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -static void solid_noise (GDrawable *drawable); -static void solid_noise_init (void); -static double plain_noise (double x, double y, unsigned int s); -static double noise (double x, double y); +static void solid_noise (GDrawable *drawable); +static void solid_noise_init (void); +static gdouble plain_noise (gdouble x, + gdouble y, + guint s); +static gdouble noise (gdouble x, + gdouble y); -static gint solid_noise_dialog (void); -static void dialog_toggle_update (GtkWidget *widget, gpointer data); -static void dialog_entry_callback (GtkWidget *widget, gpointer data); -static void dialog_scale_callback (GtkAdjustment *adjustment, gdouble *value); -static void dialog_ok_callback (GtkWidget *widget, gpointer data); +static gint solid_noise_dialog (void); +static void dialog_ok_callback (GtkWidget *widget, + gpointer data); /*---- Variables ----*/ GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ query, /* query_proc */ - run, /* run_proc */ + run, /* run_proc */ }; -static SolidNoiseValues snvals = { - 0, /* tilable */ - 0, /* turbulent */ - 1, /* seed */ - 1, /* detail */ - 4.0, /* xsize */ - 4.0, /* ysize */ +static SolidNoiseValues snvals = +{ + 0, /* tilable */ + 0, /* turbulent */ + 1, /* seed */ + 1, /* detail */ + 4.0, /* xsize */ + 4.0, /* ysize */ 0 /* use time seed */ }; -static SolidNoiseInterface snint = { +static SolidNoiseInterface snint = +{ FALSE /* run */ }; -static int xclip, yclip; -static double offset, factor; -static double xsize, ysize; -static int perm_tab[TABLE_SIZE]; +static gint xclip, yclip; +static gdouble offset, factor; +static gdouble xsize, ysize; +static gint perm_tab[TABLE_SIZE]; static Vector2d grad_tab[TABLE_SIZE]; @@ -162,7 +166,6 @@ static Vector2d grad_tab[TABLE_SIZE]; MAIN() - static void query (void) { @@ -201,7 +204,10 @@ query (void) static void -run (char *name, int nparams, GParam *param, int *nreturn_vals, +run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, GParam **return_vals) { static GParam values[1]; @@ -223,46 +229,47 @@ run (char *name, int nparams, GParam *param, int *nreturn_vals, drawable = gimp_drawable_get (param[2].data.d_drawable); /* See how we will run */ - switch (run_mode) { - case RUN_INTERACTIVE: - INIT_I18N_UI(); - /* Possibly retrieve data */ - gimp_get_data("plug_in_solid_noise", &snvals); + switch (run_mode) + { + case RUN_INTERACTIVE: + INIT_I18N_UI(); + /* Possibly retrieve data */ + gimp_get_data("plug_in_solid_noise", &snvals); - /* Get information from the dialog */ - if (!solid_noise_dialog ()) - return; + /* Get information from the dialog */ + if (!solid_noise_dialog ()) + return; + break; - break; + case RUN_NONINTERACTIVE: + INIT_I18N(); + /* Test number of arguments */ + if (nparams == 9) + { + snvals.tilable = param[3].data.d_int32; + snvals.turbulent = param[4].data.d_int32; + snvals.seed = param[5].data.d_int32; + snvals.detail = param[6].data.d_int32; + snvals.xsize = param[7].data.d_float; + snvals.ysize = param[8].data.d_float; + } + else + status = STATUS_CALLING_ERROR; + break; - case RUN_NONINTERACTIVE: - INIT_I18N(); - /* Test number of arguments */ - if (nparams == 9) { - snvals.tilable = param[3].data.d_int32; - snvals.turbulent = param[4].data.d_int32; - snvals.seed = param[5].data.d_int32; - snvals.detail = param[6].data.d_int32; - snvals.xsize = param[7].data.d_float; - snvals.ysize = param[8].data.d_float; + case RUN_WITH_LAST_VALS: + INIT_I18N(); + /* Possibly retrieve data */ + gimp_get_data("plug_in_solid_noise", &snvals); + break; + + default: + break; } - else - status = STATUS_CALLING_ERROR; - break; - - case RUN_WITH_LAST_VALS: - INIT_I18N(); - /* Possibly retrieve data */ - gimp_get_data("plug_in_solid_noise", &snvals); - break; - - default: - break; - } /* Create texture */ if ((status == STATUS_SUCCESS) && (gimp_drawable_is_rgb (drawable->id) || - gimp_drawable_is_gray (drawable->id))) + gimp_drawable_is_gray (drawable->id))) { /* Set the tile cache size */ gimp_tile_cache_ntiles((drawable->width + gimp_tile_width() - 1) / gimp_tile_width()); @@ -276,18 +283,18 @@ run (char *name, int nparams, GParam *param, int *nreturn_vals, /* Store data */ if (run_mode==RUN_INTERACTIVE || run_mode==RUN_WITH_LAST_VALS) - gimp_set_data("plug_in_solid_noise", &snvals, - sizeof(SolidNoiseValues)); + gimp_set_data ("plug_in_solid_noise", &snvals, + sizeof (SolidNoiseValues)); } else { /* gimp_message ("solid noise: cannot operate on indexed color images"); */ status = STATUS_EXECUTION_ERROR; } - + values[0].data.d_status = status; - gimp_drawable_detach(drawable); + gimp_drawable_detach (drawable); } @@ -315,10 +322,11 @@ solid_noise (GDrawable *drawable) max_progress = sel_width * sel_height; chns = gimp_drawable_bpp (drawable->id); has_alpha = 0; - if (gimp_drawable_has_alpha (drawable->id)) { - chns--; - has_alpha = 1; - } + if (gimp_drawable_has_alpha (drawable->id)) + { + chns--; + has_alpha = 1; + } gimp_pixel_rgn_init (&dest_rgn, drawable, sel_x1, sel_y1, sel_width, sel_height, TRUE, TRUE); @@ -359,8 +367,8 @@ solid_noise (GDrawable *drawable) static void solid_noise_init (void) { - int i, j, k, t; - double m; + gint i, j, k, t; + gdouble m; /* Force sane parameters */ if (snvals.detail < 0) @@ -376,58 +384,71 @@ solid_noise_init (void) srand (snvals.seed); /* Set scaling factors */ - if (snvals.tilable) { - xsize = ceil (snvals.xsize); - ysize = ceil (snvals.ysize); - xclip = (int) xsize; - yclip = (int) ysize; - } - else { - xsize = snvals.xsize; - ysize = snvals.ysize; - } + if (snvals.tilable) + { + xsize = ceil (snvals.xsize); + ysize = ceil (snvals.ysize); + xclip = (int) xsize; + yclip = (int) ysize; + } + else + { + xsize = snvals.xsize; + ysize = snvals.ysize; + } /* Set totally empiric normalization values */ - if (snvals.turbulent) { - offset=0.0; - factor=1.0; - } - else { - offset=0.94; - factor=0.526; - } + if (snvals.turbulent) + { + offset=0.0; + factor=1.0; + } + else + { + offset=0.94; + factor=0.526; + } /* Initialize the permutation table */ for (i = 0; i < TABLE_SIZE; i++) perm_tab[i] = i; - for (i = 0; i < (TABLE_SIZE >> 1); i++) { - j = rand () % TABLE_SIZE; - k = rand () % TABLE_SIZE; - t = perm_tab[j]; - perm_tab[j] = perm_tab[k]; - perm_tab[k] = t; - } + for (i = 0; i < (TABLE_SIZE >> 1); i++) + { + j = rand () % TABLE_SIZE; + k = rand () % TABLE_SIZE; + t = perm_tab[j]; + perm_tab[j] = perm_tab[k]; + perm_tab[k] = t; + } /* Initialize the gradient table */ - for (i = 0; i < TABLE_SIZE; i++) { - do { - grad_tab[i].x = (double)(rand () - (RAND_MAX >> 1)) / (RAND_MAX >> 1); - grad_tab[i].y = (double)(rand () - (RAND_MAX >> 1)) / (RAND_MAX >> 1); - m = grad_tab[i].x * grad_tab[i].x + grad_tab[i].y * grad_tab[i].y; - } while (m == 0.0 || m > 1.0); - m = 1.0 / sqrt(m); - grad_tab[i].x *= m; - grad_tab[i].y *= m; - } + for (i = 0; i < TABLE_SIZE; i++) + { + do + { + grad_tab[i].x = + (double)(rand () - (G_MAXRAND >> 1)) / (G_MAXRAND >> 1); + grad_tab[i].y = + (double)(rand () - (G_MAXRAND >> 1)) / (G_MAXRAND >> 1); + m = grad_tab[i].x * grad_tab[i].x + grad_tab[i].y * grad_tab[i].y; + } + while (m == 0.0 || m > 1.0); + + m = 1.0 / sqrt(m); + grad_tab[i].x *= m; + grad_tab[i].y *= m; + } } -static double -plain_noise (double x, double y, unsigned int s) +static gdouble +plain_noise (gdouble x, + gdouble y, + guint s) { Vector2d v; - int a, b, i, j, n; - double sum; + gint a, b, i, j, n; + gdouble sum; sum = 0.0; x *= s; @@ -436,40 +457,43 @@ plain_noise (double x, double y, unsigned int s) b = (int) floor (y); for (i = 0; i < 2; i++) - for (j = 0; j < 2; j++) { - if (snvals.tilable) - n = perm_tab[(((a + i) % (xclip * s)) + perm_tab[((b + j) % (yclip * s)) % TABLE_SIZE]) % TABLE_SIZE]; - else - n = perm_tab[(a + i + perm_tab[(b + j) % TABLE_SIZE]) % TABLE_SIZE]; - v.x = x - a - i; - v.y = y - b - j; - sum += WEIGHT(v.x) * WEIGHT(v.y) * (grad_tab[n].x * v.x + grad_tab[n].y * v.y); - } - + for (j = 0; j < 2; j++) + { + if (snvals.tilable) + n = perm_tab[(((a + i) % (xclip * s)) + perm_tab[((b + j) % (yclip * s)) % TABLE_SIZE]) % TABLE_SIZE]; + else + n = perm_tab[(a + i + perm_tab[(b + j) % TABLE_SIZE]) % TABLE_SIZE]; + v.x = x - a - i; + v.y = y - b - j; + sum += WEIGHT(v.x) * WEIGHT(v.y) * (grad_tab[n].x * v.x + grad_tab[n].y * v.y); + } + return sum / s; } -static double -noise (double x, double y) +static gdouble +noise (gdouble x, + gdouble y) { - int i; - unsigned int s; - double sum; + gint i; + guint s; + gdouble sum; s = 1; sum = 0.0; x *= xsize; y *= ysize; - for (i = 0; i <= snvals.detail; i++) { - if (snvals.turbulent) - sum += fabs (plain_noise (x, y, s)); - else - sum += plain_noise (x, y, s); - s <<= 1; - } - + for (i = 0; i <= snvals.detail; i++) + { + if (snvals.turbulent) + sum += fabs (plain_noise (x, y, s)); + else + sum += plain_noise (x, y, s); + s <<= 1; + } + return (sum+offset)*factor; } @@ -478,17 +502,14 @@ static gint solid_noise_dialog (void) { GtkWidget *dlg; + GtkWidget *frame; GtkWidget *toggle; GtkWidget *table; - GtkWidget *label; - GtkWidget *entry; GtkWidget *seed_hbox; - GtkWidget *time_button; - GtkWidget *scale; - GtkObject *scale_data; + GtkWidget *spinbutton; + GtkObject *adj; gchar **argv; gint argc; - gchar buffer[32]; /* Set args */ argc = 1; @@ -515,164 +536,85 @@ solid_noise_dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); + gimp_help_init (); + + frame = gtk_frame_new (_("Parameter Settings")); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + /* Table */ table = gtk_table_new (4, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_container_set_border_width (GTK_CONTAINER (table), 6); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); - /* Entry #1 */ - label = gtk_label_new ( _("Seed:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 1, 0); - gtk_widget_show (label); + /* Random Seed */ + seed_hbox = gimp_random_seed_new (&snvals.seed, &snvals.timeseed, + TRUE, FALSE); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Random Seed:"), 1.0, 0.5, + seed_hbox, TRUE); - seed_hbox = gtk_hbox_new (FALSE, 4); - gtk_table_attach (GTK_TABLE (table), seed_hbox, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - - entry = gtk_entry_new (); - gtk_box_pack_start (GTK_BOX (seed_hbox), entry, TRUE, TRUE, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%d", snvals.seed); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) dialog_entry_callback, - &snvals.seed); - gtk_widget_show (entry); - - time_button = gtk_toggle_button_new_with_label ( _("Time")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(time_button), snvals.timeseed); - gtk_signal_connect (GTK_OBJECT (time_button), "toggled", - (GtkSignalFunc) dialog_toggle_update, - &snvals.timeseed); - gtk_box_pack_end (GTK_BOX (seed_hbox), time_button, FALSE, FALSE, 0); - gtk_widget_show (time_button); - gtk_widget_show (seed_hbox); - - /* Entry #2 */ - label = gtk_label_new (_("Detail:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 1, 0); - gtk_widget_show (label); - - entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - sprintf(buffer, "%d", snvals.detail); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) dialog_entry_callback, + /* Detail */ + spinbutton = gimp_spin_button_new (&adj, snvals.detail, + 1, 15, 1, 3, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Detail:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), &snvals.detail); - gtk_widget_show (entry); - /* Check button #1 */ + /* Turbulent */ toggle = gtk_check_button_new_with_label ( _("Turbulent")); gtk_table_attach (GTK_TABLE (table), toggle, 2, 3, 0, 1, - GTK_EXPAND | GTK_FILL, GTK_FILL, 1, 0); + GTK_SHRINK | GTK_FILL, GTK_FILL, 1, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), snvals.turbulent); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) dialog_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &snvals.turbulent); gtk_widget_show (toggle); - /* Check button #2 */ + /* Tilable */ toggle = gtk_check_button_new_with_label ( _("Tilable")); gtk_table_attach (GTK_TABLE (table), toggle, 2, 3, 1, 2, - GTK_EXPAND | GTK_FILL, GTK_FILL, 1, 0); + GTK_SHRINK | GTK_FILL, GTK_FILL, 1, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), snvals.tilable); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) dialog_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &snvals.tilable); gtk_widget_show (toggle); - /* Scale #1 */ - label = gtk_label_new ( _("X Size:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 1.0); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, - GTK_FILL, GTK_FILL, 1, 0); - gtk_widget_show (label); - - scale_data = gtk_adjustment_new (snvals.xsize, 0.1, SCALE_MAX, - 0.1, 0.1, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 3, 2, 3, - GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 1); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); - gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) dialog_scale_callback, + /* X Size */ + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + _("X Size:"), SCALE_WIDTH, 0, + snvals.xsize, 0.1, SCALE_MAX, 0.1, 1.0, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &snvals.xsize); - gtk_widget_show (scale); - /* Scale #2 */ - label = gtk_label_new ( _("Y Size:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 1.0); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, - GTK_FILL, GTK_FILL, 1, 0); - gtk_widget_show (label); - - scale_data = gtk_adjustment_new (snvals.ysize, 0.1, SCALE_MAX, - 0.1, 0.1, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 3, 3, 4, - GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 1); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); - gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) dialog_scale_callback, + /* Y Size */ + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + _("Y Size:"), SCALE_WIDTH, 0, + snvals.ysize, 0.1, SCALE_MAX, 0.1, 1.0, 1, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &snvals.ysize); - gtk_widget_show (scale); gtk_widget_show (table); gtk_widget_show (dlg); gtk_main (); + gimp_help_free (); gdk_flush (); return snint.run; } -static void -dialog_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -static void -dialog_entry_callback (GtkWidget *widget, - gpointer data) -{ - gint *text_val; - - text_val = (gint *) data; - - *text_val = atoi (gtk_entry_get_text (GTK_ENTRY (widget))); -} - -static void -dialog_scale_callback (GtkAdjustment *adjustment, - gdouble *value) -{ - *value = adjustment->value; -} - static void dialog_ok_callback (GtkWidget *widget, gpointer data) diff --git a/plug-ins/common/sparkle.c b/plug-ins/common/sparkle.c index a7d19c594d..82706b7141 100644 --- a/plug-ins/common/sparkle.c +++ b/plug-ins/common/sparkle.c @@ -30,7 +30,6 @@ #include #include -#include #include @@ -766,10 +765,10 @@ sparkle (GDrawable *drawable, { /* major spikes */ if (svals.spike_angle == -1) - spike_angle = 360.0 * rand () / RAND_MAX; + spike_angle = 360.0 * rand () / G_MAXRAND; else spike_angle = svals.spike_angle; - if (rand() <= RAND_MAX * svals.density) + if (rand() <= G_MAXRAND * svals.density) { fspike (&src_rgn, &dest_rgn, gray, x1, y1, x2, y2, x + src_rgn.x, y + src_rgn.y, @@ -948,21 +947,22 @@ fspike (GPixelRgn *src_rgn, } if (svals.random_hue > 0.0 || svals.random_saturation > 0.0) { - r = 255 - color[0]; - g = 255 - color[1]; - b = 255 - color[2]; - gimp_rgb_to_hsv(&r, &g, &b); - r+= (svals.random_hue * ((gdouble) rand() / (gdouble) RAND_MAX - 0.5))*255; - if (r >= 255) - r -= 255; - else if (r < 0) - r += 255; - b+= (svals.random_saturation * (2.0 * (gdouble) rand() / -(gdouble) RAND_MAX - 1.0))*255; if (b > 255) b = 255; - gimp_hsv_to_rgb(&r, &g, &b); - color[0] = 255 - r; - color[1] = 255 - g; - color[2] = 255 - b; + r = 255 - color[0]; + g = 255 - color[1]; + b = 255 - color[2]; + gimp_rgb_to_hsv (&r, &g, &b); + r+= (svals.random_hue * ((gdouble) rand() / (gdouble) RAND_MAX - 0.5))*255; + if (r >= 255) + r -= 255; + else if (r < 0) + r += 255; + b+= (svals.random_saturation * (2.0 * (gdouble) rand() / + (gdouble) RAND_MAX - 1.0))*255; + if (b > 255) b = 255; + gimp_hsv_to_rgb (&r, &g, &b); + color[0] = 255 - r; + color[1] = 255 - g; + color[2] = 255 - b; } dx = 0.2 * cos (theta * G_PI / 180.0); diff --git a/plug-ins/common/spheredesigner.c b/plug-ins/common/spheredesigner.c index 619bf5295e..a1e5028867 100644 --- a/plug-ins/common/spheredesigner.c +++ b/plug-ins/common/spheredesigner.c @@ -985,7 +985,7 @@ void imagepixel(vector *q, vector *col, texture *t) double frand(double v) { - return (RAND_FUNC() / (double)RAND_MAX - 0.5) * v; + return (RAND_FUNC() / (double) G_MAXRAND - 0.5) * v; } int traceray(ray *r, vector *col, int level, double imp); diff --git a/plug-ins/common/sunras.c b/plug-ins/common/sunras.c index 9569417e54..3d8ec037e8 100644 --- a/plug-ins/common/sunras.c +++ b/plug-ins/common/sunras.c @@ -60,7 +60,8 @@ typedef unsigned short L_CARD16; typedef unsigned char L_CARD8; /* Fileheader of SunRaster files */ -typedef struct { +typedef struct +{ L_CARD32 l_ras_magic; /* Magic Number */ L_CARD32 l_ras_width; /* Width */ L_CARD32 l_ras_height; /* Height */ @@ -77,7 +78,8 @@ typedef struct { #define RAS_TYPE_STD 1 /* Standard uncompressed format */ #define RAS_TYPE_RLE 2 /* Runlength compression format */ -typedef struct { +typedef struct +{ int val; /* The value that is to be repeated */ int n; /* How many times it is repeated */ } RLEBUF; @@ -86,14 +88,14 @@ typedef struct { /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); @@ -142,19 +144,16 @@ static void init_gtk (void); static gint save_dialog (void); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_toggle_update (GtkWidget *widget, - gpointer data); -static void show_message (char *); /* Portability kludge */ static int my_fwrite (void *ptr, int size, int nmemb, FILE *stream); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; @@ -189,7 +188,6 @@ MAIN () static void query (void) - { static GParamDef load_args[] = { @@ -202,8 +200,8 @@ query (void) { PARAM_IMAGE, "image", "Output image" }, }; static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) - / sizeof (load_return_vals[0]); + static int nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -255,26 +253,25 @@ those with alpha channels."), static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) - { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; l_run_mode = run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_sunras_load") == 0) { @@ -282,11 +279,16 @@ run (char *name, image_ID = load_image (param[1].data.d_string); - *nreturn_vals = 2; - status = (image_ID != -1) ? STATUS_SUCCESS : STATUS_EXECUTION_ERROR; - values[0].data.d_status = status; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = image_ID; + if (image_ID != -1) + { + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_ID; + } + else + { + status = STATUS_EXECUTION_ERROR; + } } else if (strcmp (name, "file_sunras_save") == 0) { @@ -294,7 +296,7 @@ run (char *name, image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - + /* eventually export the image */ switch (run_mode) { @@ -302,18 +304,19 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "SUNRAS", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; default: break; } - + switch (run_mode) { case RUN_INTERACTIVE: @@ -322,19 +325,19 @@ run (char *name, /* First acquire information with a dialog */ if (! save_dialog ()) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 6) - { - status = STATUS_CALLING_ERROR; - } + { + status = STATUS_CALLING_ERROR; + } else - { - psvals.rle = (param[5].data.d_int32) ? TRUE : FALSE; - } + { + psvals.rle = (param[5].data.d_int32) ? TRUE : FALSE; + } break; case RUN_WITH_LAST_VALS: @@ -347,28 +350,33 @@ run (char *name, } if (status == STATUS_SUCCESS) - { - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) - { - /* Store psvals data */ - gimp_set_data ("file_sunras_save", &psvals, sizeof (SUNRASSaveVals)); - } - else - { - status = STATUS_EXECUTION_ERROR; - } - } - values[0].data.d_status = status; + { + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + /* Store psvals data */ + gimp_set_data ("file_sunras_save", &psvals, + sizeof (SUNRASSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) - +load_image (gchar *filename) { gint32 image_ID; FILE *ifp; @@ -378,72 +386,73 @@ load_image (char *filename) ifp = fopen (filename, "rb"); if (!ifp) - { - show_message (_("Can't open file for reading")); - return (-1); - } + { + g_message (_("Can't open file for reading")); + return (-1); + } read_msb_first = 1; /* SUN raster is always most significant byte first */ read_sun_header (ifp, &sunhdr); if (sunhdr.l_ras_magic != RAS_MAGIC) - { - show_message(_("Can't open file as SUN-raster-file")); - fclose (ifp); - return (-1); - } + { + g_message (_("Can't open file as SUN-raster-file")); + fclose (ifp); + return (-1); + } if ((sunhdr.l_ras_type < 0) || (sunhdr.l_ras_type > 5)) - { - show_message (_("The type of this SUN-rasterfile is not supported")); - fclose (ifp); - return (-1); - } + { + g_message (_("The type of this SUN-rasterfile is not supported")); + fclose (ifp); + return (-1); + } /* Is there a RGB colourmap ? */ if ((sunhdr.l_ras_maptype == 1) && (sunhdr.l_ras_maplength > 0)) - { - suncolmap = (unsigned char *)malloc (sunhdr.l_ras_maplength); - if (suncolmap == NULL) { - show_message ("Can't get memory for colour map"); - fclose (ifp); - return (-1); - } + suncolmap = (unsigned char *)malloc (sunhdr.l_ras_maplength); + if (suncolmap == NULL) + { + g_message ("Can't get memory for colour map"); + fclose (ifp); + return (-1); + } read_sun_cols (ifp, &sunhdr, suncolmap); #ifdef DEBUG - {int j, ncols; - printf ("File %s\n",filename); - ncols = sunhdr.l_ras_maplength/3; - for (j=0; j < ncols; j++) - printf ("Entry 0x%08x: 0x%04x, 0x%04x, 0x%04x\n", - j,suncolmap[j],suncolmap[j+ncols],suncolmap[j+2*ncols]); + { + int j, ncols; + printf ("File %s\n",filename); + ncols = sunhdr.l_ras_maplength/3; + for (j=0; j < ncols; j++) + printf ("Entry 0x%08x: 0x%04x, 0x%04x, 0x%04x\n", + j,suncolmap[j],suncolmap[j+ncols],suncolmap[j+2*ncols]); } #endif if (sunhdr.l_ras_magic != RAS_MAGIC) - { - show_message ("Can't read colour entries"); - fclose (ifp); - return (-1); + { + g_message ("Can't read colour entries"); + fclose (ifp); + return (-1); + } } - } else if (sunhdr.l_ras_maplength > 0) - { - show_message (_("Type of colourmap not supported")); - fseek (ifp, (sizeof (L_SUNFILEHEADER)/sizeof (L_CARD32)) - *4 + sunhdr.l_ras_maplength, SEEK_SET); - } + { + g_message (_("Type of colourmap not supported")); + fseek (ifp, (sizeof (L_SUNFILEHEADER)/sizeof (L_CARD32)) + *4 + sunhdr.l_ras_maplength, SEEK_SET); + } if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Loading %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + { + temp = g_strdup_printf (_("Loading %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } switch (sunhdr.l_ras_depth) - { + { case 1: /* bitmap */ image_ID = load_sun_d1 (filename, ifp, &sunhdr, suncolmap); break; @@ -461,29 +470,28 @@ load_image (char *filename) break; default: - image_ID = -1; - break; - } + image_ID = -1; + break; + } fclose (ifp); if (suncolmap != NULL) free ((char *)suncolmap); if (image_ID == -1) - { - show_message (_("This image depth is not supported")); - return (-1); - } + { + g_message (_("This image depth is not supported")); + return (-1); + } return (image_ID); } static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) - { FILE* ofp; GDrawableType drawable_type; @@ -494,37 +502,37 @@ save_image (char *filename, /* Make sure we're not saving an image with an alpha channel */ if (gimp_drawable_has_alpha (drawable_ID)) - { - show_message (_("SUNRAS save cannot handle images with alpha channels")); - return FALSE; - } + { + g_message (_("SUNRAS save cannot handle images with alpha channels")); + return FALSE; + } switch (drawable_type) - { + { case INDEXED_IMAGE: case GRAY_IMAGE: case RGB_IMAGE: break; default: - show_message (_("Can't operate on unknown image types")); + g_message (_("Can't operate on unknown image types")); return (FALSE); break; - } + } /* Open the output file. */ ofp = fopen (filename, "wb"); if (!ofp) - { - show_message (_("Can't open file for writing")); - return (FALSE); - } + { + g_message (_("Can't open file for writing")); + return (FALSE); + } if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Saving %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + { + temp = g_strdup_printf (_("Saving %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } if (drawable_type == INDEXED_IMAGE) retval = save_index (ofp,image_ID, drawable_ID, 0, (int)psvals.rle); @@ -541,53 +549,52 @@ save_image (char *filename, } -static L_CARD32 read_card32 (FILE *ifp, - int *err) +static L_CARD32 +read_card32 (FILE *ifp, + gint *err) +{ + L_CARD32 c; -{L_CARD32 c; + if (read_msb_first) + { + c = (((L_CARD32)(getc (ifp))) << 24); + c |= (((L_CARD32)(getc (ifp))) << 16); + c |= (((L_CARD32)(getc (ifp))) << 8); + c |= ((L_CARD32)(*err = getc (ifp))); + } + else + { + c = ((L_CARD32)(getc (ifp))); + c |= (((L_CARD32)(getc (ifp))) << 8); + c |= (((L_CARD32)(getc (ifp))) << 16); + c |= (((L_CARD32)(*err = getc (ifp))) << 24); + } - if (read_msb_first) - { - c = (((L_CARD32)(getc (ifp))) << 24); - c |= (((L_CARD32)(getc (ifp))) << 16); - c |= (((L_CARD32)(getc (ifp))) << 8); - c |= ((L_CARD32)(*err = getc (ifp))); - } - else - { - c = ((L_CARD32)(getc (ifp))); - c |= (((L_CARD32)(getc (ifp))) << 8); - c |= (((L_CARD32)(getc (ifp))) << 16); - c |= (((L_CARD32)(*err = getc (ifp))) << 24); - } - - *err = (*err < 0); - return (c); + *err = (*err < 0); + return (c); } static void write_card32 (FILE *ofp, L_CARD32 c) - { - putc ((int)((c >> 24) & 0xff), ofp); - putc ((int)((c >> 16) & 0xff), ofp); - putc ((int)((c >> 8) & 0xff), ofp); - putc ((int)((c) & 0xff), ofp); + putc ((int)((c >> 24) & 0xff), ofp); + putc ((int)((c >> 16) & 0xff), ofp); + putc ((int)((c >> 8) & 0xff), ofp); + putc ((int)((c) & 0xff), ofp); } /* Convert n bytes of 0/1 to a line of bits */ static void -byte2bit (unsigned char *byteline, - int width, - unsigned char *bitline, - int invert) - +byte2bit (guchar *byteline, + gint width, + guchar *bitline, + gint invert) { - register unsigned char bitval; - unsigned char rest[8]; + register guchar bitval; + guchar rest[8]; while (width >= 8) { @@ -624,19 +631,17 @@ byte2bit (unsigned char *byteline, /* Start reading Runlength Encoded Data */ static void rle_startread (FILE *ifp) - { /* Clear RLE-buffer */ rlebuf.val = rlebuf.n = 0; } /* Read uncompressed elements from RLE-stream */ -static int -rle_fread (char *ptr, - int sz, - int nelem, - FILE *ifp) - +static gint +rle_fread (gchar *ptr, + gint sz, + gint nelem, + FILE *ifp) { int elem_read, cnt, val, err = 0; @@ -655,7 +660,7 @@ rle_fread (char *ptr, /* Get one byte of uncompressed data from RLE-stream */ -static int +static gint rle_fgetc (FILE *ifp) { int flag, runcnt, runval; @@ -690,15 +695,14 @@ rle_startwrite (FILE *ofp) /* Write uncompressed elements to RLE-stream */ -static int -rle_fwrite (char *ptr, - int sz, - int nelem, - FILE *ofp) - +static gint +rle_fwrite (gchar *ptr, + gint sz, + gint nelem, + FILE *ofp) { int elem_write, cnt, val, err = 0; - unsigned char *pixels = (unsigned char *)ptr; + guchar *pixels = (unsigned char *)ptr; for (elem_write = 0; elem_write < nelem; elem_write++) { @@ -714,10 +718,9 @@ rle_fwrite (char *ptr, /* Write uncompressed character to RLE-stream */ -static int -rle_fputc (int val, +static gint +rle_fputc (gint val, FILE *ofp) - { int retval; @@ -753,11 +756,10 @@ rle_fputc (int val, /* Write out a run with 0 < n < 257 */ -static int -rle_putrun (int n, - int val, +static gint +rle_putrun (gint n, + gint val, FILE *ofp) - { int retval, flag = 0x80; @@ -800,7 +802,6 @@ rle_endwrite (FILE *ofp) static void read_sun_header (FILE *ifp, L_SUNFILEHEADER *sunhdr) - { int j, err; L_CARD32 *cp; @@ -823,7 +824,6 @@ read_sun_header (FILE *ifp, static void write_sun_header (FILE *ofp, L_SUNFILEHEADER *sunhdr) - { int j, hdr_entries; L_CARD32 *cp; @@ -845,8 +845,7 @@ write_sun_header (FILE *ofp, static void read_sun_cols (FILE *ifp, L_SUNFILEHEADER *sunhdr, - unsigned char *colormap) - + guchar *colormap) { int ncols, err = 0; @@ -866,8 +865,7 @@ read_sun_cols (FILE *ifp, static void write_sun_cols (FILE *ofp, L_SUNFILEHEADER *sunhdr, - unsigned char *colormap) - + guchar *colormap) { int ncols; @@ -878,24 +876,24 @@ write_sun_cols (FILE *ofp, /* Set a GIMP colourtable using the sun colourmap */ -static void set_color_table (gint32 image_ID, - L_SUNFILEHEADER *sunhdr, - guchar *suncolmap) - +static void +set_color_table (gint32 image_ID, + L_SUNFILEHEADER *sunhdr, + guchar *suncolmap) { int ncols, j; - unsigned char ColorMap[256*3]; - + guchar ColorMap[256*3]; + ncols = sunhdr->l_ras_maplength / 3; if (ncols <= 0) return; - + for (j = 0; j < ncols; j++) { ColorMap[j*3] = suncolmap[j]; ColorMap[j*3+1] = suncolmap[j+ncols]; ColorMap[j*3+2] = suncolmap[j+2*ncols]; } - + #ifdef DEBUG printf ("Set GIMP colortable:\n"); for (j = 0; j < ncols; j++) @@ -908,66 +906,64 @@ static void set_color_table (gint32 image_ID, /* Create an image. Sets layer_ID, drawable and rgn. Returns image_ID */ static gint32 -create_new_image (char *filename, +create_new_image (gchar *filename, guint width, guint height, GImageType type, gint32 *layer_ID, GDrawable **drawable, GPixelRgn *pixel_rgn) - { gint32 image_ID; GDrawableType gdtype; - + if (type == GRAY) gdtype = GRAY_IMAGE; else if (type == INDEXED) gdtype = INDEXED_IMAGE; else gdtype = RGB_IMAGE; - + image_ID = gimp_image_new (width, height, type); gimp_image_set_filename (image_ID, filename); - + *layer_ID = gimp_layer_new (image_ID, _("Background"), width, height, gdtype, 100, NORMAL_MODE); gimp_image_add_layer (image_ID, *layer_ID, 0); - + *drawable = gimp_drawable_get (*layer_ID); gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width, (*drawable)->height, TRUE, FALSE); - + return (image_ID); } /* Load SUN-raster-file with depth 1 */ static gint32 -load_sun_d1 (char *filename, +load_sun_d1 (gchar *filename, FILE *ifp, L_SUNFILEHEADER *sunhdr, - unsigned char *suncolmap) - + guchar *suncolmap) { register int pix8; int width, height, linepad, scan_lines, tile_height; int i, j; - unsigned char *dest, *data; + guchar *dest, *data; gint32 layer_ID, image_ID; GPixelRgn pixel_rgn; GDrawable *drawable; - unsigned char bit2byte[256*8]; + guchar bit2byte[256*8]; L_SUNFILEHEADER sun_bwhdr; - unsigned char sun_bwcolmap[6] = { 255,0,255,0,255,0 }; + guchar sun_bwcolmap[6] = { 255,0,255,0,255,0 }; int err = 0, rle = (sunhdr->l_ras_type == RAS_TYPE_RLE); - + width = sunhdr->l_ras_width; height = sunhdr->l_ras_height; - + image_ID = create_new_image (filename, width, height, INDEXED, &layer_ID, &drawable, &pixel_rgn); - + tile_height = gimp_tile_height (); data = g_malloc (tile_height * width); - + if (suncolmap != NULL) /* Set up the specified colour map */ { set_color_table (image_ID, sunhdr, suncolmap); @@ -979,20 +975,20 @@ load_sun_d1 (char *filename, sun_bwhdr.l_ras_maplength = 6; set_color_table (image_ID, &sun_bwhdr, sun_bwcolmap); } - + /* Get an array for mapping 8 bits in a byte to 8 bytes */ dest = bit2byte; for (j = 0; j < 256; j++) for (i = 7; i >= 0; i--) *(dest++) = ((j & (1 << i)) != 0); - + linepad = (((sunhdr->l_ras_width+7)/8) % 2); /* Check for 16bit align */ - + if (rle) rle_startread (ifp); - + dest = data; scan_lines = 0; - + for (i = 0; i < height; i++) { j = width; @@ -1000,29 +996,29 @@ load_sun_d1 (char *filename, { pix8 = rle ? rle_getc (ifp) : getc (ifp); if (pix8 < 0) { err = 1; pix8 = 0; } - + memcpy (dest, bit2byte + pix8*8, 8); dest += 8; j -= 8; } - + if (j > 0) { pix8 = rle ? rle_getc (ifp) : getc (ifp); if (pix8 < 0) { err = 1; pix8 = 0; } - + memcpy (dest, bit2byte + pix8*8, j); dest += j; } - + if (linepad) err |= ((rle ? rle_getc (ifp) : getc (ifp)) < 0); - + scan_lines++; - + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) gimp_progress_update ((double)(i+1) / (double)height); - + if ((scan_lines == tile_height) || ((i+1) == height)) { gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, @@ -1031,14 +1027,14 @@ load_sun_d1 (char *filename, dest = data; } } - + g_free (data); - + if (err) - show_message (_("EOF encountered on reading")); - + g_message (_("EOF encountered on reading")); + gimp_drawable_flush (drawable); - + return (image_ID); } @@ -1046,29 +1042,28 @@ load_sun_d1 (char *filename, /* Load SUN-raster-file with depth 8 */ static gint32 -load_sun_d8 (char *filename, +load_sun_d8 (gchar *filename, FILE *ifp, L_SUNFILEHEADER *sunhdr, - unsigned char *suncolmap) - + guchar *suncolmap) { int width, height, linepad, i, j; int greyscale, ncols; int scan_lines, tile_height; - unsigned char *dest, *data; + guchar *dest, *data; gint32 layer_ID, image_ID; GPixelRgn pixel_rgn; GDrawable *drawable; int err = 0, rle = (sunhdr->l_ras_type == RAS_TYPE_RLE); - + width = sunhdr->l_ras_width; height = sunhdr->l_ras_height; - + /* This could also be a greyscale image. Check it */ ncols = sunhdr->l_ras_maplength / 3; - + greyscale = 1; /* Also greyscale if no colourmap present */ - + if ((ncols > 0) && (suncolmap != NULL)) { for (j = 0; j < ncols; j++) @@ -1082,39 +1077,39 @@ load_sun_d8 (char *filename, } } } - + image_ID = create_new_image (filename, width, height, greyscale ? GRAY : INDEXED, &layer_ID, &drawable, &pixel_rgn); - + tile_height = gimp_tile_height (); data = g_malloc (tile_height * width); - + if (!greyscale) set_color_table (image_ID, sunhdr, suncolmap); - + linepad = (sunhdr->l_ras_width % 2); - + if (rle) rle_startread (ifp); /* Initialize RLE-buffer */ - + dest = data; scan_lines = 0; - + for (i = 0; i < height; i++) { memset ((char *)dest, 0, width); err |= ((rle ? rle_fread ((char *)dest, 1, width, ifp) : fread ((char *)dest, 1, width, ifp)) != width); - + if (linepad) err |= ((rle ? rle_getc (ifp) : getc (ifp)) < 0); - + dest += width; scan_lines++; - + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) gimp_progress_update ((double)(i+1) / (double)height); - + if ((scan_lines == tile_height) || ((i+1) == height)) { gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, @@ -1123,60 +1118,59 @@ load_sun_d8 (char *filename, dest = data; } } - + g_free (data); - + if (err) - show_message (_("EOF encountered on reading")); - + g_message (_("EOF encountered on reading")); + gimp_drawable_flush (drawable); - + return (image_ID); } /* Load SUN-raster-file with depth 24 */ static gint32 -load_sun_d24 (char *filename, +load_sun_d24 (gchar *filename, FILE *ifp, L_SUNFILEHEADER *sunhdr, - unsigned char *suncolmap) - + guchar *suncolmap) { - register unsigned char *dest, blue; - unsigned char *data; + register guchar *dest, blue; + guchar *data; int width, height, linepad, tile_height, scan_lines; int i, j; gint32 layer_ID, image_ID; GPixelRgn pixel_rgn; GDrawable *drawable; int err = 0, rle = (sunhdr->l_ras_type == RAS_TYPE_RLE); - + width = sunhdr->l_ras_width; height = sunhdr->l_ras_height; - + image_ID = create_new_image (filename, width, height, RGB, &layer_ID, &drawable, &pixel_rgn); - + tile_height = gimp_tile_height (); data = g_malloc (tile_height * width * 3); - + linepad = ((sunhdr->l_ras_width*3) % 2); if (rle) rle_startread (ifp); /* Initialize RLE-buffer */ - + dest = data; scan_lines = 0; - + for (i = 0; i < height; i++) { memset ((char *)dest, 0, 3*width); err |= ((rle ? rle_fread ((char *)dest, 3, width, ifp) : fread ((char *)dest, 3, width, ifp)) != width); - + if (linepad) err |= ((rle ? rle_getc (ifp) : getc (ifp)) < 0); - + if (sunhdr->l_ras_type == 3) /* RGB-format ? That is what GIMP wants */ { dest += width*3; @@ -1191,12 +1185,12 @@ load_sun_d24 (char *filename, dest += 3; } } - + scan_lines++; - + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) gimp_progress_update ((double)(i+1) / (double)height); - + if ((scan_lines == tile_height) || ((i+1) == height)) { gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, @@ -1205,14 +1199,14 @@ load_sun_d24 (char *filename, dest = data; } } - + g_free (data); - + if (err) - show_message (_("EOF encountered on reading")); - + g_message (_("EOF encountered on reading")); + gimp_drawable_flush (drawable); - + return (image_ID); } @@ -1220,14 +1214,13 @@ load_sun_d24 (char *filename, /* Load SUN-raster-file with depth 32 */ static gint32 -load_sun_d32 (char *filename, +load_sun_d32 (gchar *filename, FILE *ifp, L_SUNFILEHEADER *sunhdr, - unsigned char *suncolmap) - + guchar *suncolmap) { - register unsigned char *dest, blue; - unsigned char *data; + register guchar *dest, blue; + guchar *data; int width, height, tile_height, scan_lines; int i, j; gint32 layer_ID, image_ID; @@ -1236,22 +1229,22 @@ load_sun_d32 (char *filename, int err = 0, cerr, rle = (sunhdr->l_ras_type == RAS_TYPE_RLE); width = sunhdr->l_ras_width; height = sunhdr->l_ras_height; - + /* initialize */ - + cerr = 0; - + image_ID = create_new_image (filename, width, height, RGB, &layer_ID, &drawable, &pixel_rgn); - + tile_height = gimp_tile_height (); data = g_malloc (tile_height * width * 3); - + if (rle) rle_startread (ifp); /* Initialize RLE-buffer */ - + dest = data; scan_lines = 0; - + for (i = 0; i < height; i++) { if (rle) @@ -1275,7 +1268,7 @@ load_sun_d32 (char *filename, } } err |= (cerr < 0); - + if (sunhdr->l_ras_type != 3) /* BGR format ? Correct it */ { for (j = 0; j < width; j++) @@ -1287,12 +1280,12 @@ load_sun_d32 (char *filename, } dest += width*3; } - + scan_lines++; - + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) gimp_progress_update ((double)(i+1) / (double)height); - + if ((scan_lines == tile_height) || ((i+1) == height)) { gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i-scan_lines+1, @@ -1301,14 +1294,14 @@ load_sun_d32 (char *filename, dest = data; } } - + g_free (data); - + if (err) - show_message (_("EOF encountered on reading")); - + g_message (_("EOF encountered on reading")); + gimp_drawable_flush (drawable); - + return (image_ID); } @@ -1317,20 +1310,19 @@ static gint save_index (FILE *ofp, gint32 image_ID, gint32 drawable_ID, - int grey, - int rle) - + gint grey, + gint rle) { int height, width, linepad, i, j; int ncols, bw, is_bw, is_wb, bpl; int tile_height; long tmp = 0; - unsigned char *cmap, *bwline = NULL; - unsigned char *data, *src; + guchar *cmap, *bwline = NULL; + guchar *data, *src; L_SUNFILEHEADER sunhdr; - unsigned char sun_colormap[256*3]; - static unsigned char sun_bwmap[6] = { 0,255,0,255,0,255 }; - static unsigned char sun_wbmap[6] = { 255,0,255,0,255,0 }; + guchar sun_colormap[256*3]; + static guchar sun_bwmap[6] = { 0,255,0,255,0,255 }; + static guchar sun_wbmap[6] = { 255,0,255,0,255,0 }; unsigned char *suncolmap = sun_colormap; GPixelRgn pixel_rgn; GDrawable *drawable; @@ -1351,7 +1343,7 @@ save_index (FILE *ofp, if (grey) { ncols = 256; - + for (j = 0; j < ncols; j++) { suncolmap[j] = j; @@ -1362,7 +1354,7 @@ save_index (FILE *ofp, else { cmap = gimp_image_get_cmap (image_ID, &ncols); - + for (j = 0; j < ncols; j++) { suncolmap[j] = *(cmap++); @@ -1370,7 +1362,7 @@ save_index (FILE *ofp, suncolmap[j+ncols*2] = *(cmap++); } } - + bw = (ncols == 2); /* Maybe this is a two-colour image */ if (bw) { @@ -1384,11 +1376,11 @@ save_index (FILE *ofp, is_bw = (memcmp (suncolmap, sun_bwmap, 6) == 0); is_wb = (memcmp (suncolmap, sun_wbmap, 6) == 0); } - + /* Number of data bytes per line */ bpl = bw ? (width+7)/8 : width; linepad = bpl % 2; - + /* Fill in the SUN header */ sunhdr.l_ras_magic = RAS_MAGIC; sunhdr.l_ras_width = width; @@ -1406,7 +1398,7 @@ save_index (FILE *ofp, sunhdr.l_ras_maptype = 1; /* RGB colourmap */ sunhdr.l_ras_maplength = ncols*3; /* Length of colourmap */ } - + write_sun_header (ofp, &sunhdr); if (sunhdr.l_ras_maplength > 0) @@ -1430,7 +1422,7 @@ save_index (FILE *ofp, (*write_fun) (bwline, bpl, 1, ofp); if (linepad) (*write_fun) ((char *)&tmp, linepad, 1, ofp); src += width; - + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) gimp_progress_update ((double) i / (double) height); } @@ -1443,7 +1435,7 @@ save_index (FILE *ofp, (*write_fun) ((char *)src, width, 1, ofp); if (linepad) (*write_fun) ((char *)&tmp, linepad, 1, ofp); src += width; - + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) gimp_progress_update ((double) i / (double) height); } @@ -1451,17 +1443,17 @@ save_index (FILE *ofp, if (rle) rle_endwrite (ofp); - + g_free (data); if (bwline) g_free (bwline); - + gimp_drawable_detach (drawable); if (ferror (ofp)) { - show_message (_("Write error occured")); + g_message (_("Write error occured")); return (FALSE); } return (TRUE); @@ -1473,12 +1465,11 @@ static gint save_rgb (FILE *ofp, gint32 image_ID, gint32 drawable_ID, - int rle) - + gint rle) { int height, width, tile_height, linepad; int i, j, bpp; - unsigned char *data, *src; + guchar *data, *src; L_SUNFILEHEADER sunhdr; GPixelRgn pixel_rgn; GDrawable *drawable; @@ -1492,7 +1483,7 @@ save_rgb (FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (tile_height * width * drawable->bpp); + src = data = (guchar *) g_malloc (tile_height * width * drawable->bpp); /* #define SUNRAS_32 */ #ifdef SUNRAS_32 @@ -1543,7 +1534,7 @@ save_rgb (FILE *ofp, else /* Write runlength encoded */ { rle_startwrite (ofp); - + for (i = 0; i < height; i++) { if ((i % tile_height) == 0) GET_RGB_TILE (data); /* Get more data */ @@ -1557,20 +1548,20 @@ save_rgb (FILE *ofp, } for (j = 0; j < linepad; j++) rle_putc (0, ofp); - + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) gimp_progress_update ((double) i / (double) height); } - + rle_endwrite (ofp); } g_free (data); - + gimp_drawable_detach (drawable); - + if (ferror (ofp)) { - show_message (_("Write error occured")); + g_message (_("Write error occured")); return (FALSE); } return (TRUE); @@ -1581,31 +1572,24 @@ save_rgb (FILE *ofp, /* Save interface functions */ static void -init_gtk () +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("sunras"); - + gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } - static gint save_dialog (void) - { GtkWidget *dlg; - GtkWidget *toggle; GtkWidget *frame; - GtkWidget *toggle_vbox; - GSList *group; - gint use_rle = (psvals.rle == TRUE); - gint use_std = (psvals.rle == FALSE); dlg = gimp_dialog_new (_("Save as SUNRAS"), "sunras", gimp_plugin_help_func, "filters/sunras.html", @@ -1624,34 +1608,16 @@ save_dialog (void) NULL); /* file save type */ - frame = gtk_frame_new (_("Data Formatting")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + frame = gimp_radio_group_new2 (TRUE, _("Data Formatting"), + gimp_radio_button_update, + &psvals.rle, (gpointer) psvals.rle, + + _("RunLength Encoded"), (gpointer) TRUE, NULL, + _("Standard"), (gpointer) FALSE, NULL, + + NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 2); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - group = NULL; - toggle = gtk_radio_button_new_with_label (group, _("RunLength Encoded")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_rle); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_rle); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("Standard")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_std); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_std); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); gtk_widget_show (frame); gtk_widget_show (dlg); @@ -1659,50 +1625,18 @@ save_dialog (void) gtk_main (); gdk_flush (); - if (use_rle) - psvals.rle = TRUE; - else - psvals.rle = FALSE; - return psint.run; } - static void save_ok_callback (GtkWidget *widget, gpointer data) - { psint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } - -static void -save_toggle_update (GtkWidget *widget, - gpointer data) - -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -/* Show a message. Where to show it, depends on the runmode */ -static void -show_message (char *message) -{ - if (l_run_mode == RUN_INTERACTIVE) - g_message (message); - else - fprintf (stderr, "sunras: %s\n", message); -} - static int my_fwrite (void *ptr, int size, @@ -1711,7 +1645,3 @@ my_fwrite (void *ptr, { return fwrite(ptr, size, nmemb, stream); } - - - - diff --git a/plug-ins/common/tga.c b/plug-ins/common/tga.c index 2964ee8295..5ca3506091 100644 --- a/plug-ins/common/tga.c +++ b/plug-ins/common/tga.c @@ -85,6 +85,7 @@ #include #include + #include "libgimp/stdplugins-intl.h" /* Round up a division to the nearest integer. */ @@ -102,7 +103,7 @@ static TgaSaveVals tsvals = typedef struct _TgaSaveInterface { - unsigned char run; + gint run; } TgaSaveInterface; static TgaSaveInterface tsint = @@ -166,14 +167,14 @@ static struct /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); -static gint save_image (char *filename, +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); @@ -181,15 +182,13 @@ static void init_gtk (void); static gint save_dialog (void); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_toggle_update (GtkWidget *widget, - gpointer data); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; @@ -200,7 +199,7 @@ static int verbose = VERBOSE; #endif static void -query () +query (void) { static GParamDef load_args[] = { @@ -212,9 +211,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); - + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -225,7 +224,7 @@ query () { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, { PARAM_INT32, "rle", "Enable RLE compression" }, } ; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -241,7 +240,6 @@ query () nload_args, nload_return_vals, load_args, load_return_vals); - gimp_install_procedure ("file_tga_save", _("saves files in the Targa file format"), "FIXME: write help for tga_save", @@ -254,24 +252,27 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_tga_load", "tga", "", + gimp_register_magic_load_handler ("file_tga_load", + "tga", + "", "0&,byte,10,2&,byte,1,3&,byte,>0,3,byte,<9"); - gimp_register_save_handler ("file_tga_save", "tga", ""); - + gimp_register_save_handler ("file_tga_save", + "tga", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GStatusType status = STATUS_SUCCESS; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; #ifdef PROFILE @@ -281,9 +282,9 @@ run (char *name, run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; #ifdef VERBOSE if (verbose) @@ -293,43 +294,45 @@ run (char *name, if (strcmp (name, "file_tga_load") == 0) { INIT_I18N(); + #ifdef PROFILE times (&tbuf1); #endif + image_ID = load_image (param[1].data.d_string); if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_tga_save") == 0) { INIT_I18N_UI(); init_gtk (); - + image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - + /* eventually export the image */ switch (run_mode) { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: export = gimp_export_image (&image_ID, &drawable_ID, "TGA", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED | + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED | CAN_HANDLE_ALPHA)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -345,15 +348,16 @@ run (char *name, /* First acquire information with a dialog */ if (! save_dialog ()) - return; - + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 6) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { tsvals.rle = (param[5].data.d_int32) ? TRUE : FALSE; } @@ -371,20 +375,29 @@ run (char *name, #ifdef PROFILE times (&tbuf1); #endif - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) - { - /* Store psvals data */ - gimp_set_data ("file_tga_save", &tsvals, sizeof (tsvals)); - values[0].data.d_status = STATUS_SUCCESS; + if (status == STATUS_SUCCESS) + { + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + /* Store psvals data */ + gimp_set_data ("file_tga_save", &tsvals, sizeof (tsvals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; #ifdef PROFILE times (&tbuf2); @@ -394,10 +407,12 @@ run (char *name, #endif } -static gint32 ReadImage (FILE *fp, struct tga_header *hdr, char *filename); +static gint32 ReadImage (FILE *fp, + struct tga_header *hdr, + gchar *filename); static gint32 -load_image (char *filename) +load_image (gchar *filename) { FILE *fp; char * name_buf; @@ -406,8 +421,9 @@ load_image (char *filename) gint32 image_ID = -1; fp = fopen (filename, "rb"); - if (!fp) { - printf ("TGA: can't open \"%s\"\n", filename); + if (!fp) + { + g_message ("TGA: can't open \"%s\"\n", filename); return -1; } @@ -419,7 +435,7 @@ load_image (char *filename) if (fseek (fp, 0L - (sizeof (tga_footer)), SEEK_END) || fread (&tga_footer, sizeof (tga_footer), 1, fp) != 1) { - printf ("TGA: Cannot read footer from \"%s\"\n", filename); + g_message ("TGA: Cannot read footer from \"%s\"\n", filename); return -1; } @@ -436,15 +452,16 @@ load_image (char *filename) #endif if (fseek (fp, 0, SEEK_SET) || - fread (&hdr, sizeof (hdr), 1, fp) != 1) { - printf("TGA: Cannot read header from \"%s\"\n", filename); - return -1; - } + fread (&hdr, sizeof (hdr), 1, fp) != 1) + { + g_message ("TGA: Cannot read header from \"%s\"\n", filename); + return -1; + } /* Skip the image ID field. */ if (hdr.idLength && fseek (fp, hdr.idLength, SEEK_CUR)) { - printf ("TGA: Cannot skip ID field in \"%s\"\n", filename); + g_message ("TGA: Cannot skip ID field in \"%s\"\n", filename); return -1; } @@ -1153,7 +1170,7 @@ ReadImage (FILE *fp, static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) { @@ -1230,10 +1247,11 @@ save_image (char *filename, hdr.heightLo = (height & 0xff); hdr.heightHi = (height >> 8); - if((fp = fopen(filename, "wb")) == NULL) { - printf("TGA: can't create \"%s\"\n", filename); - return FALSE; - } + if((fp = fopen(filename, "wb")) == NULL) + { + g_message ("TGA: can't create \"%s\"\n", filename); + return FALSE; + } /* Mark our save ID. */ hdr.idLength = strlen (SAVE_ID_STRING); @@ -1250,7 +1268,7 @@ save_image (char *filename, cmap = gimp_image_get_cmap (image_ID, &colors); if (colors > 256) { - printf ("TGA: cannot handle colormap with more than 256 colors (got %d)\n", colors); + g_message ("TGA: cannot handle colormap with more than 256 colors (got %d)\n", colors); return FALSE; } @@ -1408,21 +1426,21 @@ save_image (char *filename, gimp_progress_update ((double) (i + tileheight) / (double) height); } - gimp_drawable_detach(drawable); + gimp_drawable_detach (drawable); g_free (data); - fclose(fp); + fclose (fp); return status; } static void -init_gtk () +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("tga"); gtk_init (&argc, &argv); @@ -1454,19 +1472,20 @@ save_dialog (void) NULL); /* regular tga parameter settings */ - frame = gtk_frame_new ( _("Targa Options")); + frame = gtk_frame_new (_("Targa Options")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_container_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); + vbox = gtk_vbox_new (FALSE, 2); gtk_container_border_width (GTK_CONTAINER (vbox), 4); gtk_container_add (GTK_CONTAINER (frame), vbox); /* rle */ - toggle = gtk_check_button_new_with_label ( _("RLE compression")); + toggle = gtk_check_button_new_with_label (_("RLE compression")); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &tsvals.rle); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), tsvals.rle); gtk_widget_show (toggle); @@ -1482,26 +1501,11 @@ save_dialog (void) return tsint.run; } -/* Save interface functions */ - static void save_ok_callback (GtkWidget *widget, gpointer data) { tsint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } - -static void -save_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} diff --git a/plug-ins/common/tiff.c b/plug-ins/common/tiff.c index 4335f988af..225792431b 100644 --- a/plug-ins/common/tiff.c +++ b/plug-ins/common/tiff.c @@ -31,13 +31,15 @@ ** other special, indirect and consequential damages. */ +#include "config.h" + #include #include #include -#include "config.h" #include #include + #include "libgimp/stdplugins-intl.h" typedef struct @@ -51,72 +53,102 @@ typedef struct gint run; } TiffSaveInterface; -typedef struct { - gint32 ID; +typedef struct +{ + gint32 ID; GDrawable *drawable; - GPixelRgn pixel_rgn; - guchar *pixels; - guchar *pixel; + GPixelRgn pixel_rgn; + guchar *pixels; + guchar *pixel; } channel_data; /* Declare some local functions. */ -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (char *filename); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); -static void load_rgba (TIFF *tif, channel_data *channel); -static void load_lines (TIFF *tif, channel_data *channel, - unsigned short bps, unsigned short photomet, - int alpha, int extra); -static void load_tiles (TIFF *tif, channel_data *channel, - unsigned short bps, unsigned short photomet, - int alpha, int extra); +static gint32 load_image (gchar *filename); -static void read_separate (guchar *source, channel_data *channel, - unsigned short bps, unsigned short photomet, - int startcol, int startrow, int rows, int cols, - int alpha, int extra, int sample); -static void read_16bit (guchar *source, channel_data *channel, - unsigned short photomet, - int startcol, int startrow, int rows, int cols, - int alpha, int extra); -static void read_8bit (guchar *source, channel_data *channel, - unsigned short photomet, - int startcol, int startrow, int rows, int cols, - int alpha, int extra); -static void read_default (guchar *source, channel_data *channel, - unsigned short bps, unsigned short photomet, - int startcol, int startrow, int rows, int cols, - int alpha, int extra); +static void load_rgba (TIFF *tif, + channel_data *channel); +static void load_lines (TIFF *tif, + channel_data *channel, + gushort bps, + gushort photomet, + gint alpha, + gint extra); +static void load_tiles (TIFF *tif, + channel_data *channel, + gushort bps, + gushort photomet, + gint alpha, + gint extra); -static gint save_image (char *filename, - gint32 image, - gint32 drawable, - gint32 orig_image); +static void read_separate (guchar *source, + channel_data *channel, + gushort bps, + gushort photomet, + gint startcol, + gint startrow, + gint rows, + gint cols, + gint alpha, + gint extra, + gint sample); +static void read_16bit (guchar *source, + channel_data *channel, + gushort photomet, + gint startcol, + gint startrow, + gint rows, + gint cols, + gint alpha, + gint extra); +static void read_8bit (guchar *source, + channel_data *channel, + gushort photomet, + gint startcol, + gint startrow, + gint rows, + gint cols, + gint alpha, + gint extra); +static void read_default (guchar *source, + channel_data *channel, + gushort bps, + gushort photomet, + gint startcol, + gint startrow, + gint rows, + gint cols, + gint alpha, + gint extra); -static void init_gtk (); -static gint save_dialog (); +static gint save_image (gchar *filename, + gint32 image, + gint32 drawable, + gint32 orig_image); -static void save_ok_callback (GtkWidget *widget, - gpointer data); -static void save_toggle_update (GtkWidget *widget, - gpointer data); -static void comment_entry_callback (GtkWidget *widget, - gpointer data); +static void init_gtk (void); +static gint save_dialog (void); + +static void save_ok_callback (GtkWidget *widget, + gpointer data); +static void comment_entry_callback (GtkWidget *widget, + gpointer data); #define DEFAULT_COMMENT "Created with The GIMP" GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static TiffSaveVals tsvals = @@ -126,7 +158,7 @@ static TiffSaveVals tsvals = static TiffSaveInterface tsint = { - FALSE /* run */ + FALSE /* run */ }; static char *image_comment= NULL; @@ -134,7 +166,7 @@ static char *image_comment= NULL; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -146,8 +178,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -158,7 +191,7 @@ query () { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, { PARAM_INT32, "compression", "Compression type: { NONE (0), LZW (1), PACKBITS (2)" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -186,38 +219,39 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_tiff_load", "tif,tiff", "", - "0,string,II*\\0,0,string,MM\\0*"); - gimp_register_save_handler ("file_tiff_save", "tif,tiff", ""); + gimp_register_magic_load_handler ("file_tiff_load", + "tif,tiff", + "", + "0,string,II*\\0,0,string,MM\\0*"); + gimp_register_save_handler ("file_tiff_save", + "tif,tiff", + ""); } - - - static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; #ifdef GIMP_HAVE_PARASITES - Parasite *parasite; + Parasite *parasite; #endif /* GIMP_HAVE_PARASITES */ - gint32 image; - gint32 drawable; - gint32 orig_image; + gint32 image; + gint32 drawable; + gint32 orig_image; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_tiff_load") == 0) { @@ -227,13 +261,12 @@ run (char *name, if (image != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_tiff_save") == 0) @@ -241,23 +274,24 @@ run (char *name, image = orig_image = param[1].data.d_int32; drawable = param[2].data.d_int32; -/* Do this right this time, if POSSIBLE query for parasites, otherwise - or if there isn't one, choose the DEFAULT_COMMENT */ + /* Do this right this time, if POSSIBLE query for parasites, otherwise + or if there isn't one, choose the DEFAULT_COMMENT */ /* eventually export the image */ switch (run_mode) { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: - INIT_I18N_UI(); + INIT_I18N_UI(); init_gtk (); export = gimp_export_image (&image, &drawable, "TIFF", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED | + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED | CAN_HANDLE_ALPHA)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -266,42 +300,44 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image, "gimp-comment"); if (parasite) image_comment = g_strdup (parasite->data); - parasite_free(parasite); + parasite_free (parasite); #endif /* GIMP_HAVE_PARASITES */ - if (!image_comment) image_comment = g_strdup (DEFAULT_COMMENT); + if (!image_comment) + image_comment = g_strdup (DEFAULT_COMMENT); switch (run_mode) { case RUN_INTERACTIVE: - { /* Possibly retrieve data */ gimp_get_data ("file_tiff_save", &tsvals); + #ifdef GIMP_HAVE_PARASITES parasite = gimp_image_parasite_find (orig_image, "tiff-save-options"); if (parasite) { - tsvals.compression = ((TiffSaveVals *)parasite->data)->compression; + tsvals.compression = + ((TiffSaveVals *) parasite->data)->compression; } - parasite_free(parasite); + parasite_free (parasite); #endif /* GIMP_HAVE_PARASITES */ /* First acquire information with a dialog */ if (! save_dialog ()) - return; - } - break; + status = STATUS_CANCEL; + break; case RUN_NONINTERACTIVE: - INIT_I18N(); + INIT_I18N(); /* Make sure all the arguments are there! */ if (nparams != 6) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { switch (param[5].data.d_int32) { @@ -314,41 +350,49 @@ run (char *name, case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ - { gimp_get_data ("file_tiff_save", &tsvals); + #ifdef GIMP_HAVE_PARASITES parasite = gimp_image_parasite_find (orig_image, "tiff-save-options"); if (parasite) { - tsvals.compression = ((TiffSaveVals *)parasite->data)->compression; + tsvals.compression = + ((TiffSaveVals *) parasite->data)->compression; } parasite_free (parasite); #endif /* GIMP_HAVE_PARASITES */ - } break; default: break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, image, drawable, orig_image)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_tiff_save", &tsvals, sizeof (TiffSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, image, drawable, orig_image)) + { + /* Store mvals data */ + gimp_set_data ("file_tiff_save", &tsvals, sizeof (TiffSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) gimp_image_delete (image); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } -static gint32 -load_image (char *filename) +static gint32 +load_image (gchar *filename) { TIFF *tif; unsigned short bps, spp, photomet; @@ -497,8 +541,8 @@ load_image (char *filename) /* any resolution info in the file? */ #ifdef GIMP_HAVE_RESOLUTION_INFO { - float xres = 72.0, yres = 72.0; - unsigned short read_unit; + gfloat xres = 72.0, yres = 72.0; + gushort read_unit; GUnit unit = UNIT_PIXEL; /* invalid unit */ if (TIFFGetField (tif, TIFFTAG_XRESOLUTION, &xres)) { @@ -526,6 +570,7 @@ load_image (char *filename) default: g_message ("TIFF file error: unknown resolution unit type %d, " "assuming dpi\n", read_unit); + break; } } else @@ -534,7 +579,7 @@ load_image (char *filename) g_message ("TIFF warning: resolution specified without\n" "any units tag, assuming dpi\n"); } - } + } else { /* xres but no yres */ g_message("TIFF warning: no y resolution info, assuming same as x\n"); @@ -1374,12 +1419,12 @@ static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("tiff"); - + gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); } @@ -1388,17 +1433,11 @@ static gint save_dialog (void) { GtkWidget *dlg; - GtkWidget *toggle; + GtkWidget *vbox; GtkWidget *frame; - GtkWidget *toggle_vbox; GtkWidget *hbox; GtkWidget *label; GtkWidget *entry; - GSList *group; - - gint use_none = (tsvals.compression == COMPRESSION_NONE); - gint use_lzw = (tsvals.compression == COMPRESSION_LZW); - gint use_packbits = (tsvals.compression == COMPRESSION_PACKBITS); dlg = gimp_dialog_new ( _("Save as TIFF"), "tiff", gimp_plugin_help_func, "filters/tiff.html", @@ -1416,61 +1455,27 @@ save_dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - /* hbox for compression and fillorder settings */ - hbox = gtk_hbox_new (FALSE, 6); + vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), vbox, FALSE, TRUE, 0); /* compression */ - frame = gtk_frame_new ( _("Compression")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, FALSE, 0); + frame = + gimp_radio_group_new2 (TRUE, _("Compression"), + gimp_radio_button_update, + &tsvals.compression, (gpointer) tsvals.compression, - toggle_vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 4); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + _("None"), (gpointer) COMPRESSION_NONE, NULL, + _("LZW"), (gpointer) COMPRESSION_LZW, NULL, + _("Pack Bits"), (gpointer) COMPRESSION_PACKBITS, NULL, - group = NULL; - toggle = gtk_radio_button_new_with_label (group, _("None")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_none); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_none); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("LZW")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_lzw); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_lzw); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("Pack Bits")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) save_toggle_update, - &use_packbits); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_packbits); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), hbox, FALSE, TRUE, 0); - gtk_widget_show (hbox); - /* comment entry */ - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); - gtk_container_set_border_width (GTK_CONTAINER (frame), 4); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, FALSE, TRUE, 0); - hbox = gtk_hbox_new (FALSE, 4); - gtk_container_add (GTK_CONTAINER (frame), hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new ( _("Comment:")); @@ -1482,29 +1487,20 @@ save_dialog (void) gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); gtk_entry_set_text (GTK_ENTRY (entry), image_comment); gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) comment_entry_callback, + GTK_SIGNAL_FUNC (comment_entry_callback), NULL); gtk_widget_show (frame); + gtk_widget_show (vbox); gtk_widget_show (dlg); gtk_main (); gdk_flush (); - if (use_none) - tsvals.compression = COMPRESSION_NONE; - else if (use_lzw) - tsvals.compression = COMPRESSION_LZW; - else if (use_packbits) - tsvals.compression = COMPRESSION_PACKBITS; - return tsint.run; } - -/* Save interface functions */ - static void save_ok_callback (GtkWidget *widget, gpointer data) @@ -1513,29 +1509,15 @@ save_ok_callback (GtkWidget *widget, gtk_widget_destroy (GTK_WIDGET (data)); } -static void -save_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - static void comment_entry_callback (GtkWidget *widget, gpointer data) { - int len; - char *text; + gint len; + gchar *text; text = gtk_entry_get_text (GTK_ENTRY (widget)); - len = strlen(text); + len = strlen (text); /* Temporary kludge for overlength strings - just return */ if (len > 240) diff --git a/plug-ins/common/tile.c b/plug-ins/common/tile.c index b179eb5e6c..e82a0eef00 100644 --- a/plug-ins/common/tile.c +++ b/plug-ins/common/tile.c @@ -19,90 +19,89 @@ /* * This filter tiles an image to arbitrary width and height */ +#include "config.h" + #include #include #include -#include "config.h" #include #include #include + #include "libgimp/stdplugins-intl.h" -#define ENTRY_WIDTH 60 -#define ENTRY_HEIGHT 25 - -typedef struct { +typedef struct +{ gint new_width; gint new_height; gint constrain; gint new_image; } TileVals; -typedef struct { - GtkWidget *width_entry; - GtkWidget *height_entry; - gint orig_width; - gint orig_height; - gint new_image; - gint run; +typedef struct +{ + GtkObject *width_adj; + GtkObject *height_adj; + gint orig_width; + gint orig_height; + gint run; } TileInterface; /* Declare a local function. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); + static gint32 tile (gint32 image_id, gint32 drawable_id, gint32 *layer_id); -static gint tile_dialog (gint width, - gint height); - -static void tile_ok_callback (GtkWidget *widget, - gpointer data); -static void tile_toggle_update (GtkWidget *widget, - gpointer data); -static void tile_entry_update (GtkWidget *widget, - gpointer data); +static gint tile_dialog (gint width, + gint height); +static void tile_ok_callback (GtkWidget *widget, + gpointer data); +static void tile_chain_button_update (GtkWidget *widget, + gpointer data); +static void tile_adjustment_update (GtkAdjustment *adjustment, + gpointer data); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static TileVals tvals = { - 1, /* new_width */ - 1, /* new_height */ - TRUE, /* constrain */ - TRUE /* new_image */ + 1, /* new_width */ + 1, /* new_height */ + TRUE, /* constrain */ + TRUE /* new_image */ }; static TileInterface tint = { - NULL, /* width_entry */ - NULL, /* height_entry */ - 0, /* orig_width */ - 0, /* orig_height */ - TRUE, /* new_image */ - FALSE /* run */ + NULL, /* width_adj */ + NULL, /* height_adj */ + 0, /* orig_width */ + 0, /* orig_height */ + FALSE /* run */ }; MAIN () static void -query () +query (void) { static GParamDef args[] = { @@ -118,8 +117,8 @@ query () { PARAM_IMAGE, "new_image", "Output image (N/A if new_image == FALSE)" }, { PARAM_LAYER, "new_layer", "Output layer (N/A if new_image == FALSE)" }, }; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = sizeof (return_vals) / sizeof (return_vals[0]); + static gint nargs = sizeof (args) / sizeof (args[0]); + static gint nreturn_vals = sizeof (return_vals) / sizeof (return_vals[0]); INIT_I18N(); @@ -137,17 +136,17 @@ query () } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[3]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 new_layer; - gint width, height; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 new_layer; + gint width, height; run_mode = param[0].data.d_int32; @@ -225,9 +224,9 @@ run (char *name, } static gint32 -tile (gint32 image_id, - gint32 drawable_id, - gint32 *layer_id) +tile (gint32 image_id, + gint32 drawable_id, + gint32 *layer_id) { GPixelRgn src_rgn, dest_rgn; GDrawable *drawable, *new_layer; @@ -264,7 +263,8 @@ tile (gint32 image_id, break; } - new_image_id = gimp_image_new (tvals.new_width, tvals.new_height, image_type); + new_image_id = gimp_image_new (tvals.new_width, tvals.new_height, + image_type); *layer_id = gimp_layer_new (new_image_id, _("Background"), tvals.new_width, tvals.new_height, gimp_drawable_type (drawable_id), @@ -277,9 +277,7 @@ tile (gint32 image_id, } else { - gimp_run_procedure ("gimp_undo_push_group_start", &nreturn_vals, - PARAM_IMAGE, image_id, - PARAM_END); + gimp_undo_push_group_start (image_id); gimp_run_procedure ("gimp_image_resize", &nreturn_vals, PARAM_IMAGE, image_id, @@ -368,11 +366,11 @@ static gint tile_dialog (gint width, gint height) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *toggle; GtkWidget *frame; GtkWidget *table; - gchar buffer[12]; + GtkWidget *spinbutton; + GtkWidget *chain; + GtkWidget *toggle; gchar **argv; gint argc; @@ -383,9 +381,9 @@ tile_dialog (gint width, gint height) gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); - tint.orig_width = width; + tint.orig_width = width; tint.orig_height = height; - tvals.new_width = width; + tvals.new_width = width; tvals.new_height = height; dlg = gimp_dialog_new ( _("Tile"), "tile", @@ -405,65 +403,49 @@ tile_dialog (gint width, gint height) NULL); /* parameter settings */ - frame = gtk_frame_new ( _("Tile to New Size")); + frame = gtk_frame_new (_("Tile to New Size")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (4, 2, FALSE); + table = gtk_table_new (3, 3, FALSE); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 4); - label = gtk_label_new ( _("Width:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - tint.width_entry = gtk_entry_new (); - gtk_widget_set_usize (tint.width_entry, ENTRY_WIDTH, ENTRY_HEIGHT); - g_snprintf (buffer, sizeof (buffer), "%d", width); - gtk_entry_set_text (GTK_ENTRY (tint.width_entry), buffer); - gtk_table_attach (GTK_TABLE (table), tint.width_entry, - 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_signal_connect (GTK_OBJECT (tint.width_entry), "changed", - (GtkSignalFunc) tile_entry_update, + spinbutton = gimp_spin_button_new (&tint.width_adj, width, + 1, width, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Width:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (tint.width_adj), "value_changed", + GTK_SIGNAL_FUNC (tile_adjustment_update), &tvals.new_width); - gtk_widget_show (tint.width_entry); - label = gtk_label_new ( _("Height:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - tint.height_entry = gtk_entry_new (); - gtk_widget_set_usize (tint.height_entry, ENTRY_WIDTH, ENTRY_HEIGHT); - g_snprintf (buffer, sizeof (buffer), "%d", height); - gtk_entry_set_text (GTK_ENTRY (tint.height_entry), buffer); - gtk_table_attach (GTK_TABLE (table), tint.height_entry, - 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_signal_connect (GTK_OBJECT (tint.height_entry), "changed", - (GtkSignalFunc) tile_entry_update, + spinbutton = gimp_spin_button_new (&tint.height_adj, height, + 1, height, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Height:"), 1.0, 0.5, + spinbutton, FALSE); + gtk_signal_connect (GTK_OBJECT (tint.height_adj), "value_changed", + GTK_SIGNAL_FUNC (tile_adjustment_update), &tvals.new_height); - gtk_widget_show (tint.height_entry); - toggle = gtk_check_button_new_with_label ( _("Constrain Ratio")); - gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 2, 3, + chain = gimp_chain_button_new (GIMP_CHAIN_RIGHT); + gimp_chain_button_set_active (GIMP_CHAIN_BUTTON (chain), tvals.constrain); + gtk_table_attach (GTK_TABLE (table), chain, 2, 3, 0, 2, + GTK_SHRINK, GTK_FILL | GTK_EXPAND, 0, 0); + gtk_signal_connect (GTK_OBJECT (GIMP_CHAIN_BUTTON (chain)->button), "clicked", + GTK_SIGNAL_FUNC (tile_chain_button_update), + chain); + gtk_widget_show (chain); + + toggle = gtk_check_button_new_with_label (_("New Image")); + gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) tile_toggle_update, - &tvals.constrain); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), tvals.constrain); - gtk_widget_show (toggle); - - toggle = gtk_check_button_new_with_label ( _("New Image")); - gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 3, 4, - GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) tile_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &tvals.new_image); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), tvals.new_image); gtk_widget_show (toggle); @@ -486,55 +468,63 @@ tile_ok_callback (GtkWidget *widget, gpointer data) { tint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } static void -tile_toggle_update (GtkWidget *widget, - gpointer data) +tile_chain_button_update (GtkWidget *widget, + gpointer data) { - gint *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; + tvals.constrain = gimp_chain_button_get_active (GIMP_CHAIN_BUTTON (data)); } - static void -tile_entry_update (GtkWidget *widget, - gpointer data) +tile_adjustment_update (GtkAdjustment *adjustment, + gpointer data) { - static gchar buf[32]; gint val; - val = atoi (gtk_entry_get_text (GTK_ENTRY (widget))); + val = (gint) adjustment->value; if (tvals.constrain) { if ((tint.orig_width != 0) && (tint.orig_height != 0)) { - if (widget == tint.width_entry && tvals.new_width != val) + if ((GtkObject *) adjustment == tint.width_adj && + tvals.new_width != val) { tvals.new_width = val; - tvals.new_height = (int) ((tvals.new_width * tint.orig_height) / tint.orig_width); - sprintf (buf, "%d", tvals.new_height); - gtk_entry_set_text (GTK_ENTRY (tint.height_entry), buf); + tvals.new_height = (int) ((tvals.new_width * tint.orig_height) / + tint.orig_width); + + gtk_signal_handler_block_by_data (GTK_OBJECT (tint.height_adj), + &tvals.new_height); + gtk_adjustment_set_value (GTK_ADJUSTMENT (tint.height_adj), + tvals.new_height); + gtk_signal_handler_unblock_by_data (GTK_OBJECT (tint.height_adj), + &tvals.new_height); } - else if (widget == tint.height_entry && tvals.new_height != val) + else if ((GtkObject *) adjustment == tint.height_adj && + tvals.new_height != val) { tvals.new_height = val; - tvals.new_width = (int) ((tvals.new_height * tint.orig_width) / tint.orig_height); - sprintf (buf, "%d", tvals.new_width); - gtk_entry_set_text (GTK_ENTRY (tint.width_entry), buf); + tvals.new_width = (int) ((tvals.new_height * tint.orig_width) / + tint.orig_height); + + gtk_signal_handler_block_by_data (GTK_OBJECT (tint.width_adj), + &tvals.new_width); + gtk_adjustment_set_value (GTK_ADJUSTMENT (tint.width_adj), + tvals.new_width); + gtk_signal_handler_unblock_by_data (GTK_OBJECT (tint.width_adj), + &tvals.new_width); } } } else - *((int *) data) = val; + { + *((int *) data) = val; + } } diff --git a/plug-ins/common/tileit.c b/plug-ins/common/tileit.c index b9ceb2d19b..c93abd8952 100644 --- a/plug-ins/common/tileit.c +++ b/plug-ins/common/tileit.c @@ -54,41 +54,47 @@ /***** Magic numbers *****/ #define PREVIEW_SIZE 128 -#define SCALE_WIDTH 80 -#define ENTRY_WIDTH 25 +#define SCALE_WIDTH 80 +#define ENTRY_WIDTH 50 -#define MAX_SEGS 6 +#define MAX_SEGS 6 #define PREVIEW_MASK GDK_EXPOSURE_MASK | \ GDK_BUTTON_PRESS_MASK | \ GDK_BUTTON_MOTION_MASK /* Variables set in dialog box */ -typedef struct data { - gint numtiles; +typedef struct data +{ + gint numtiles; } TileItVals; -typedef struct { +typedef struct +{ GtkWidget *preview; guchar preview_row[PREVIEW_SIZE * 4]; - gint run; - guchar * pv_cache; - gint img_bpp; + gint img_bpp; + guchar *pv_cache; + + gint run; } TileItInterface; static TileItInterface tint = { NULL, /* Preview */ - {'4','u'}, /* Preview_row */ - FALSE, /* run */ + { + '4', + 'u' + }, /* Preview_row */ + 4, /* bpp of drawable */ NULL, - 4 /* bpp of drawable */ + FALSE, /* run */ }; -GDrawable *tileitdrawable; -static gint tile_width, tile_height; -static GTile *the_tile = NULL; -static gint img_width, img_height,img_bpp; +static GDrawable *tileitdrawable; +static gint tile_width, tile_height; +static GTile *the_tile = NULL; +static gint img_width, img_height,img_bpp; static void query (void); static void run (gchar *name, @@ -98,33 +104,44 @@ static void run (gchar *name, GParam **return_vals); /* static void check (GDrawable * drawable); */ -static gint tileit_dialog (void); -static void tileit_ok_callback (GtkWidget *widget, gpointer data); -static void tileit_scale_update (GtkAdjustment *adjustment, gint *size_val); -static void tileit_entry_update(GtkWidget *widget, gint *value); -static void tileit_exp_update(GtkWidget *widget, gpointer value); -static void tileit_exp_update_f(GtkWidget *widget, gpointer value); -static void tileit_reset(GtkWidget *widget, gpointer value); -static void tileit_toggle_update(GtkWidget *widget, gpointer data); -static void tileit_hvtoggle_update(GtkWidget *widget, gpointer data); +static gint tileit_dialog (void); -static void do_tiles(void); -static gint tiles_xy(gint width, gint height,gint x,gint y,gint *nx,gint *ny); -static void all_update(void); -static void alt_update(void); -static void explict_update(gint); +static void tileit_ok_callback (GtkWidget *widget, + gpointer data); + +static void tileit_scale_update (GtkAdjustment *adjustment, + gpointer data); + +static void tileit_exp_update (GtkWidget *widget, gpointer value); +static void tileit_exp_update_f (GtkWidget *widget, gpointer value); + +static void tileit_reset (GtkWidget *widget, + gpointer value); +static void tileit_radio_update (GtkWidget *widget, + gpointer data); +static void tileit_hvtoggle_update (GtkWidget *widget, + gpointer data); + +static void do_tiles (void); +static gint tiles_xy (gint width, gint height,gint x,gint y,gint *nx,gint *ny); +static void all_update (void); +static void alt_update (void); +static void explict_update (gint); + +static void dialog_update_preview (void); +static void cache_preview (void); +static gint tileit_preview_expose (GtkWidget *widget, + GdkEvent *event); +static gint tileit_preview_events (GtkWidget *widget, + GdkEvent *event); -static void dialog_update_preview(void); -static void cache_preview(void); -static gint tileit_preview_expose ( GtkWidget *widget,GdkEvent *event ); -static gint tileit_preview_events ( GtkWidget *widget,GdkEvent *event ); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; /* Values when first invoked */ @@ -135,42 +152,44 @@ static TileItVals itvals = /* Structures for call backs... */ /* The "explict tile" & family */ -typedef enum { +typedef enum +{ ALL, ALT, EXPLICT } AppliedTo; -typedef struct { - AppliedTo type; - gint x; /* X - pos of tile */ - gint y; /* Y - pos of tile */ - GtkWidget *r_label; /* row label */ - GtkWidget *r_entry; /* row entry */ - GtkWidget *c_label; /* column label */ - GtkWidget *c_entry; /* column entry */ - GtkWidget *applybut; /* The apply button */ +typedef struct +{ + AppliedTo type; + + gint x; /* X - pos of tile */ + gint y; /* Y - pos of tile */ + GtkObject *r_adj; /* row adjustment */ + GtkObject *c_adj; /* column adjustment */ + GtkWidget *applybut; /* The apply button */ } Exp_Call; -Exp_Call exp_call = { +Exp_Call exp_call = +{ ALL, -1, -1, NULL, NULL, NULL, - NULL, - NULL, }; /* The reset button needs to know some toggle widgets.. */ -typedef struct { +typedef struct +{ GtkWidget *htoggle; GtkWidget *vtoggle; } Reset_Call; -Reset_Call res_call = { +Reset_Call res_call = +{ NULL, NULL, }; @@ -183,9 +202,9 @@ Reset_Call res_call = { gint tileactions[MAX_SEGS][MAX_SEGS]; /* What actions buttons toggled */ -gint do_horz = FALSE; -gint do_vert = FALSE; -gint opacity = 100; +static gint do_horz = FALSE; +static gint do_vert = FALSE; +static gint opacity = 100; /* Stuff for the preview bit */ static gint sel_x1, sel_y1, sel_x2, sel_y2; @@ -196,7 +215,7 @@ static gint has_alpha; MAIN () static void -query () +query (void) { static GParamDef args[] = { @@ -205,9 +224,7 @@ query () { PARAM_DRAWABLE, "drawable", "Input drawable" }, { PARAM_INT32, "number_of_tiles", "Number of tiles to make" } }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; + static gint nargs = sizeof (args) / sizeof (args[0]); INIT_I18N(); @@ -220,24 +237,23 @@ query () N_("/Filters/Map/Small Tiles..."), "RGB*, GRAY*", PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); + nargs, 0, + args, NULL); } static void -run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals) +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; - int pwidth, pheight; - + gint pwidth, pheight; run_mode = param[0].data.d_int32; @@ -251,33 +267,36 @@ run (gchar *name, drawable = gimp_drawable_get (param[2].data.d_drawable); - tile_width = gimp_tile_width(); - tile_height = gimp_tile_height(); + tile_width = gimp_tile_width (); + tile_height = gimp_tile_height (); - gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); + gimp_drawable_mask_bounds (drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); sel_width = sel_x2 - sel_x1; sel_height = sel_y2 - sel_y1; /* Calculate preview size */ - if (sel_width > sel_height) { - pwidth = MIN(sel_width, PREVIEW_SIZE); - pheight = sel_height * pwidth / sel_width; - } else { - pheight = MIN(sel_height, PREVIEW_SIZE); - pwidth = sel_width * pheight / sel_height; - } + if (sel_width > sel_height) + { + pwidth = MIN (sel_width, PREVIEW_SIZE); + pheight = sel_height * pwidth / sel_width; + } + else + { + pheight = MIN (sel_height, PREVIEW_SIZE); + pwidth = sel_width * pheight / sel_height; + } - preview_width = MAX(pwidth, 2); /* Min size is 2 */ - preview_height = MAX(pheight, 2); + preview_width = MAX (pwidth, 2); /* Min size is 2 */ + preview_height = MAX (pheight, 2); switch (run_mode) { case RUN_INTERACTIVE: INIT_I18N_UI(); gimp_get_data ("plug_in_tileit", &itvals); - if (! tileit_dialog()) + if (! tileit_dialog ()) { gimp_drawable_detach (drawable); return; @@ -303,15 +322,17 @@ run (gchar *name, break; } - if (gimp_drawable_is_rgb (drawable->id) || gimp_drawable_is_gray (drawable->id)) + if (gimp_drawable_is_rgb (drawable->id) || + gimp_drawable_is_gray (drawable->id)) { /* Set the tile cache size */ - gimp_tile_cache_ntiles((drawable->width + gimp_tile_width() - 1) / gimp_tile_width()); + gimp_tile_cache_ntiles ((drawable->width + gimp_tile_width () - 1) / + gimp_tile_width ()); - gimp_progress_init ( _("Tiling...")); + gimp_progress_init (_("Tiling...")); - do_tiles(); + do_tiles (); if (run_mode != RUN_NONINTERACTIVE) gimp_displays_flush (); @@ -341,10 +362,12 @@ tileit_dialog (void) GtkWidget *frame; GtkWidget *xframe; GtkWidget *table; + GtkWidget *sep; + GtkWidget *table2; GtkWidget *button; GtkWidget *label; - GtkWidget *entry; - GtkWidget *slider; + GtkWidget *spinbutton; + GtkObject *adj; GtkObject *size_data; GtkObject *op_data; GtkWidget *toggle; @@ -352,7 +375,6 @@ tileit_dialog (void) guchar *color_cube; gchar **argv; gint argc; - gchar buf[256]; argc = 1; argv = g_new (gchar *, 1); @@ -367,7 +389,7 @@ tileit_dialog (void) color_cube = gimp_color_cube (); gtk_preview_set_color_cube (color_cube[0], color_cube[1], color_cube[2], color_cube[3]); - + gtk_widget_set_default_visual (gtk_preview_get_visual ()); gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); @@ -396,7 +418,7 @@ tileit_dialog (void) TRUE, TRUE, 0); gtk_widget_show (main_vbox); - hbox = gtk_hbox_new (FALSE, 4); + hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); @@ -406,31 +428,31 @@ tileit_dialog (void) gtk_widget_show (frame); vbox2 = gtk_vbox_new (TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 4); gtk_container_add (GTK_CONTAINER (frame), vbox2); gtk_widget_show (vbox2); xframe = gtk_frame_new (NULL); - gtk_container_set_border_width (GTK_CONTAINER (xframe), 2); gtk_frame_set_shadow_type (GTK_FRAME (xframe), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (vbox2), xframe, TRUE, FALSE, 0); gtk_widget_show (xframe); tint.preview = gtk_preview_new (GTK_PREVIEW_COLOR); + gtk_preview_size (GTK_PREVIEW (tint.preview), preview_width, preview_height); gtk_widget_set_events (GTK_WIDGET (tint.preview), PREVIEW_MASK); gtk_signal_connect_after (GTK_OBJECT (tint.preview), "expose_event", - (GtkSignalFunc) tileit_preview_expose, + GTK_SIGNAL_FUNC (tileit_preview_expose), NULL); gtk_signal_connect (GTK_OBJECT (tint.preview), "event", - (GtkSignalFunc) tileit_preview_events, + GTK_SIGNAL_FUNC (tileit_preview_events), NULL); - gtk_preview_size (GTK_PREVIEW (tint.preview), preview_width, preview_height); gtk_container_add (GTK_CONTAINER (xframe), tint.preview); /* Area for buttons etc */ - frame = gtk_frame_new ( _("Flipping")); + frame = gtk_frame_new (_("Flipping")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); gtk_widget_show (frame); @@ -444,29 +466,36 @@ tileit_dialog (void) gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); - toggle = gtk_check_button_new_with_label ( _("Horizontal")); - gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, FALSE, 0); + toggle = gtk_check_button_new_with_label (_("Horizontal")); + gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) tileit_hvtoggle_update, + GTK_SIGNAL_FUNC (tileit_hvtoggle_update), &do_horz); gtk_widget_show (toggle); res_call.htoggle = toggle; - toggle = gtk_check_button_new_with_label ( _("Vertical")); - gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, FALSE, 0); + toggle = gtk_check_button_new_with_label (_("Vertical")); + gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) tileit_hvtoggle_update, + GTK_SIGNAL_FUNC (tileit_hvtoggle_update), &do_vert); gtk_widget_show (toggle); res_call.vtoggle = toggle; - xframe = gtk_frame_new( _("Applied to Tile")); + button = gtk_button_new_with_label (_("Reset")); + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (tileit_reset), + &res_call); + gtk_widget_show (button); + + xframe = gtk_frame_new (_("Applied to Tile")); gtk_frame_set_shadow_type (GTK_FRAME (xframe), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (vbox), xframe, FALSE, FALSE, 0); - gtk_widget_show(xframe); + gtk_widget_show (xframe); /* Table for the inner widgets..*/ - table = gtk_table_new (5, 4, FALSE); + table = gtk_table_new (6, 4, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_container_border_width (GTK_CONTAINER (table), 4); @@ -477,9 +506,10 @@ tileit_dialog (void) orientation_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_table_attach (GTK_TABLE (table), toggle, 0, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) ALL); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) tileit_toggle_update, - (gpointer)ALL); + GTK_SIGNAL_FUNC (tileit_radio_update), + &exp_call.type); gtk_widget_show (toggle); toggle = gtk_radio_button_new_with_label (orientation_group, @@ -487,9 +517,10 @@ tileit_dialog (void) orientation_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_table_attach (GTK_TABLE (table), toggle, 0, 4, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) ALT); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) tileit_toggle_update, - (gpointer)ALT); + GTK_SIGNAL_FUNC (tileit_radio_update), + &exp_call.type); gtk_widget_show (toggle); toggle = gtk_radio_button_new_with_label (orientation_group, @@ -504,143 +535,103 @@ tileit_dialog (void) gtk_table_attach (GTK_TABLE (table), label, 1, 2, 2, 3, GTK_FILL | GTK_SHRINK , GTK_FILL, 0, 0); gtk_widget_show (label); - gtk_widget_set_sensitive (label, FALSE); - exp_call.r_label = label; - entry = gtk_entry_new (); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf(buf, sizeof (buf), "%.1d", 2); - gtk_entry_set_text (GTK_ENTRY (entry), buf); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (table), entry, 2, 3, 2, 3, + gtk_widget_set_sensitive (label, FALSE); + gtk_object_set_data (GTK_OBJECT (toggle), "set_sensitive", label); + + spinbutton = gimp_spin_button_new (&adj, 2, 1, 6, 1, 1, 0, 1, 0); + gtk_widget_set_usize (spinbutton, ENTRY_WIDTH, -1); + gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 2, 3, GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0); - gtk_widget_set_sensitive (entry, FALSE); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) tileit_exp_update_f, + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (tileit_exp_update_f), &exp_call); - exp_call.r_entry = entry; + gtk_widget_show (spinbutton); + exp_call.r_adj = adj; + + gtk_widget_set_sensitive (spinbutton, FALSE); + gtk_object_set_data (GTK_OBJECT (label), "set_sensitive", spinbutton); label = gtk_label_new ( _("Column:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 1, 2, 3, 4, GTK_FILL , GTK_FILL, 0, 0); + gtk_widget_set_sensitive (label, FALSE); - exp_call.c_label = label; + gtk_object_set_data (GTK_OBJECT (spinbutton), "set_sensitive", label); - entry = gtk_entry_new (); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buf, sizeof (buf), "%.1d", 2); - gtk_entry_set_text (GTK_ENTRY (entry), buf); - gtk_widget_show (entry); - gtk_widget_set_sensitive (entry, FALSE); - gtk_table_attach (GTK_TABLE (table), entry, 2, 3, 3, 4, + spinbutton = gimp_spin_button_new (&adj, 2, 1, 6, 1, 1, 0, 1, 0); + gtk_widget_set_usize (spinbutton, ENTRY_WIDTH, -1); + gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); - gtk_signal_connect(GTK_OBJECT(entry), "changed", - (GtkSignalFunc) tileit_exp_update_f, - &exp_call); - exp_call.c_entry = entry; + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (tileit_exp_update_f), + &exp_call); + gtk_widget_show (spinbutton); + exp_call.c_adj = adj; + gtk_widget_set_sensitive (spinbutton, FALSE); + gtk_object_set_data (GTK_OBJECT (label), "set_sensitive", spinbutton); + + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) EXPLICT); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) tileit_toggle_update, - (gpointer)EXPLICT); + GTK_SIGNAL_FUNC (tileit_radio_update), + &exp_call.type); - button = gtk_button_new_with_label ( _("Apply")); - gtk_widget_set_sensitive (button, FALSE); + button = gtk_button_new_with_label (_("Apply")); gtk_table_attach (GTK_TABLE (table), button, 3, 4, 2, 4, 0, 0, 0, 0); - gtk_widget_show (button); gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) tileit_exp_update, - (gpointer)&exp_call); + GTK_SIGNAL_FUNC (tileit_exp_update), + &exp_call); + gtk_widget_show (button); exp_call.applybut = button; + gtk_widget_set_sensitive (button, FALSE); + gtk_object_set_data (GTK_OBJECT (spinbutton), "set_sensitive", button); + /* Widget for selecting the Opacity */ - label = gtk_label_new ( _("Opacity:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, - GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0); - gtk_widget_show (label); + sep = gtk_hseparator_new (); + gtk_table_attach (GTK_TABLE (table), sep, 0, 4, 4, 5, + GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 1); + gtk_widget_show (sep); - op_data = gtk_adjustment_new (100, 0, 100, 1, 1, 0); - slider = gtk_hscale_new (GTK_ADJUSTMENT (op_data)); - gtk_widget_set_usize (slider, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), slider, 1 ,3, 4, 5, - GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); - - gtk_scale_set_draw_value (GTK_SCALE (slider), FALSE); - gtk_range_set_update_policy (GTK_RANGE (slider), GTK_UPDATE_CONTINUOUS); + table2 = gtk_table_new (1, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table2), 4); + gtk_table_attach_defaults (GTK_TABLE (table), table2, 0, 4, 5, 6); + gtk_widget_show (table2); + op_data = gimp_scale_entry_new (GTK_TABLE (table2), 0, 0, + _("Opacity:"), SCALE_WIDTH, ENTRY_WIDTH, + opacity, 0, 100, 1, 10, 0, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (op_data), "value_changed", - (GtkSignalFunc) tileit_scale_update, + GTK_SIGNAL_FUNC (tileit_scale_update), &opacity); - if (!has_alpha) - gtk_widget_set_sensitive (slider,FALSE); - gtk_widget_show (slider); - entry = gtk_entry_new (); - gtk_object_set_user_data (GTK_OBJECT (entry), op_data); - gtk_object_set_user_data (op_data, entry); - gtk_widget_set_usize (entry, 3 * ENTRY_WIDTH / 2, 0); - g_snprintf (buf, sizeof (buf), "%.1d", opacity); - gtk_entry_set_text (GTK_ENTRY (entry), buf); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) tileit_entry_update, - &opacity); - gtk_table_attach (GTK_TABLE (table), entry, 3, 4, 4, 5, - GTK_FILL, GTK_FILL, 0, 0); - if (!has_alpha) - gtk_widget_set_sensitive (entry,FALSE); - gtk_widget_show (entry); - - button = gtk_button_new_with_label ( _("Reset")); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) tileit_reset, - (gpointer)&res_call); - - gtk_widget_show(frame); + gtk_widget_show (frame); /* Lower frame saying howmany segments */ - - frame = gtk_frame_new ( _("Segment Setting")); + frame = gtk_frame_new (_("Segment Setting")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - hbox = gtk_hbox_new (FALSE, 4); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 4); - gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_widget_show (hbox); + table = gtk_table_new (1, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_widget_show (table); - g_snprintf (buf, sizeof (buf), "1 / (%d ** n) ", 2); - label = gtk_label_new (buf); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); + gtk_widget_set_sensitive (table2, has_alpha); - size_data = gtk_adjustment_new (itvals.numtiles, 2, MAX_SEGS, 1, 1, 0); - slider = gtk_hscale_new (GTK_ADJUSTMENT (size_data)); - gtk_widget_set_usize (slider, SCALE_WIDTH, 0); - gtk_box_pack_start (GTK_BOX (hbox), slider, TRUE, TRUE, 0); - gtk_scale_set_draw_value (GTK_SCALE (slider), FALSE); - gtk_range_set_update_policy (GTK_RANGE (slider), GTK_UPDATE_CONTINUOUS); + size_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, + "1 / (2 ** n)", SCALE_WIDTH, ENTRY_WIDTH, + itvals.numtiles, 2, MAX_SEGS, 1, 1, 0, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (size_data), "value_changed", - (GtkSignalFunc) tileit_scale_update, + GTK_SIGNAL_FUNC (tileit_scale_update), &itvals.numtiles); - gtk_widget_show (slider); - - entry = gtk_entry_new(); - gtk_object_set_user_data (GTK_OBJECT (entry), size_data); - gtk_object_set_user_data (size_data, entry); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buf, sizeof (buf), "%.1d", itvals.numtiles); - gtk_entry_set_text (GTK_ENTRY (entry), buf); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) tileit_entry_update, - &itvals.numtiles); - gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0); - gtk_widget_show(entry); gtk_widget_show (tint.preview); @@ -658,128 +649,123 @@ tileit_ok_callback (GtkWidget *widget, gpointer data) { tint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } static void -tileit_hvtoggle_update(GtkWidget *widget, - gpointer data) +tileit_hvtoggle_update (GtkWidget *widget, + gpointer data) { - int *toggle_val; + gimp_toggle_button_update (widget, data); - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - { - /* Only do for event that sets a toggle button to true */ - /* This will break if any more toggles are added? */ - *toggle_val = TRUE; - } - else - *toggle_val = FALSE; - - switch(exp_call.type) + switch (exp_call.type) { case ALL: /* Clear current settings */ - memset(tileactions,0,sizeof(tileactions)); - all_update(); + memset (tileactions, 0, sizeof (tileactions)); + all_update (); break; + case ALT: /* Clear current settings */ - memset(tileactions,0,sizeof(tileactions)); - alt_update(); + memset (tileactions, 0, sizeof (tileactions)); + alt_update (); break; + case EXPLICT: break; } - dialog_update_preview(); + + dialog_update_preview (); } static void -draw_explict_sel(void) +draw_explict_sel (void) { - if(exp_call.type == EXPLICT) + if (exp_call.type == EXPLICT) { gdouble x,y; - gdouble width = (gdouble)preview_width/(gdouble)itvals.numtiles; - gdouble height = (gdouble)preview_height/(gdouble)itvals.numtiles; + gdouble width = (gdouble) preview_width / (gdouble) itvals.numtiles; + gdouble height = (gdouble) preview_height / (gdouble) itvals.numtiles; - x = width*(exp_call.x - 1); - y = height*(exp_call.y - 1); + x = width * (exp_call.x - 1); + y = height * (exp_call.y - 1); - gdk_gc_set_function ( tint.preview->style->black_gc, GDK_INVERT); + gdk_gc_set_function (tint.preview->style->black_gc, GDK_INVERT); - gdk_draw_rectangle(tint.preview->window, - tint.preview->style->black_gc, - 0, - (gint)x, - (gint)y, - (gint)width, - (gint)height); - gdk_draw_rectangle(tint.preview->window, - tint.preview->style->black_gc, - 0, - (gint)x+1, - (gint)y+1, - (gint)width-2, - (gint)height-2); - gdk_draw_rectangle(tint.preview->window, - tint.preview->style->black_gc, - 0, - (gint)x+2, - (gint)y+2, - (gint)width-4, - (gint)height-4); - gdk_gc_set_function ( tint.preview->style->black_gc, GDK_COPY); + gdk_draw_rectangle (tint.preview->window, + tint.preview->style->black_gc, + 0, + (gint) x, + (gint) y, + (gint) width, + (gint) height); + gdk_draw_rectangle (tint.preview->window, + tint.preview->style->black_gc, + 0, + (gint) x + 1, + (gint) y + 1, + (gint) width - 2, + (gint) height - 2); + gdk_draw_rectangle (tint.preview->window, + tint.preview->style->black_gc, + 0, + (gint) x + 2, + (gint) y + 2, + (gint) width - 4, + (gint) height - 4); + gdk_gc_set_function (tint.preview->style->black_gc, GDK_COPY); } } static gint -tileit_preview_expose( GtkWidget *widget, - GdkEvent *event ) +tileit_preview_expose (GtkWidget *widget, + GdkEvent *event) { - draw_explict_sel(); + draw_explict_sel (); + return FALSE; } static void -exp_need_update(gint nx, gint ny) +exp_need_update (gint nx, + gint ny) { - gchar buf[256]; - if (nx <= 0 || nx > itvals.numtiles || ny <= 0 || ny > itvals.numtiles) return; if( nx != exp_call.x || - ny != exp_call.y ) + ny != exp_call.y ) { - draw_explict_sel(); /* Clear old 'un */ + draw_explict_sel (); /* Clear old 'un */ exp_call.x = nx; exp_call.y = ny; - draw_explict_sel(); - - sprintf(buf,"%d",nx); - gtk_signal_handler_block_by_data(GTK_OBJECT(exp_call.c_entry),&exp_call); - gtk_entry_set_text(GTK_ENTRY(exp_call.c_entry), buf); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(exp_call.c_entry), &exp_call); - sprintf(buf,"%d",ny); - gtk_signal_handler_block_by_data(GTK_OBJECT(exp_call.r_entry),&exp_call); - gtk_entry_set_text(GTK_ENTRY(exp_call.r_entry), buf); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(exp_call.r_entry), &exp_call); + draw_explict_sel (); + + gtk_signal_handler_block_by_data (GTK_OBJECT (exp_call.c_adj), &exp_call); + gtk_signal_handler_block_by_data (GTK_OBJECT (exp_call.r_adj), &exp_call); + + gtk_adjustment_set_value (GTK_ADJUSTMENT (exp_call.c_adj), nx); + gtk_adjustment_set_value (GTK_ADJUSTMENT (exp_call.r_adj), ny); + + gtk_signal_handler_unblock_by_data (GTK_OBJECT (exp_call.c_adj), + &exp_call); + gtk_signal_handler_unblock_by_data (GTK_OBJECT (exp_call.r_adj), + &exp_call); } } static gint -tileit_preview_events ( GtkWidget *widget, - GdkEvent *event ) +tileit_preview_events (GtkWidget *widget, + GdkEvent *event) { GdkEventButton *bevent; GdkEventMotion *mevent; - gint nx,ny; - gint twidth = preview_width/itvals.numtiles; - gint theight = preview_height/itvals.numtiles; + gint nx, ny; + gint twidth = preview_width / itvals.numtiles; + gint theight = preview_height / itvals.numtiles; switch (event->type) { @@ -790,7 +776,7 @@ tileit_preview_events ( GtkWidget *widget, bevent = (GdkEventButton *) event; nx = bevent->x/twidth + 1; ny = bevent->y/theight + 1; - exp_need_update(nx,ny); + exp_need_update (nx, ny); break; case GDK_MOTION_NOTIFY: @@ -801,7 +787,7 @@ tileit_preview_events ( GtkWidget *widget, break; nx = mevent->x/twidth + 1; ny = mevent->y/theight + 1; - exp_need_update(nx,ny); + exp_need_update (nx, ny); break; default: @@ -812,142 +798,115 @@ tileit_preview_events ( GtkWidget *widget, } static void -explict_update(gint settile) +explict_update (gint settile) { - int x,y; + gint x,y; /* Make sure bounds are OK */ - y = atoi(gtk_entry_get_text(GTK_ENTRY(exp_call.r_entry))); - if(y > itvals.numtiles || y <= 0) + y = ROUND (GTK_ADJUSTMENT (exp_call.r_adj)->value); + if (y > itvals.numtiles || y <= 0) { y = itvals.numtiles; } - x = atoi(gtk_entry_get_text(GTK_ENTRY(exp_call.c_entry))); - if(x > itvals.numtiles || x <= 0) + x = ROUND (GTK_ADJUSTMENT (exp_call.c_adj)->value); + if (x > itvals.numtiles || x <= 0) { x = itvals.numtiles; } /* Set it */ - if(settile == TRUE) - tileactions[x-1][y-1] = (((do_horz)?HORIZONTAL:0)|((do_vert)?VERTICAL:0)); + if (settile == TRUE) + tileactions[x-1][y-1] = (((do_horz) ? HORIZONTAL : 0) | + ((do_vert) ? VERTICAL : 0)); exp_call.x = x; exp_call.y = y; - } static void -all_update(void) +all_update (void) { - int x,y; - for(x = 0 ; x < MAX_SEGS; x++) - for(y = 0 ; y < MAX_SEGS; y++) - tileactions[x][y] |= (((do_horz)?HORIZONTAL:0)|((do_vert)?VERTICAL:0)); + gint x,y; + + for (x = 0 ; x < MAX_SEGS; x++) + for (y = 0 ; y < MAX_SEGS; y++) + tileactions[x][y] |= (((do_horz) ? HORIZONTAL : 0) | + ((do_vert) ? VERTICAL : 0)); } static void -alt_update(void) +alt_update (void) { - int x,y; - for(x = 0 ; x < MAX_SEGS; x++) - for(y = 0 ; y < MAX_SEGS; y++) - if(!((x+y)%2)) - tileactions[x][y] |= - (((do_horz)?HORIZONTAL:0)|((do_vert)?VERTICAL:0)); + gint x,y; + + for (x = 0 ; x < MAX_SEGS; x++) + for (y = 0 ; y < MAX_SEGS; y++) + if (!((x + y) % 2)) + tileactions[x][y] |= (((do_horz) ? HORIZONTAL : 0) | + ((do_vert) ? VERTICAL : 0)); } static void -tileit_toggle_update(GtkWidget *widget, - gpointer data) +tileit_radio_update (GtkWidget *widget, + gpointer data) { - AppliedTo type = (AppliedTo)data; - + gimp_radio_button_update (widget, data); + if (GTK_TOGGLE_BUTTON (widget)->active) { - switch(type) + switch (exp_call.type) { case ALL: /* Clear current settings */ - memset(tileactions,0,sizeof(tileactions)); - all_update(); + memset (tileactions, 0, sizeof (tileactions)); + all_update (); break; - case ALT: - /* Clear current settings */ - memset(tileactions,0,sizeof(tileactions)); - alt_update(); - break; - case EXPLICT: - /* Make widget active */ - gtk_widget_set_sensitive(exp_call.r_label,TRUE); - gtk_widget_set_sensitive(exp_call.r_entry,TRUE); - gtk_widget_set_sensitive(exp_call.c_label,TRUE); - gtk_widget_set_sensitive(exp_call.c_entry,TRUE); - gtk_widget_set_sensitive(exp_call.applybut,TRUE); - explict_update(FALSE); - break; - } - exp_call.type = type; - } - else - { - switch(type) - { - case ALL: - break; - case ALT: - break; - case EXPLICT: - gtk_widget_set_sensitive(exp_call.r_label,FALSE); - gtk_widget_set_sensitive(exp_call.r_entry,FALSE); - gtk_widget_set_sensitive(exp_call.c_label,FALSE); - gtk_widget_set_sensitive(exp_call.c_entry,FALSE); - gtk_widget_set_sensitive(exp_call.applybut,FALSE); - break; - } - } - dialog_update_preview(); -} + case ALT: + /* Clear current settings */ + memset (tileactions, 0, sizeof (tileactions)); + alt_update (); + break; + + case EXPLICT: + explict_update (FALSE); + break; + } + + dialog_update_preview (); + } +} static void -tileit_scale_update(GtkAdjustment *adjustment, gint *value) +tileit_scale_update (GtkAdjustment *adjustment, + gpointer data) { - GtkWidget *entry; - char buf[256]; - - if (*value != adjustment->value) { - *value = adjustment->value; - - entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); - sprintf(buf,"%d",*value); - - gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); - - dialog_update_preview(); - } + gimp_int_adjustment_update (adjustment, data); + + dialog_update_preview (); } - static void -tileit_reset(GtkWidget *widget, gpointer data) +tileit_reset (GtkWidget *widget, + gpointer data) { - Reset_Call *r = (Reset_Call *)data; + Reset_Call *r = (Reset_Call *) data; - memset(tileactions,0,sizeof(tileactions)); + memset (tileactions, 0, sizeof (tileactions)); + + gtk_signal_handler_block_by_data (GTK_OBJECT (r->htoggle), &do_horz); + gtk_signal_handler_block_by_data (GTK_OBJECT (r->vtoggle), &do_vert); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (r->htoggle), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (r->vtoggle), FALSE); + + gtk_signal_handler_unblock_by_data (GTK_OBJECT (r->htoggle), &do_horz); + gtk_signal_handler_unblock_by_data (GTK_OBJECT (r->vtoggle), &do_vert); - gtk_signal_handler_block_by_data(GTK_OBJECT(r->htoggle),&do_horz); - gtk_signal_handler_block_by_data(GTK_OBJECT(r->vtoggle),&do_vert); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(r->htoggle),FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(r->vtoggle),FALSE); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(r->htoggle),&do_horz); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(r->vtoggle),&do_vert); do_horz = do_vert = FALSE; - dialog_update_preview(); + dialog_update_preview (); } @@ -956,108 +915,92 @@ tileit_reset(GtkWidget *widget, gpointer data) */ static void -tileit_exp_update(GtkWidget *widget, gpointer applied) +tileit_exp_update (GtkWidget *widget, + gpointer applied) { - explict_update(TRUE); - dialog_update_preview(); -} - + explict_update (TRUE); + dialog_update_preview (); +} static void -tileit_exp_update_f(GtkWidget *widget, gpointer applied) +tileit_exp_update_f (GtkWidget *widget, + gpointer applied) { - explict_update(FALSE); - dialog_update_preview(); -} - -static void -tileit_entry_update(GtkWidget *widget, gint *value) -{ - GtkAdjustment *adjustment; - gdouble new_value; - - new_value = atoi(gtk_entry_get_text(GTK_ENTRY(widget))); - - if (*value != new_value) { - adjustment = gtk_object_get_user_data(GTK_OBJECT(widget)); - - if ((new_value >= adjustment->lower) && - (new_value <= adjustment->upper)) { - *value = new_value; - adjustment->value = new_value; - - gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed"); - - dialog_update_preview(); - } - } -} - + explict_update (FALSE); + dialog_update_preview (); +} /* Cache the preview image - updates are a lot faster. */ /* The preview_cache will contain the small image */ static void -cache_preview() +cache_preview (void) { GPixelRgn src_rgn; - int y,x; + gint y,x; guchar *src_rows; guchar *p; - int isgrey = 0; + gint isgrey = FALSE; - gimp_pixel_rgn_init(&src_rgn,tileitdrawable,sel_x1,sel_y1,sel_width,sel_height,FALSE,FALSE); + gimp_pixel_rgn_init (&src_rgn, tileitdrawable, + sel_x1, sel_y1, sel_width, sel_height, FALSE, FALSE); - src_rows = g_new(guchar ,sel_width*4); - p = tint.pv_cache = g_new(guchar ,preview_width*preview_height*4); + src_rows = g_new (guchar, sel_width * 4); + p = tint.pv_cache = g_new (guchar, preview_width * preview_height * 4); - img_width = gimp_drawable_width(tileitdrawable->id); - img_height = gimp_drawable_height(tileitdrawable->id); + img_width = gimp_drawable_width (tileitdrawable->id); + img_height = gimp_drawable_height (tileitdrawable->id); - tint.img_bpp = gimp_drawable_bpp(tileitdrawable->id); + tint.img_bpp = gimp_drawable_bpp (tileitdrawable->id); - has_alpha = gimp_drawable_has_alpha(tileitdrawable->id); + has_alpha = gimp_drawable_has_alpha (tileitdrawable->id); - if(tint.img_bpp < 3) + if (tint.img_bpp < 3) { tint.img_bpp = 3 + has_alpha; } - switch ( gimp_drawable_type (tileitdrawable->id) ) + switch (gimp_drawable_type (tileitdrawable->id)) { case GRAYA_IMAGE: case GRAY_IMAGE: - isgrey = 1; + isgrey = TRUE; break; default: - isgrey = 0; + isgrey = FALSE; break; } - for (y = 0; y < preview_height; y++) { - - gimp_pixel_rgn_get_row(&src_rgn, - src_rows, - sel_x1, - sel_y1 + (y*sel_height)/preview_height, - sel_width); - - for (x = 0; x < (preview_width); x ++) { - /* Get the pixels of each col */ - int i; - for (i = 0 ; i < 3; i++ ) - p[x*tint.img_bpp+i] = src_rows[((x*sel_width)/preview_width)*src_rgn.bpp +((isgrey)?0:i)]; - if(has_alpha) - p[x*tint.img_bpp+3] = src_rows[((x*sel_width)/preview_width)*src_rgn.bpp + ((isgrey)?1:3)]; + for (y = 0; y < preview_height; y++) + { + gimp_pixel_rgn_get_row (&src_rgn, + src_rows, + sel_x1, + sel_y1 + (y * sel_height) / preview_height, + sel_width); + + for (x = 0; x < (preview_width); x ++) + { + /* Get the pixels of each col */ + gint i; + for (i = 0 ; i < 3; i++) + p[x * tint.img_bpp + i] = + src_rows[((x * sel_width) / preview_width) * src_rgn.bpp + + ((isgrey) ? 0 : i)]; + if (has_alpha) + p[x * tint.img_bpp + 3] = + src_rows[((x * sel_width) / preview_width) * src_rgn.bpp + + ((isgrey) ? 1 : 3)]; + } + p += (preview_width * tint.img_bpp); } - p += (preview_width*tint.img_bpp); - } - g_free(src_rows); + g_free (src_rows); } - static void -tileit_get_pixel(int x, int y, guchar *pixel) +tileit_get_pixel (gint x, + gint y, + guchar *pixel) { static gint row = -1; static gint col = -1; @@ -1317,5 +1260,3 @@ dialog_update_preview(void) gtk_widget_draw(tint.preview, NULL); gdk_flush(); } - - diff --git a/plug-ins/common/url.c b/plug-ins/common/url.c index e977d2a119..fd96bd88c1 100644 --- a/plug-ins/common/url.c +++ b/plug-ins/common/url.c @@ -32,25 +32,26 @@ /* Author: Josh MacDonald. */ static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (char *filename); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); +static gint32 load_image (gchar *filename, + GStatusType *status /* return value */); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -58,14 +59,13 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); INIT_I18N(); @@ -81,60 +81,65 @@ query () nload_args, nload_return_vals, load_args, load_return_vals); - gimp_register_load_handler ("file_url_load", "", "http:,ftp:"); + gimp_register_load_handler ("file_url_load", + "", + "http:,ftp:"); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_url_load") == 0) { - image_ID = load_image (param[2].data.d_string); - if (image_ID != -1) + image_ID = load_image (param[2].data.d_string, &status); + + if (image_ID != -1 && + status == STATUS_SUCCESS) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) +load_image (gchar *filename, + GStatusType *status) { GParam* params; gint retvals; - char* ext = strrchr (filename, '.'); - char* tmpname; - int pid; - int status; + gchar *ext = strrchr (filename, '.'); + gchar *tmpname; + gint pid; + gint process_status; if (!ext || ext[1] == 0 || strchr(ext, '/')) { g_message ("url: can't open URL without an extension\n"); + *status = STATUS_CALLING_ERROR; return -1; } @@ -151,6 +156,7 @@ load_image (char *filename) { g_message ("url: fork failed: %s\n", g_strerror(errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } else if (pid == 0) @@ -167,17 +173,19 @@ load_image (char *filename) { g_message ("url: spawn failed: %s\n", g_strerror(errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } #endif { - waitpid (pid, &status, 0); + waitpid (pid, &process_status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (process_status) || + WEXITSTATUS (process_status) != 0) { g_message ("url: wget exited abnormally on URL %s\n", filename); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } } @@ -192,8 +200,12 @@ load_image (char *filename) unlink (tmpname); g_free (tmpname); - if (params[0].data.d_status == FALSE) - return -1; + *status = params[0].data.d_status; + + if (params[0].data.d_status != STATUS_SUCCESS) + { + return -1; + } else { gimp_image_set_filename (params[1].data.d_int32, filename); diff --git a/plug-ins/common/vpropagate.c b/plug-ins/common/vpropagate.c index 9550f3dc27..fe9c2289dc 100644 --- a/plug-ins/common/vpropagate.c +++ b/plug-ins/common/vpropagate.c @@ -31,7 +31,6 @@ #include #include -#include #include @@ -73,7 +72,7 @@ static void prepare_row (GPixelRgn *pixel_rgn, static void vpropagate_ok_callback (GtkWidget *widget, gpointer data); -static GtkWidget * gtkW_table_add_toggle (GtkWidget *table, +static GtkWidget * gtk_table_add_toggle (GtkWidget *table, gchar *name, gint x1, gint x2, @@ -105,7 +104,6 @@ GPlugInInfo PLUG_IN_INFO = run, /* run_proc */ }; -#define ENTRY_WIDTH 100 #define UPDATE_STEP 20 #define SCALE_WIDTH 100 #define PROPAGATING_VALUE 1<<0 @@ -196,7 +194,7 @@ MAIN () static void query (void) { - static GParamDef args [] = + static GParamDef args[] = { { PARAM_INT32, "run_mode", "Interactive, non-interactive"}, { PARAM_IMAGE, "image", "Input image (not used)"}, @@ -208,9 +206,7 @@ query (void) { PARAM_INT32, "lower-limit", "0 <= lower-limit <= 255"}, { PARAM_INT32, "upper-limit", "0 <= upper-limit <= 255"}, }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; + static gint nargs = sizeof (args) / sizeof (args[0]); INIT_I18N(); @@ -220,11 +216,11 @@ query (void) "Shuji Narazaki (narazaki@InetQ.or.jp)", "Shuji Narazaki", "1996-1997", - N_("/Filters/Distorts/Value Propagate..."), + N_("/Filters/Distorts/Value Propagate..."), "RGB*,GRAY*", PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); + nargs, 0, + args, NULL); } static void @@ -1023,18 +1019,18 @@ vpropagate_dialog (GImageType image_type) gtk_table_attach (GTK_TABLE (table), sep, 0, 3, 3, 4, GTK_FILL, 0, 0, 0); gtk_widget_show (sep); - gtkW_table_add_toggle (table, _("To Left"), 0, 1, 5, - (GtkSignalFunc) gimp_toggle_button_update, - &direction_mask_vec[Right2Left]); - gtkW_table_add_toggle (table, _("To Right"), 2, 3, 5, - (GtkSignalFunc) gimp_toggle_button_update, - &direction_mask_vec[Left2Right]); - gtkW_table_add_toggle (table, _("To Top"), 1, 2, 4, - (GtkSignalFunc) gimp_toggle_button_update, - &direction_mask_vec[Bottom2Top]); - gtkW_table_add_toggle (table, _("To Bottom"), 1, 2, 6, - (GtkSignalFunc) gimp_toggle_button_update, - &direction_mask_vec[Top2Bottom]); + gtk_table_add_toggle (table, _("To Left"), 0, 1, 5, + (GtkSignalFunc) gimp_toggle_button_update, + &direction_mask_vec[Right2Left]); + gtk_table_add_toggle (table, _("To Right"), 2, 3, 5, + (GtkSignalFunc) gimp_toggle_button_update, + &direction_mask_vec[Left2Right]); + gtk_table_add_toggle (table, _("To Top"), 1, 2, 4, + (GtkSignalFunc) gimp_toggle_button_update, + &direction_mask_vec[Bottom2Top]); + gtk_table_add_toggle (table, _("To Bottom"), 1, 2, 6, + (GtkSignalFunc) gimp_toggle_button_update, + &direction_mask_vec[Top2Bottom]); if ((image_type == RGBA_IMAGE) | (image_type == GRAYA_IMAGE)) { sep = gtk_hseparator_new (); @@ -1045,19 +1041,19 @@ vpropagate_dialog (GImageType image_type) GtkWidget *toggle; toggle = - gtkW_table_add_toggle (table, _("Propagating Alpha Channel"), - 0, 3, 8, - (GtkSignalFunc) gimp_toggle_button_update, - &propagate_alpha); + gtk_table_add_toggle (table, _("Propagating Alpha Channel"), + 0, 3, 8, + (GtkSignalFunc) gimp_toggle_button_update, + &propagate_alpha); if (gimp_layer_get_preserve_transparency (drawable_id)) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), 0); gtk_widget_set_sensitive (toggle, FALSE); } } - gtkW_table_add_toggle (table, _("Propagating Value Channel"), 0, 3, 9, - (GtkSignalFunc) gimp_toggle_button_update, - &propagate_value); + gtk_table_add_toggle (table, _("Propagating Value Channel"), 0, 3, 9, + (GtkSignalFunc) gimp_toggle_button_update, + &propagate_value); } gtk_widget_show (table); gtk_widget_show (frame); @@ -1089,13 +1085,13 @@ vpropagate_ok_callback (GtkWidget *widget, } static GtkWidget * -gtkW_table_add_toggle (GtkWidget *table, - gchar *name, - gint x1, - gint x2, - gint y, - GtkSignalFunc update, - gint *value) +gtk_table_add_toggle (GtkWidget *table, + gchar *name, + gint x1, + gint x2, + gint y, + GtkSignalFunc update, + gint *value) { GtkWidget *toggle; @@ -1107,5 +1103,6 @@ gtkW_table_add_toggle (GtkWidget *table, value); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), *value); gtk_widget_show (toggle); + return toggle; } diff --git a/plug-ins/common/warp.c b/plug-ins/common/warp.c index aecbf58255..ed408172cd 100644 --- a/plug-ins/common/warp.c +++ b/plug-ins/common/warp.c @@ -81,14 +81,17 @@ /* Some useful macros */ -#define ENTRY_WIDTH 75 -#define TILE_CACHE_SIZE 30 /* was 48. There is a cache flush problem in GIMP preventing sequential updates */ -#define MIN_ARGS 6 /* minimum number of arguments required */ +#define ENTRY_WIDTH 75 +#define TILE_CACHE_SIZE 30 /* was 48. There is a cache flush problem in GIMP preventing sequential updates */ +#define MIN_ARGS 6 /* minimum number of arguments required */ -#define WRAP 0 -#define SMEAR 1 -#define BLACK 2 -#define COLOR 3 +enum +{ + WRAP, + SMEAR, + BLACK, + COLOR +}; typedef struct { @@ -110,20 +113,6 @@ typedef struct typedef struct { - GtkWidget *amount; - GtkWidget *angle; - GtkWidget *iter; - GtkWidget *dither; - GtkWidget *warp_map; - GtkWidget *mag_map; - GtkWidget *mag_use; - GtkWidget *substeps; - GtkWidget *grad_map; - GtkWidget *grad_scale; - GtkWidget *vector_map; - GtkWidget *vector_scale; - GtkWidget *vector_angle; - gint run; } WarpInterface; @@ -185,28 +174,23 @@ static gint bilinear16 (gdouble x, gdouble y, gint * v); -static gint warp_map_constrain (gint32 image_id, - gint32 drawable_id, - gpointer data); -static void warp_map_callback (gint32 id, - gpointer data); -static void warp_map_mag_callback (gint32 id, - gpointer data); -static void warp_map_grad_callback (gint32 id, - gpointer data); +static gint warp_map_constrain (gint32 image_id, + gint32 drawable_id, + gpointer data); +static void warp_map_callback (gint32 id, + gpointer data); +static void warp_map_mag_callback (gint32 id, + gpointer data); +static void warp_map_grad_callback (gint32 id, + gpointer data); static void warp_map_vector_callback (gint32 id, gpointer data); -static void warp_ok_callback (GtkWidget *widget, - gpointer data); -static void warp_toggle_update (GtkWidget *widget, - gpointer data); -static void warp_entry_callback (GtkWidget *widget, - gpointer data); -static void warp_entry_int_callback (GtkWidget *widget, - gpointer data); -static gdouble warp_map_mag_give_value (guchar *pt, - gint alpha, - gint bytes); +static void warp_ok_callback (GtkWidget *widget, + gpointer data); + +static gdouble warp_map_mag_give_value (guchar *pt, + gint alpha, + gint bytes); /* -------------------------------------------------------------------------- */ /* Variables global over entire plug-in scope */ @@ -214,60 +198,46 @@ static gdouble warp_map_mag_give_value (guchar *pt, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static WarpVals dvals = { - 10.0, /* amount */ - -1, /* warp_map */ - 5, /* iterations */ - 0.0, /* dither */ - 90.0, /* angle */ - WRAP, /* wrap_type */ - -1, /* mag_map */ - FALSE, /* mag_use */ - 1, /* substeps */ - -1, /* grad_map */ - 0.0, /* grad_scale */ - -1, /* vector_map */ - 0.0, /* vector_scale */ - 0.0 /* vector_angle */ + 10.0, /* amount */ + -1, /* warp_map */ + 5, /* iterations */ + 0.0, /* dither */ + 90.0, /* angle */ + WRAP, /* wrap_type */ + -1, /* mag_map */ + FALSE, /* mag_use */ + 1, /* substeps */ + -1, /* grad_map */ + 0.0, /* grad_scale */ + -1, /* vector_map */ + 0.0, /* vector_scale */ + 0.0 /* vector_angle */ }; static WarpInterface dint = { - NULL, /* amount */ - NULL, /* angle */ - NULL, /* iter */ - NULL, /* dither */ - NULL, /* warp_map */ - NULL, /* mag_map */ - NULL, /* mag_use */ - NULL, /* substeps */ - NULL, /* grad_map */ - NULL, /* grad_scale */ - NULL, /* vector_map */ - NULL, /* vector_scale */ - NULL, /* vector_angle */ - FALSE, /* run */ + FALSE, /* run */ }; /* -------------------------------------------------------------------------- */ -gint display_diff_map = TRUE; /* show 16-bit diff. vectormap */ -gint progress = 0; /* progress indicator bar */ -guint tile_width, tile_height; /* size of an image tile */ -GRunModeType run_mode; /* interactive, non-, etc. */ -guchar color_pixel[4] = {0, 0, 0, 255}; /* current selected foreground color */ +/* static gint display_diff_map = TRUE; show 16-bit diff. vectormap */ +static gint progress = 0; /* progress indicator bar */ +static guint tile_width, tile_height; /* size of an image tile */ +static GRunModeType run_mode; /* interactive, non-, etc. */ +static guchar color_pixel[4] = {0, 0, 0, 255}; /* current fg color */ /* -------------------------------------------------------------------------- */ - /***** Functions *****/ MAIN () @@ -295,9 +265,7 @@ query (void) { PARAM_FLOAT, "vector_scale", "Scaling factor for fixed vector map (0=don't use)" }, { PARAM_FLOAT, "vector_angle", "Angle for fixed vector map" }, }; - static GParamDef *return_vals = NULL; static gint nargs = sizeof (args) / sizeof (args[0]); - static gint nreturn_vals = 0; INIT_I18N(); @@ -310,8 +278,8 @@ query (void) N_("/Filters/Map/Warp..."), "RGB*, GRAY*", PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); + nargs, 0, + args, NULL); } static void @@ -344,9 +312,8 @@ run (gchar *name, drawable = gimp_drawable_get (param[2].data.d_drawable); *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; + *return_vals = values; + values[0].type = PARAM_STATUS; values[0].data.d_status = status; switch (run_mode) @@ -367,8 +334,10 @@ run (gchar *name, * (mode, image, draw, amount, warp_map, iter) are there */ if (nparams < MIN_ARGS) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { pcnt = MIN_ARGS; /* parameter counter */ dvals.amount = param[3].data.d_float; @@ -445,7 +414,8 @@ warp_dialog (GDrawable *drawable) GtkWidget *frame; GtkWidget *table; GtkWidget *otable; - GtkWidget *entry; + GtkWidget *spinbutton; + GtkObject *adj; GtkWidget *option_menu; GtkWidget *option_menu_mag; GtkWidget *option_menu_grad; @@ -456,18 +426,9 @@ warp_dialog (GDrawable *drawable) GtkWidget *vectormenu; GSList *group = NULL; - GSList *groupmag = NULL; gchar **argv; - gchar buffer[32]; gint argc; - gint use_wrap = (dvals.wrap_type == WRAP); - gint use_smear = (dvals.wrap_type == SMEAR); - gint use_black = (dvals.wrap_type == BLACK); - gint use_color = (dvals.wrap_type == COLOR); - gint mag_use_yes = (dvals.mag_use == TRUE); - gint mag_use_no = (dvals.mag_use == FALSE); - argc = 1; argv = g_new (gchar *, 1); argv[0] = g_strdup ("Warp"); @@ -503,55 +464,38 @@ warp_dialog (GDrawable *drawable) gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); table = gtk_table_new (3, 3, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - - /* on_x, on_y */ - label = gtk_label_new ( _("Step Size:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - label = gtk_label_new ( _("Iterations:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - /* amount, angle, iter */ - dint.amount = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%3.3f", dvals.amount); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_callback, + /* amount, iter */ + spinbutton = gimp_spin_button_new (&adj, dvals.amount, + -1000, 1000, /* ??? */ + 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Step Size:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.amount); - gtk_widget_show (entry); - dint.iter = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%d", dvals.iter); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_int_callback, + spinbutton = gimp_spin_button_new (&adj, dvals.iter, + 1, 100, 1, 5, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Iterations:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.iter); - gtk_widget_show (entry); /* Displacement map menu */ - label = gtk_label_new ( _("Displacement Map:")); + label = gtk_label_new (_("Displacement Map:")); gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); - dint.warp_map = option_menu = gtk_option_menu_new (); + option_menu = gtk_option_menu_new (); gtk_table_attach (GTK_TABLE (table), option_menu, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); menu = gimp_drawable_menu_new (warp_map_constrain, warp_map_callback, @@ -562,48 +506,58 @@ warp_dialog (GDrawable *drawable) /* ======================================================================= */ /* Displacement Type */ - toggle_hbox = gtk_hbox_new (FALSE, 4); - gtk_table_attach (GTK_TABLE (table), toggle_hbox, 0, 3, 2, 3, + label = gtk_label_new (_("On Edges:")); + gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); + gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); - - label = gtk_label_new ( _("On Edges:")); - gtk_box_pack_start (GTK_BOX (toggle_hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); + toggle_hbox = gtk_hbox_new (FALSE, 4); + gtk_table_attach (GTK_TABLE (table), toggle_hbox, 1, 3, 2, 3, + GTK_FILL, GTK_FILL, 0, 0); + toggle = gtk_radio_button_new_with_label (group, _("Wrap")); group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) WRAP); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) warp_toggle_update, - &use_wrap); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), use_wrap); + (GtkSignalFunc) gimp_radio_button_update, + &dvals.wrap_type); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), + dvals.wrap_type == WRAP); gtk_widget_show (toggle); toggle = gtk_radio_button_new_with_label (group, _("Smear")); group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) SMEAR); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) warp_toggle_update, - &use_smear); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), use_smear); + (GtkSignalFunc) gimp_radio_button_update, + &dvals.wrap_type); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), + dvals.wrap_type == SMEAR); gtk_widget_show (toggle); toggle = gtk_radio_button_new_with_label (group, _("Black")); group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) BLACK); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) warp_toggle_update, - &use_black); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), use_black); + (GtkSignalFunc) gimp_radio_button_update, + &dvals.wrap_type); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), + dvals.wrap_type == BLACK); gtk_widget_show (toggle); toggle = gtk_radio_button_new_with_label (group, _("FG Color")); group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); + gtk_object_set_user_data (GTK_OBJECT (toggle), (gpointer) COLOR); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) warp_toggle_update, - &use_color); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), use_color); + (GtkSignalFunc) gimp_radio_button_update, + &dvals.wrap_type); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), + dvals.wrap_type == COLOR); gtk_widget_show (toggle); gtk_widget_show (toggle_hbox); @@ -619,104 +573,64 @@ warp_dialog (GDrawable *drawable) gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); table = gtk_table_new (3, 3, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - - label = gtk_label_new ( _("Dither Size:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - dint.dither = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%3.3f", dvals.dither); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_callback, + spinbutton = gimp_spin_button_new (&adj, dvals.dither, + 0, 100, 1, 10, 0, 1, 2); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Dither Size:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.dither); - gtk_widget_show (entry); - label = gtk_label_new ( _("Substeps:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - dint.substeps = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 2, 3, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%d", dvals.substeps); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_int_callback, - &dvals.substeps); - gtk_widget_show (entry); - - label = gtk_label_new ( _("Rotation Angle")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - dint.angle = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%3.1f", dvals.angle); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_callback, + spinbutton = gimp_spin_button_new (&adj, dvals.angle, + 0, 360, 1, 15, 0, 1, 1); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Rotation Angle:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.angle); - gtk_widget_show (entry); + + spinbutton = gimp_spin_button_new (&adj, dvals.substeps, + 1, 100, 1, 5, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 2, + _("Substeps:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &dvals.substeps); /* Magnitude map menu */ - label = gtk_label_new ( _("Magnitude Map:")); + label = gtk_label_new (_("Magnitude Map:")); gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); - dint.mag_map = option_menu_mag = gtk_option_menu_new (); + option_menu_mag = gtk_option_menu_new (); gtk_table_attach (GTK_TABLE (table), option_menu_mag, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); magmenu = gimp_drawable_menu_new (warp_map_constrain, warp_map_mag_callback, - drawable, dvals.mag_map); + drawable, dvals.mag_map); gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu_mag), magmenu); gtk_widget_show (option_menu_mag); - /* ----------------------------------------------------------------------- */ /* Magnitude Usage */ toggle_hbox = gtk_hbox_new (FALSE, 4); gtk_container_border_width (GTK_CONTAINER (toggle_hbox), 1); gtk_table_attach (GTK_TABLE (table), toggle_hbox, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); - label = gtk_label_new ( _("Use Mag Map:")); - gtk_box_pack_start (GTK_BOX (toggle_hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - toggle = gtk_radio_button_new_with_label (groupmag, _("Yes")); - groupmag = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); + toggle = gtk_check_button_new_with_label (_("Use Mag Map")); gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) warp_toggle_update, - &mag_use_yes); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), mag_use_yes); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (groupmag, _("No")); - groupmag = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) warp_toggle_update, - &mag_use_no); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), mag_use_no); + (GtkSignalFunc) gimp_toggle_button_update, + &dvals.mag_use); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), dvals.mag_use); gtk_widget_show (toggle); gtk_widget_show (toggle_hbox); @@ -731,34 +645,25 @@ warp_dialog (GDrawable *drawable) gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); - /* table params: rows, columns */ otable = gtk_table_new (3, 3, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (otable), 2); + gtk_table_set_col_spacings (GTK_TABLE (otable), 4); gtk_container_set_border_width (GTK_CONTAINER (otable), 4); gtk_container_add (GTK_CONTAINER (frame), otable); - gtk_table_set_row_spacings (GTK_TABLE (otable), 2); - gtk_table_set_col_spacings (GTK_TABLE (otable), 4); - - label = gtk_label_new ( _("Gradient Scale:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (otable), label, 0, 1, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - dint.grad_scale = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (otable), entry, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%3.3f", dvals.grad_scale); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_callback, + spinbutton = gimp_spin_button_new (&adj, dvals.grad_scale, + -1000, 1000, /* ??? */ + 0.01, 0.1, 0, 1, 3); + gimp_table_attach_aligned (GTK_TABLE (otable), 0, + _("Gradient Scale:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.grad_scale); - gtk_widget_show (entry); /* --------- Gradient map menu ---------------- */ - dint.grad_map = option_menu_grad = gtk_option_menu_new (); + option_menu_grad = gtk_option_menu_new (); gtk_table_attach (GTK_TABLE (otable), option_menu_grad, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gradmenu = gimp_drawable_menu_new (warp_map_constrain, warp_map_grad_callback, @@ -771,44 +676,29 @@ warp_dialog (GDrawable *drawable) /* ---------------------------------------------- */ - label = gtk_label_new ( _("Vector Mag:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (otable), label, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - dint.vector_scale = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (otable), entry, 1, 2, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%3.3f", dvals.vector_scale); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_callback, + spinbutton = gimp_spin_button_new (&adj, dvals.vector_scale, + -1000, 1000, /* ??? */ + 0.01, 0.1, 0, 1, 3); + gimp_table_attach_aligned (GTK_TABLE (otable), 1, + _("Vector Mag:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.vector_scale); - gtk_widget_show (entry); /* -------------------------------------------------------- */ - label = gtk_label_new ( _("Angle:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach (GTK_TABLE (otable), label, 0, 1, 2, 3, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - dint.vector_angle = entry = gtk_entry_new (); - gtk_table_attach (GTK_TABLE (otable), entry, 1, 2, 2, 3, - GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_set_usize (entry, ENTRY_WIDTH, 0); - g_snprintf (buffer, sizeof (buffer), "%3.1f", dvals.vector_angle); - gtk_entry_set_text (GTK_ENTRY (entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc) warp_entry_callback, + spinbutton = gimp_spin_button_new (&adj, dvals.vector_angle, + 0, 360, 1, 15, 0, 1, 1); + gimp_table_attach_aligned (GTK_TABLE (otable), 2, + _("Angle:"), 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &dvals.vector_angle); - gtk_widget_show (entry); /* --------- Vector map menu ---------------- */ - dint.vector_map = option_menu_vector = gtk_option_menu_new (); + option_menu_vector = gtk_option_menu_new (); gtk_table_attach (GTK_TABLE (otable), option_menu_vector, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); vectormenu = gimp_drawable_menu_new (warp_map_constrain, @@ -830,30 +720,16 @@ warp_dialog (GDrawable *drawable) gimp_help_free (); gdk_flush (); - /* determine wrap type */ - if (use_wrap) - dvals.wrap_type = WRAP; - else if (use_smear) - dvals.wrap_type = SMEAR; - else if (use_black) - dvals.wrap_type = BLACK; - else if (use_color) - dvals.wrap_type = COLOR; - - /* determine whether to use magnitude multiplier map */ - if (mag_use_yes) - dvals.mag_use = TRUE; - else if (mag_use_no) - dvals.mag_use = FALSE; - return dint.run; } /* ---------------------------------------------------------------------- */ static void blur16 (GDrawable *drawable) - /* blur a 2-or-more byte-per-pixel drawable, 1st 2 bytes interpreted as a 16-bit height field. */ -{ +{ + /* blur a 2-or-more byte-per-pixel drawable, + * 1st 2 bytes interpreted as a 16-bit height field. + */ GPixelRgn srcPR, destPR; gint width, height; gint src_bytes; @@ -1318,9 +1194,9 @@ diff (GDrawable *drawable, /* -------------------------------------------------------------------------- */ static void -warp (GDrawable *orig_draw, - GDrawable **map_x, - GDrawable **map_y ) +warp (GDrawable *orig_draw, + GDrawable **map_x, + GDrawable **map_y) { GDrawable *disp_map; /* Displacement map, ie, control array */ GDrawable *mag_draw; /* Magnitude multiplier factor map */ @@ -1397,13 +1273,13 @@ warp (GDrawable *orig_draw, /* -------------------------------------------------------------------------- */ static void -warp_one(GDrawable *draw, - GDrawable *new, - GDrawable *map_x, - GDrawable *map_y, - GDrawable *mag_draw, - gint first_time, - gint step ) +warp_one (GDrawable *draw, + GDrawable *new, + GDrawable *map_x, + GDrawable *map_y, + GDrawable *mag_draw, + gint first_time, + gint step) { GPixelRgn src_rgn; GPixelRgn dest_rgn; @@ -1550,8 +1426,8 @@ warp_one(GDrawable *draw, } if (dvals.dither != 0.0) { /* random dither is +/- dvals.dither pixels */ - dx += dvals.dither*((gdouble)(rand() - (RAND_MAX >> 1)) / (RAND_MAX >> 1)); - dy += dvals.dither*((gdouble)(rand() - (RAND_MAX >> 1)) / (RAND_MAX >> 1)); + dx += dvals.dither*((gdouble)(rand() - (G_MAXRAND >> 1)) / (G_MAXRAND >> 1)); + dy += dvals.dither*((gdouble)(rand() - (G_MAXRAND >> 1)) / (G_MAXRAND >> 1)); } if (dvals.substeps != 1) { /* trace (substeps) iterations of displacement vector */ @@ -1697,19 +1573,19 @@ warp_map_mag_give_value (guchar *pt, static GTile * -warp_pixel (GDrawable * drawable, - GTile * tile, - gint width, - gint height, - gint x1, - gint y1, - gint x2, - gint y2, - gint x, - gint y, - gint * row, - gint * col, - guchar * pixel) +warp_pixel (GDrawable *drawable, + GTile *tile, + gint width, + gint height, + gint x1, + gint y1, + gint x2, + gint y2, + gint x, + gint y, + gint *row, + gint *col, + guchar *pixel) { static guchar empty_pixel[4] = {0, 0, 0, 0}; guchar *data; @@ -1835,29 +1711,29 @@ warp_map_constrain (gint32 image_id, } static void -warp_map_callback (gint32 id, - gpointer data) +warp_map_callback (gint32 id, + gpointer data) { dvals.warp_map = id; } static void -warp_map_mag_callback (gint32 id, - gpointer data) +warp_map_mag_callback (gint32 id, + gpointer data) { dvals.mag_map = id; } static void -warp_map_grad_callback (gint32 id, - gpointer data) +warp_map_grad_callback (gint32 id, + gpointer data) { dvals.grad_map = id; } static void -warp_map_vector_callback (gint32 id, - gpointer data) +warp_map_vector_callback (gint32 id, + gpointer data) { dvals.vector_map = id; } @@ -1867,41 +1743,6 @@ warp_ok_callback (GtkWidget *widget, gpointer data) { dint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } - -static void -warp_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -static void -warp_entry_callback (GtkWidget *widget, - gpointer data) -{ - gdouble *text_val; - - text_val = (gdouble *) data; - - *text_val = atof (gtk_entry_get_text (GTK_ENTRY (widget))); -} - -static void -warp_entry_int_callback (GtkWidget *widget, - gpointer data) -{ - gint *text_val; - - text_val = (gint *) data; - - *text_val = (gint) atof(gtk_entry_get_text (GTK_ENTRY (widget))); -} diff --git a/plug-ins/common/waves.c b/plug-ins/common/waves.c index 23a434792b..1c50e077ec 100644 --- a/plug-ins/common/waves.c +++ b/plug-ins/common/waves.c @@ -34,9 +34,8 @@ #include #include -#include "libgimp/stdplugins-intl.h" -#include +#include "libgimp/stdplugins-intl.h" enum { @@ -68,7 +67,27 @@ struct piArgs gint32 reflective; }; -struct mwPreview *mwp; +/* preview stuff -- to be removed as soon as we have a real libgimp preview */ + +struct mwPreview +{ + gint width; + gint height; + gint bpp; + gdouble scale; + guchar *bits; +}; + +#define PREVIEW_SIZE 100 + +static gint do_preview = TRUE; + +static GtkWidget * mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp); +static struct mwPreview * mw_preview_build (GDrawable *drawable); + +static struct mwPreview *mwp; + static void query (void); static void run (gchar *name, @@ -77,10 +96,12 @@ static void run (gchar *name, gint *nretvals, GParam **retvals); -int pluginCore (struct piArgs *argp, gint32 drawable); -int pluginCoreIA (struct piArgs *argp, gint32 drawable); +static gint pluginCore (struct piArgs *argp, + gint32 drawable); +static gint pluginCoreIA (struct piArgs *argp, + gint32 drawable); -static mw_preview_t waves_do_preview; +static void waves_do_preview (GtkWidget *preview); static void wave (guchar *src, guchar *dest, @@ -166,7 +187,7 @@ run (gchar *name, rvals[0].data.d_status = STATUS_SUCCESS; switch (param[0].data.d_int32) { - GDrawable *drw; + GDrawable *drawable; case RUN_INTERACTIVE: INIT_I18N_UI(); @@ -180,8 +201,8 @@ run (gchar *name, args.reflective = 0; } - drw = gimp_drawable_get (param[2].data.d_drawable); - mwp = mw_preview_build (drw); + drawable = gimp_drawable_get (param[2].data.d_drawable); + mwp = mw_preview_build (drawable); if (pluginCoreIA(&args, param[2].data.d_drawable) == -1) { @@ -226,7 +247,7 @@ run (gchar *name, } } -gint +static gint pluginCore (struct piArgs *argp, gint32 drawable) { @@ -305,7 +326,7 @@ waves_double_adjustment_update (GtkAdjustment *adjustment, waves_do_preview (NULL); } -gint +static gint pluginCoreIA (struct piArgs *argp, gint32 drawable) { @@ -353,7 +374,7 @@ pluginCoreIA (struct piArgs *argp, gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); - preview = mw_preview_new (vbox, mwp, &waves_do_preview); + preview = mw_preview_new (vbox, mwp); gtk_object_set_data (GTK_OBJECT (preview), "piArgs", argp); waves_do_preview (preview); @@ -444,29 +465,29 @@ pluginCoreIA (struct piArgs *argp, } static void -waves_do_preview (GtkWidget *w) +waves_do_preview (GtkWidget *widget) { static GtkWidget *theWidget = NULL; struct piArgs *argp; guchar *dst; gint y; - if (theWidget==NULL) + if (theWidget == NULL) { - theWidget=w; + theWidget = widget; } - argp = gtk_object_get_data(GTK_OBJECT(theWidget), "piArgs"); + argp = gtk_object_get_data (GTK_OBJECT (theWidget), "piArgs"); dst = g_new (guchar, mwp->width * mwp->height * mwp->bpp); - wave (mwp->bits, dst, mwp->width, mwp->height, - mwp->bpp, (argp->amplitude/mwp->scale), (argp->wavelength/mwp->scale), - argp->phase, argp->type==0, argp->reflective, 0); + wave (mwp->bits, dst, mwp->width, mwp->height, mwp->bpp, + (argp->amplitude / mwp->scale), (argp->wavelength / mwp->scale), + argp->phase, argp->type == 0, argp->reflective, 0); for (y = 0; y < mwp->height; y++) { gtk_preview_draw_row (GTK_PREVIEW (theWidget), - dst+(y*mwp->width*mwp->bpp), 0, y, + dst + (y * mwp->width * mwp->bpp), 0, y, mwp->width); } @@ -475,6 +496,129 @@ waves_do_preview (GtkWidget *w) g_free (dst); } +static void +mw_preview_toggle_callback (GtkWidget *widget, + gpointer data) +{ + gimp_toggle_button_update (widget, data); + + if (do_preview) + waves_do_preview (NULL); +} + +static struct mwPreview * +mw_preview_build_virgin (GDrawable *drawable) +{ + struct mwPreview *mwp; + + mwp = g_new (struct mwPreview, 1); + + if (drawable->width > drawable->height) + { + mwp->scale = (gdouble) drawable->width / (gdouble) PREVIEW_SIZE; + mwp->width = PREVIEW_SIZE; + mwp->height = drawable->height / mwp->scale; + } + else + { + mwp->scale = (gdouble) drawable->height / (gdouble) PREVIEW_SIZE; + mwp->height = PREVIEW_SIZE; + mwp->width = drawable->width / mwp->scale; + } + + mwp->bpp = 3; + mwp->bits = NULL; + + return mwp; +} + +static struct mwPreview * +mw_preview_build (GDrawable *drawable) +{ + struct mwPreview *mwp; + gint x, y, b; + guchar *bc; + guchar *drawableBits; + GPixelRgn pr; + + mwp = mw_preview_build_virgin (drawable); + + gimp_pixel_rgn_init (&pr, drawable, + 0, 0, drawable->width, drawable->height, FALSE, FALSE); + drawableBits = g_new (guchar, drawable->width * drawable->bpp); + + bc = mwp->bits = g_new (guchar, mwp->width * mwp->height * mwp->bpp); + for (y = 0; y < mwp->height; y++) + { + gimp_pixel_rgn_get_row (&pr, drawableBits, + 0, (gint) (y * mwp->scale), drawable->width); + + for (x = 0; x < mwp->width; x++) + { + for (b = 0; b < mwp->bpp; b++) + *bc++ = *(drawableBits + + ((gint) (x * mwp->scale) * drawable->bpp) + + b % drawable->bpp); + } + } + g_free (drawableBits); + + return mwp; +} + +static GtkWidget * +mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp) +{ + GtkWidget *preview; + GtkWidget *frame; + GtkWidget *pframe; + GtkWidget *vbox; + GtkWidget *button; + guchar *color_cube; + + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + color_cube = gimp_color_cube (); + gtk_preview_set_color_cube (color_cube[0], color_cube[1], + color_cube[2], color_cube[3]); + + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); + + frame = gtk_frame_new (_("Preview")); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_start (GTK_BOX (parent), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME(pframe), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (vbox), pframe, FALSE, FALSE, 0); + gtk_widget_show (pframe); + + preview = gtk_preview_new (GTK_PREVIEW_COLOR); + gtk_preview_size (GTK_PREVIEW (preview), mwp->width, mwp->height); + gtk_container_add (GTK_CONTAINER (pframe), preview); + gtk_widget_show (preview); + + button = gtk_check_button_new_with_label (_("Do Preview")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), do_preview); + gtk_signal_connect (GTK_OBJECT (button), "toggled", + GTK_SIGNAL_FUNC (mw_preview_toggle_callback), + &do_preview); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + return preview; +} + + + static void wave (guchar *src, @@ -489,7 +633,7 @@ wave (guchar *src, gint reflective, gint verbose) { - long rowsiz; + glong rowsiz; guchar *p; guchar *dest; gint x1, y1, x2, y2; @@ -512,12 +656,12 @@ wave (guchar *src, gint k; - phase = phase*G_PI/180; + phase = phase * G_PI / 180; rowsiz = width * bypp; if (verbose) { - gimp_progress_init ( _("Waving...")); + gimp_progress_init (_("Waving...")); prog_interval=height/10; } @@ -568,14 +712,14 @@ wave (guchar *src, yscale = 1.0; } - radius = MAX(xhsiz, yhsiz); + radius = MAX (xhsiz, yhsiz); radius2 = radius * radius; /* Wave the image! */ dst += y1 * rowsiz + x1 * bypp; - wavelength = (wavelength * 2); + wavelength *= 2; for (y = y1; y < y2; y++) { @@ -605,16 +749,16 @@ wave (guchar *src, if (reflective) { - amnt = amplitude * fabs (sin (((d / wavelength) - * (2.0 * G_PI) + phase))); + amnt = amplitude * fabs (sin (((d / wavelength) * (2.0 * G_PI) + + phase))); needx = (amnt * dx) / xscale + cen_x; needy = (amnt * dy) / yscale + cen_y; } else { - amnt = amplitude * sin (((d / wavelength) - * (2.0 * G_PI) + phase)); + amnt = amplitude * sin (((d / wavelength) * (2.0 * G_PI) + + phase)); needx = (amnt + dx) / xscale + cen_x; needy = (amnt + dy) / yscale + cen_y; diff --git a/plug-ins/common/whirlpinch.c b/plug-ins/common/whirlpinch.c index 8878d7cb7b..ce4f67c0eb 100644 --- a/plug-ins/common/whirlpinch.c +++ b/plug-ins/common/whirlpinch.c @@ -792,8 +792,10 @@ static gint whirl_pinch_dialog (void) { GtkWidget *dialog; - GtkWidget *top_table; + GtkWidget *main_vbox; GtkWidget *frame; + GtkWidget *abox; + GtkWidget *pframe; GtkWidget *table; GtkObject *adj; gint argc; @@ -841,32 +843,43 @@ whirl_pinch_dialog (void) GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - top_table = gtk_table_new (2, 3, FALSE); - gtk_container_set_border_width (GTK_CONTAINER (top_table), 6); - gtk_table_set_row_spacings (GTK_TABLE (top_table), 4); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), top_table, + main_vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), main_vbox, FALSE, FALSE, 0); - gtk_widget_show (top_table); + gtk_widget_show (main_vbox); /* Preview */ - - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 2, 0, 1, 0, 0, 0, 0); + frame = gtk_frame_new (_("Preview")); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); + abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_add (GTK_CONTAINER (frame), abox); + gtk_widget_show (abox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (pframe), GTK_SHADOW_IN); + gtk_container_set_border_width (GTK_CONTAINER (pframe), 4); + gtk_container_add (GTK_CONTAINER (abox), pframe); + gtk_widget_show (pframe); + + /* Preview */ wpint.preview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (wpint.preview), preview_width, preview_height); - gtk_container_add (GTK_CONTAINER (frame), wpint.preview); + gtk_container_add (GTK_CONTAINER (pframe), wpint.preview); gtk_widget_show (wpint.preview); /* Controls */ + frame = gtk_frame_new (_("Parameter Settings")); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); table = gtk_table_new (3, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_table_attach (GTK_TABLE (top_table), table, 0, 3, 1, 2, - GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); + gtk_container_add (GTK_CONTAINER (frame), table); gtk_widget_show (table); adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, diff --git a/plug-ins/common/wind.c b/plug-ins/common/wind.c index bc0e8d5dd7..2a29203f3d 100644 --- a/plug-ins/common/wind.c +++ b/plug-ins/common/wind.c @@ -22,14 +22,17 @@ * Version: 1.0.0 */ +#include "config.h" + #include #include -#include "config.h" #include #include #include +#include + #include "libgimp/stdplugins-intl.h" @@ -527,7 +530,7 @@ render_wind_row (guchar *sb, } bleed_variation = 1 - + (gint) (bleed_length_max * rand() / (RAND_MAX + 1.0)); + + (gint) (bleed_length_max * rand() / (G_MAXRAND + 1.0)); lbi = sbi + bleed_variation * bytes; if (lbi > lpi) @@ -770,53 +773,16 @@ dialog_box (void) /* init tooltips */ gimp_help_init (); - main_vbox = gtk_vbox_new (FALSE, 6); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dlg)->vbox), main_vbox); - gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 6); - gtk_widget_show (main_vbox); - - /**************************************************** - frame for sliders - ****************************************************/ - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX(main_vbox), frame, FALSE, FALSE, 0); - - table = gtk_table_new (2, 3, FALSE); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_table_set_row_spacings (GTK_TABLE (table), 2); - gtk_container_set_border_width (GTK_CONTAINER(table), 4); - gtk_container_add (GTK_CONTAINER (frame), table); - - /***************************************************** - slider and entry for threshold - ***************************************************/ - - adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, - _("Threshold:"), SCALE_WIDTH, 0, - config.threshold, - MIN_THRESHOLD, MAX_THRESHOLD, 1.0, 10, 0, - _("Higher values restrict the effect to fewer areas of the image"), NULL); - gtk_signal_connect (GTK_OBJECT (adj), "value_changed", - GTK_SIGNAL_FUNC (gimp_int_adjustment_update), - &config.threshold); - - /***************************************************** - slider and entry for strength of wind - ****************************************************/ - - adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, - _("Strength:"), SCALE_WIDTH, 0, - config.strength, - MIN_STRENGTH, MAX_STRENGTH, 1.0, 10.0, 0, - _("Higher values increase the magnitude of the effect"), NULL); - gtk_signal_connect (GTK_OBJECT (adj), "value_changed", - GTK_SIGNAL_FUNC (gimp_int_adjustment_update), - &config.strength); - - gtk_widget_show (table); + frame = gtk_frame_new (_("Parameter Settings")); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dlg)->vbox), frame); gtk_widget_show (frame); + main_vbox = gtk_vbox_new (FALSE, 4); + gtk_container_add (GTK_CONTAINER (frame), main_vbox); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 4); + gtk_widget_show (main_vbox); + /***************************************************** outer frame and table ***************************************************/ @@ -878,6 +844,43 @@ dialog_box (void) gtk_widget_show (frame); gtk_widget_show (table); + + /**************************************************** + table for sliders + ****************************************************/ + table = gtk_table_new (2, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_box_pack_start (GTK_BOX (main_vbox), table, FALSE, FALSE, 0); + + /***************************************************** + slider and entry for threshold + ***************************************************/ + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, + _("Threshold:"), SCALE_WIDTH, 0, + config.threshold, + MIN_THRESHOLD, MAX_THRESHOLD, 1.0, 10, 0, + _("Higher values restrict the effect to fewer areas of the image"), NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &config.threshold); + + /***************************************************** + slider and entry for strength of wind + ****************************************************/ + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, + _("Strength:"), SCALE_WIDTH, 0, + config.strength, + MIN_STRENGTH, MAX_STRENGTH, 1.0, 10.0, 0, + _("Higher values increase the magnitude of the effect"), NULL); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &config.strength); + + gtk_widget_show (table); + gtk_widget_show (dlg); gtk_main (); diff --git a/plug-ins/common/wmf.c b/plug-ins/common/wmf.c index 6be4790807..fb2d9b2e3e 100644 --- a/plug-ins/common/wmf.c +++ b/plug-ins/common/wmf.c @@ -22,19 +22,20 @@ /* #define DEBUG */ +#include "config.h" + #include #include #include -#include "config.h" - #include #include #include + #include "libgimp/stdplugins-intl.h" -typedef guchar BYTE; +typedef guchar BYTE; typedef guint16 WORD; typedef guint32 DWORD; @@ -48,87 +49,87 @@ typedef gint32 LONG; typedef struct _WindowsMetaHeader { - WORD FileType; /* Type of metafile (0=memory, 1=disk) */ - WORD HeaderSize; /* Size of header in WORDS (always 9) */ - WORD Version; /* Version of Microsoft Windows used */ - DWORD FileSize; /* Total size of the metafile in WORDs */ - WORD NumOfObjects; /* Number of objects in the file */ - DWORD MaxRecordSize; /* The size of largest record in WORDs */ - WORD NumOfParams; /* Not Used (always 0) */ + WORD FileType; /* Type of metafile (0=memory, 1=disk) */ + WORD HeaderSize; /* Size of header in WORDS (always 9) */ + WORD Version; /* Version of Microsoft Windows used */ + DWORD FileSize; /* Total size of the metafile in WORDs */ + WORD NumOfObjects; /* Number of objects in the file */ + DWORD MaxRecordSize; /* The size of largest record in WORDs */ + WORD NumOfParams; /* Not Used (always 0) */ } WMFHEAD; #define SIZE_WMFHEAD 18 typedef struct _PlaceableMetaHeader { - DWORD Key; /* Magic number (always 9AC6CDD7h) */ - WORD Handle; /* Metafile HANDLE number (always 0) */ - SHORT Left; /* Left coordinate in metafile units */ - SHORT Top; /* Top coordinate in metafile units */ - SHORT Right; /* Right coordinate in metafile units */ - SHORT Bottom; /* Bottom coordinate in metafile units */ - WORD Inch; /* Number of metafile units per inch */ - DWORD Reserved; /* Reserved (always 0) */ - WORD Checksum; /* Checksum value for previous 10 WORDs */ + DWORD Key; /* Magic number (always 9AC6CDD7h) */ + WORD Handle; /* Metafile HANDLE number (always 0) */ + SHORT Left; /* Left coordinate in metafile units */ + SHORT Top; /* Top coordinate in metafile units */ + SHORT Right; /* Right coordinate in metafile units */ + SHORT Bottom; /* Bottom coordinate in metafile units */ + WORD Inch; /* Number of metafile units per inch */ + DWORD Reserved; /* Reserved (always 0) */ + WORD Checksum; /* Checksum value for previous 10 WORDs */ } PLACEABLEMETAHEADER; #define SIZE_PLACEABLEMETAHEADER 22 typedef struct _Clipboard16MetaHeader { - SHORT MappingMode; /* Units used to playback metafile */ - SHORT Width; /* Width of the metafile */ - SHORT Height; /* Height of the metafile */ - WORD Handle; /* Handle to the metafile in memory */ + SHORT MappingMode; /* Units used to playback metafile */ + SHORT Width; /* Width of the metafile */ + SHORT Height; /* Height of the metafile */ + WORD Handle; /* Handle to the metafile in memory */ } CLIPBOARD16METAHEADER; #define SIZE_CLIPBOARD16METAHEADER 8 typedef struct _Clipboard32MetaHeader { - LONG MappingMode; /* Units used to playback metafile */ - LONG Width; /* Width of the metafile */ - LONG Height; /* Height of the metafile */ - DWORD Handle; /* Handle to the metafile in memory */ + LONG MappingMode; /* Units used to playback metafile */ + LONG Width; /* Width of the metafile */ + LONG Height; /* Height of the metafile */ + DWORD Handle; /* Handle to the metafile in memory */ } CLIPBOARD32METAHEADER; #define SIZE_CLIPBOARD32METAHEADER 16 typedef struct _EnhancedMetaHeader { - DWORD RecordType; /* Record type */ - DWORD RecordSize; /* Size of the record in bytes */ - LONG BoundsLeft; /* Left inclusive bounds */ - LONG BoundsRight; /* Right inclusive bounds */ - LONG BoundsTop; /* Top inclusive bounds */ - LONG BoundsBottom; /* Bottom inclusive bounds */ - LONG FrameLeft; /* Left side of inclusive picture frame */ - LONG FrameRight; /* Right side of inclusive picture frame */ - LONG FrameTop; /* Top side of inclusive picture frame */ - LONG FrameBottom; /* Bottom side of inclusive picture frame */ - DWORD Signature; /* Signature ID (always 0x464D4520) */ - DWORD Version; /* Version of the metafile */ - DWORD Size; /* Size of the metafile in bytes */ - DWORD NumOfRecords; /* Number of records in the metafile */ - WORD NumOfHandles; /* Number of handles in the handle table */ - WORD Reserved; /* Not used (always 0) */ - DWORD SizeOfDescrip; /* Size of description string in WORDs */ - DWORD OffsOfDescrip; /* Offset of description string in metafile */ - DWORD NumPalEntries; /* Number of color palette entries */ - LONG WidthDevPixels; /* Width of reference device in pixels */ - LONG HeightDevPixels; /* Height of reference device in pixels */ - LONG WidthDevMM; /* Width of reference device in millimeters */ - LONG HeightDevMM; /* Height of reference device in millimeters */ + DWORD RecordType; /* Record type */ + DWORD RecordSize; /* Size of the record in bytes */ + LONG BoundsLeft; /* Left inclusive bounds */ + LONG BoundsRight; /* Right inclusive bounds */ + LONG BoundsTop; /* Top inclusive bounds */ + LONG BoundsBottom; /* Bottom inclusive bounds */ + LONG FrameLeft; /* Left side of inclusive picture frame */ + LONG FrameRight; /* Right side of inclusive picture frame */ + LONG FrameTop; /* Top side of inclusive picture frame */ + LONG FrameBottom; /* Bottom side of inclusive picture frame */ + DWORD Signature; /* Signature ID (always 0x464D4520) */ + DWORD Version; /* Version of the metafile */ + DWORD Size; /* Size of the metafile in bytes */ + DWORD NumOfRecords; /* Number of records in the metafile */ + WORD NumOfHandles; /* Number of handles in the handle table */ + WORD Reserved; /* Not used (always 0) */ + DWORD SizeOfDescrip; /* Size of description string in WORDs */ + DWORD OffsOfDescrip; /* Offset of description string in metafile */ + DWORD NumPalEntries; /* Number of color palette entries */ + LONG WidthDevPixels; /* Width of reference device in pixels */ + LONG HeightDevPixels; /* Height of reference device in pixels */ + LONG WidthDevMM; /* Width of reference device in millimeters */ + LONG HeightDevMM; /* Height of reference device in millimeters */ } ENHANCEDMETAHEADER; #define SIZE_ENHANCEDMETAHEADER 88 typedef struct _StandardMetaRecord { - DWORD Size; /* Total size of the record in WORDs */ - WORD Function; /* Function number (defined in WINDOWS.H) */ + DWORD Size; /* Total size of the record in WORDs */ + WORD Function; /* Function number (defined in WINDOWS.H) */ #if DOCUMENTATION_ONLY_ILLEGAL_C - WORD Parameters[]; /* Parameter values passed to function */ + WORD Parameters[]; /* Parameter values passed to function */ #endif } WMFRECORD; @@ -219,75 +220,75 @@ typedef struct _StandardMetaRecord typedef struct _RGBTriple { - BYTE Red; - BYTE Green; - BYTE Blue; + BYTE Red; + BYTE Green; + BYTE Blue; } RGBTRIPLE; typedef struct _BitBltRecord { - DWORD Size; /* Total size of the record in WORDs */ - WORD Function; /* Function number (0x0922) */ - WORD RasterOp; /* High-order word for the raster operation */ - WORD YSrcOrigin; /* Y-coordinate of the source origin */ - WORD XSrcOrigin; /* X-coordinate of the source origin */ - WORD YDest; /* Destination width */ - WORD XDest; /* Destination height */ - WORD YDestOrigin; /* Y-coordinate of the destination origin */ - WORD XDestOrigin; /* X-coordinate of the destination origin */ - /* DDB Bitmap */ - DWORD Width; /* Width of bitmap in pixels */ - DWORD Height; /* Height of bitmap in scan lines */ - DWORD BytesPerLine; /* Number of bytes in each scan line */ - WORD NumColorPlanes; /* Number of color planes in the bitmap */ - WORD BitsPerPixel; /* Number of bits in each pixel */ + DWORD Size; /* Total size of the record in WORDs */ + WORD Function; /* Function number (0x0922) */ + WORD RasterOp; /* High-order word for the raster operation */ + WORD YSrcOrigin; /* Y-coordinate of the source origin */ + WORD XSrcOrigin; /* X-coordinate of the source origin */ + WORD YDest; /* Destination width */ + WORD XDest; /* Destination height */ + WORD YDestOrigin; /* Y-coordinate of the destination origin */ + WORD XDestOrigin; /* X-coordinate of the destination origin */ + /* DDB Bitmap */ + DWORD Width; /* Width of bitmap in pixels */ + DWORD Height; /* Height of bitmap in scan lines */ + DWORD BytesPerLine; /* Number of bytes in each scan line */ + WORD NumColorPlanes; /* Number of color planes in the bitmap */ + WORD BitsPerPixel; /* Number of bits in each pixel */ #if DOCUMENTATION_ONLY_ILLEGAL_C - RGBTRIPLE Bitmap[]; /* Bitmap data */ + RGBTRIPLE Bitmap[]; /* Bitmap data */ #endif } BITBLTRECORD; typedef struct _RGBQuad { - BYTE Red; - BYTE Green; - BYTE Blue; - BYTE Reserved; + BYTE Red; + BYTE Green; + BYTE Blue; + BYTE Reserved; } RGBQUAD; typedef struct _DibBitBltRecord { - DWORD Size; /* Total size of the record in WORDs */ - WORD Function; /* Function number (0x0940) */ - WORD RasterOp; /* High-order word for the raster operation */ - WORD YSrcOrigin; /* Y-coordinate of the source origin */ - WORD XSrcOrigin; /* X-coordinate of the source origin */ - WORD YDest; /* Destination width */ - WORD XDest; /* Destination height */ - WORD YDestOrigin; /* Y-coordinate of the destination origin */ - WORD XDestOrigin; /* X-coordinate of the destination origin */ - /* DIB Bitmap */ - DWORD Width; /* Width of bitmap in pixels */ - DWORD Height; /* Height of bitmap in scan lines */ - DWORD BytesPerLine; /* Number of bytes in each scan line */ - WORD NumColorPlanes; /* Number of color planes in the bitmap */ - WORD BitsPerPixel; /* Number of bits in each pixel */ - DWORD Compression; /* Compression type */ - DWORD SizeImage; /* Size of bitmap in bytes */ - LONG XPelsPerMeter; /* Width of image in pixels per meter */ - LONG YPelsPerMeter; /* Height of image in pixels per meter */ - DWORD ClrUsed; /* Number of colors used */ - DWORD ClrImportant; /* Number of important colors */ + DWORD Size; /* Total size of the record in WORDs */ + WORD Function; /* Function number (0x0940) */ + WORD RasterOp; /* High-order word for the raster operation */ + WORD YSrcOrigin; /* Y-coordinate of the source origin */ + WORD XSrcOrigin; /* X-coordinate of the source origin */ + WORD YDest; /* Destination width */ + WORD XDest; /* Destination height */ + WORD YDestOrigin; /* Y-coordinate of the destination origin */ + WORD XDestOrigin; /* X-coordinate of the destination origin */ + /* DIB Bitmap */ + DWORD Width; /* Width of bitmap in pixels */ + DWORD Height; /* Height of bitmap in scan lines */ + DWORD BytesPerLine; /* Number of bytes in each scan line */ + WORD NumColorPlanes; /* Number of color planes in the bitmap */ + WORD BitsPerPixel; /* Number of bits in each pixel */ + DWORD Compression; /* Compression type */ + DWORD SizeImage; /* Size of bitmap in bytes */ + LONG XPelsPerMeter; /* Width of image in pixels per meter */ + LONG YPelsPerMeter; /* Height of image in pixels per meter */ + DWORD ClrUsed; /* Number of colors used */ + DWORD ClrImportant; /* Number of important colors */ #if DOCUMENTATION_ONLY_ILLEGAL_C - RGBQUAD Bitmap[]; /* Bitmap data */ + RGBQUAD Bitmap[]; /* Bitmap data */ #endif } DIBBITBLTRECORD; typedef struct _EnhancedMetaRecord { - DWORD Function; /* Function number (defined in WINGDI.H) */ - DWORD Size; /* Total size of the record in WORDs */ + DWORD Function; /* Function number (defined in WINGDI.H) */ + DWORD Size; /* Total size of the record in WORDs */ #if DOCUMENTATION_ONLY_ILLEGAL_C - DWORD Parameters[]; /* Parameter values passed to GDI function */ + DWORD Parameters[]; /* Parameter values passed to GDI function */ #endif } EMFRECORD; @@ -394,80 +395,80 @@ typedef struct _EnhancedMetaRecord typedef struct _PaletteEntry { - BYTE Red; /* Red component value */ - BYTE Green; /* Green component value */ - BYTE Blue; /* Blue component value */ - BYTE Flags; /* Flag values */ + BYTE Red; /* Red component value */ + BYTE Green; /* Green component value */ + BYTE Blue; /* Blue component value */ + BYTE Flags; /* Flag values */ } PALENT; typedef struct _EndOfRecord { - DWORD Function; /* End Of Record ID (14) */ - DWORD Size; /* Total size of the record in WORDs */ - DWORD NumPalEntries; /* Number of color palette entries */ - DWORD OffPalEntries; /* Offset of color palette entries */ + DWORD Function; /* End Of Record ID (14) */ + DWORD Size; /* Total size of the record in WORDs */ + DWORD NumPalEntries; /* Number of color palette entries */ + DWORD OffPalEntries; /* Offset of color palette entries */ #if DOCUMENTATION_ONLY_ILLEGAL_C - PALENT Palette[]; /* The color palette data */ - DWORD OffToEOF; /* Offset to beginning of this record */ + PALENT Palette[]; /* The color palette data */ + DWORD OffToEOF; /* Offset to beginning of this record */ #endif } ENDOFRECORD; typedef struct _GdiCommentRecord { - DWORD Function; /* GDI Comment ID (70) */ - DWORD Size; /* Total size of the record in WORDs */ - DWORD SizeOfData; /* Size of comment data in bytes */ + DWORD Function; /* GDI Comment ID (70) */ + DWORD Size; /* Total size of the record in WORDs */ + DWORD SizeOfData; /* Size of comment data in bytes */ #if DOCUMENTATION_ONLY_ILLEGAL_C - BYTE Data[]; /* Comment data */ + BYTE Data[]; /* Comment data */ #endif } GDICOMMENTRECORD; typedef struct _GdiCommentMetafile { - DWORD Identifier; /* Comment ID (0x43494447) */ - DWORD Comment; /* Metafile ID (0x80000001) */ - DWORD Version; /* Version of the metafile */ - DWORD Checksum; /* Checksum value of the metafile */ - DWORD Flags; /* Flags (always 0) */ - DWORD Size; /* Size of the metafile data in bytes */ + DWORD Identifier; /* Comment ID (0x43494447) */ + DWORD Comment; /* Metafile ID (0x80000001) */ + DWORD Version; /* Version of the metafile */ + DWORD Checksum; /* Checksum value of the metafile */ + DWORD Flags; /* Flags (always 0) */ + DWORD Size; /* Size of the metafile data in bytes */ } GDICOMMENTMETAFILE; typedef struct _GdiCommentBeginGroup { - DWORD Identifier; /* Comment ID (0x43494447) */ - DWORD Comment; /* BeginGroup ID (0x00000002) */ - LONG BoundsLeft; /* Left side of bounding rectangle */ - LONG BoundsRight; /* Right side of bounding rectangle */ - LONG BoundsTop; /* Top side of bounding rectangle */ - LONG BoundsBottom; /* Bottom side of bounding rectangle */ - DWORD SizeOfDescrip; /* Number of characters in the description */ + DWORD Identifier; /* Comment ID (0x43494447) */ + DWORD Comment; /* BeginGroup ID (0x00000002) */ + LONG BoundsLeft; /* Left side of bounding rectangle */ + LONG BoundsRight; /* Right side of bounding rectangle */ + LONG BoundsTop; /* Top side of bounding rectangle */ + LONG BoundsBottom; /* Bottom side of bounding rectangle */ + DWORD SizeOfDescrip; /* Number of characters in the description */ } GDICOMMENTBEGINGROUP; typedef struct _GdiCommentEndGroup { - DWORD Identifier; /* Comment ID (0x43494447) */ - DWORD Comment; /* EndGroup ID (0x00000003) */ + DWORD Identifier; /* Comment ID (0x43494447) */ + DWORD Comment; /* EndGroup ID (0x00000003) */ } GDICOMMENTENDGROUP; typedef struct _EmrFormat { - DWORD Signature; /* Format signature */ - DWORD Version; /* Format version number */ - DWORD Data; /* Size of data in bytes */ - DWORD OffsetToData; /* Offset to data */ + DWORD Signature; /* Format signature */ + DWORD Version; /* Format version number */ + DWORD Data; /* Size of data in bytes */ + DWORD OffsetToData; /* Offset to data */ } EMRFORMAT; typedef struct _GdiCommentMultiFormats { - DWORD Identifier; /* Comment ID (0x43494447) */ - DWORD Comment; /* Multiformats ID (0x40000004) */ - LONG BoundsLeft; /* Left side of bounding rectangle */ - LONG BoundsRight; /* Right side of bounding rectangle */ - LONG BoundsTop; /* Top side of bounding rectangle */ - LONG BoundsBottom; /* Bottom side of bounding rectangle */ - DWORD NumFormats; /* Number of formats in comment */ + DWORD Identifier; /* Comment ID (0x43494447) */ + DWORD Comment; /* Multiformats ID (0x40000004) */ + LONG BoundsLeft; /* Left side of bounding rectangle */ + LONG BoundsRight; /* Right side of bounding rectangle */ + LONG BoundsTop; /* Top side of bounding rectangle */ + LONG BoundsBottom; /* Bottom side of bounding rectangle */ + DWORD NumFormats; /* Number of formats in comment */ #if DOCUMENTATION_ONLY_ILLEGAL_C - EMRFORMAT Data[]; /* Array of comment data */ + EMRFORMAT Data[]; /* Array of comment data */ #endif } GDICOMMENTMULTIFORMATS; @@ -865,28 +866,28 @@ typedef struct } OrgAndExt; static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); +static gint32 load_image (gchar *filename); -static gint readparams (DWORD size, - guint nparams, - FILE *fd, - WORD *params); +static gint readparams (DWORD size, + guint nparams, + FILE *fd, + WORD *params); -static void sync_record (DWORD size, - guint nparams, - FILE *fd); +static void sync_record (DWORD size, + guint nparams, + FILE *fd); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static GRunModeType l_run_mode; @@ -908,7 +909,7 @@ load_ok_callback (GtkWidget *widget, } static gint -load_dialog (char *file_name) +load_dialog (gchar *file_name) { LoadDialogVals *vals; GtkWidget *frame; @@ -1003,7 +1004,7 @@ check_load_vals (void) MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -1011,17 +1012,20 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); + static GParamDef load_setargs_args[] = { { PARAM_FLOAT, "scale", "Scale in which to load image" } }; - static int nload_setargs_args = sizeof (load_setargs_args) / sizeof (load_setargs_args[0]); + static gint nload_setargs_args = (sizeof (load_setargs_args) / + sizeof (load_setargs_args[0])); INIT_I18N(); @@ -1049,67 +1053,78 @@ query () nload_setargs_args, 0, load_setargs_args, NULL); - gimp_register_magic_load_handler ("file_wmf_load", "wmf,apm", "", "0,string,\\327\\315\\306\\232"); + gimp_register_magic_load_handler ("file_wmf_load", + "wmf,apm", + "", + "0,string,\\327\\315\\306\\232"); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - gint32 image_ID; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; l_run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_wmf_load") == 0) { switch (l_run_mode) { case RUN_INTERACTIVE: - INIT_I18N_UI(); + INIT_I18N_UI(); gimp_get_data ("file_wmf_load", &load_vals); if (!load_dialog (param[1].data.d_string)) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: - INIT_I18N(); + INIT_I18N(); gimp_get_data ("file_wmf_load", &load_vals); break; case RUN_WITH_LAST_VALS: - INIT_I18N(); + INIT_I18N(); gimp_get_data ("file_wmf_load", &load_vals); + default: + break; } check_load_vals (); image_ID = load_image (param[1].data.d_string); - - values[0].data.d_status = (image_ID != -1) ? STATUS_SUCCESS : STATUS_EXECUTION_ERROR; - - if (values[0].data.d_status == STATUS_SUCCESS) + + if (image_ID != -1) { gimp_set_data ("file_wmf_load", &load_vals, sizeof (load_vals)); + *nreturn_vals = 2; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static Object * diff --git a/plug-ins/common/xbm.c b/plug-ins/common/xbm.c index cebaa3602a..cb3687d99d 100644 --- a/plug-ins/common/xbm.c +++ b/plug-ins/common/xbm.c @@ -53,11 +53,11 @@ /* Wear your GIMP with pride! */ #define DEFAULT_USE_COMMENT TRUE -#define MAX_COMMENT 72 +#define MAX_COMMENT 72 /* C identifier prefix. */ #define DEFAULT_PREFIX "bitmap" -#define MAX_PREFIX 24 +#define MAX_PREFIX 24 /* Whether or not to save as X10 bitmap. */ #define DEFAULT_X10_FORMAT FALSE @@ -65,22 +65,21 @@ typedef struct _XBMSaveVals { gchar comment[MAX_COMMENT + 1]; - gint x10_format; - gint x_hot; - gint y_hot; + gint x10_format; + gint x_hot; + gint y_hot; gchar prefix[MAX_PREFIX + 1]; } XBMSaveVals; static XBMSaveVals xsvals = { "###", /* comment */ - DEFAULT_X10_FORMAT, /* x10_format */ - -1, /* x_hot */ - -1, /* y_hot */ - DEFAULT_PREFIX, /* prefix */ + DEFAULT_X10_FORMAT, /* x10_format */ + -1, /* x_hot */ + -1, /* y_hot */ + DEFAULT_PREFIX, /* prefix */ }; - typedef struct _XBMSaveInterface { gint run; @@ -88,40 +87,38 @@ typedef struct _XBMSaveInterface static XBMSaveInterface xsint = { - FALSE /* run */ + FALSE /* run */ }; /* Declare some local functions. */ -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static void init_gtk (void); -static gint32 load_image (char *filename); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID); -static gint save_dialog (gint32 drawable_ID); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); + +static void init_gtk (void); +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); +static gint save_dialog (gint32 drawable_ID); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_toggle_update (GtkWidget *widget, - gpointer data); static void comment_entry_callback (GtkWidget *widget, gpointer data); static void prefix_entry_callback (GtkWidget *widget, gpointer data); - GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () @@ -130,9 +127,8 @@ MAIN () static int verbose = VERBOSE; #endif - static void -query () +query (void) { static GParamDef load_args[] = { @@ -144,9 +140,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); - + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -161,7 +157,7 @@ query () { PARAM_INT32, "y_hot", "Y coordinate of hotspot" }, { PARAM_STRING, "prefix", "Identifier prefix [determined from filename]"}, } ; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N (); @@ -177,7 +173,6 @@ query () nload_args, nload_return_vals, load_args, load_return_vals); - gimp_install_procedure ("file_xbm_save", "Save a file in X10 or X11 bitmap (XBM) file format", "Save a file in X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat black-and-white (two color indexed) images.", @@ -190,16 +185,19 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_load_handler ("file_xbm_load", "xbm,icon,bitmap", ""); - gimp_register_save_handler ("file_xbm_save", "xbm,icon,bitmap", ""); + gimp_register_load_handler ("file_xbm_load", + "xbm,icon,bitmap", + ""); + gimp_register_save_handler ("file_xbm_save", + "xbm,icon,bitmap", + ""); } - static void -init_prefix (char *filename) +init_prefix (gchar *filename) { - char *p, *prefix; - int len; + gchar *p, *prefix; + gint len; /* Mangle the filename to get the prefix. */ prefix = strrchr (filename, '/'); @@ -219,30 +217,29 @@ init_prefix (char *filename) strncpy (xsvals.prefix, prefix, len); } - static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GStatusType status = STATUS_SUCCESS; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; INIT_I18N_UI(); - strncpy(xsvals.comment, _("Made with Gimp"), MAX_COMMENT); + strncpy (xsvals.comment, _("Created with The GIMP"), MAX_COMMENT); run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; #ifdef VERBOSE if (verbose) @@ -256,13 +253,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_xbm_save") == 0) @@ -276,11 +272,11 @@ run (char *name, case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: init_gtk (); - export = gimp_export_image (&image_ID, &drawable_ID, "XBM", CAN_HANDLE_INDEXED); + export = gimp_export_image (&image_ID, &drawable_ID, "XBM", + CAN_HANDLE_INDEXED); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -299,17 +295,18 @@ run (char *name, /* First acquire information with a dialog */ if (! save_dialog (drawable_ID)) - return; - + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the required arguments are there! */ if (nparams < 5) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) { - int i = 5; + status = STATUS_CALLING_ERROR; + } + else + { + gint i = 5; if (nparams > i) { @@ -356,30 +353,38 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + if (status == STATUS_SUCCESS) { - /* Store xsvals data */ - gimp_set_data ("file_xbm_save", &xsvals, sizeof (xsvals)); - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + /* Store xsvals data */ + gimp_set_data ("file_xbm_save", &xsvals, sizeof (xsvals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } -} + else + { + status = STATUS_CALLING_ERROR; + } + values[0].data.d_status = status; +} /* Return the value of a digit. */ static gint -getval (int c, - int base) +getval (gint c, + gint base) { static guchar *digits = "0123456789abcdefABCDEF"; - int val; + gint val; /* Include uppercase hex digits. */ if (base == 16) @@ -397,7 +402,7 @@ getval (int c, static gint cpp_fgetc (FILE *fp) { - int comment, c; + gint comment, c; /* FIXME: insert whitespace as advertised. */ comment = 0; @@ -442,10 +447,10 @@ cpp_fgetc (FILE *fp) /* Match a string with a file. */ static gint -match (FILE *fp, - char *s) +match (FILE *fp, + gchar *s) { - int c; + gint c; do { @@ -518,7 +523,7 @@ get_int (FILE *fp) static gint -load_image (char *filename) +load_image (gchar *filename) { FILE *fp; gint32 image_ID, layer_ID; @@ -693,6 +698,7 @@ load_image (char *filename) gimp_drawable_detach (drawable); fclose (fp); + return image_ID; } @@ -749,7 +755,7 @@ not_bw_dialog (void) static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) { @@ -937,23 +943,27 @@ static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("xbm"); gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); + gtk_initialized = TRUE; } static gint save_dialog (gint32 drawable_ID) { - GtkWidget *dlg, *toggle, *label, *entry, *frame, *hbox, *vbox; - - xsint.run = FALSE; + GtkWidget *dlg; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *toggle; + GtkWidget *table; + GtkWidget *entry; dlg = gimp_dialog_new (_("Save as XBM"), "xbm", gimp_plugin_help_func, "filters/xbm.html", @@ -982,51 +992,41 @@ save_dialog (gint32 drawable_ID) gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); gtk_container_add (GTK_CONTAINER (frame), vbox); - /* comment string. */ - hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - label = gtk_label_new (_("Description:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - - entry = gtk_entry_new_with_max_length (MAX_COMMENT); - gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0); - gtk_widget_set_usize (entry, 240, 0); - gtk_entry_set_text (GTK_ENTRY (entry), xsvals.comment); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - GTK_SIGNAL_FUNC (comment_entry_callback), - NULL); - gtk_widget_show (entry); - - gtk_widget_show (hbox); - /* X10 format */ toggle = gtk_check_button_new_with_label (_("X10 Format Bitmap")); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - GTK_SIGNAL_FUNC (save_toggle_update), + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &xsvals.x10_format); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), xsvals.x10_format); gtk_widget_show (toggle); + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); + gtk_widget_show (table); + /* prefix */ - hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - - label = gtk_label_new (_("Identifier Prefix:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_widget_show (label); - entry = gtk_entry_new_with_max_length (MAX_PREFIX); - gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0); gtk_entry_set_text (GTK_ENTRY (entry), xsvals.prefix); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + _("Identifier Prefix:"), 1.0, 0.5, + entry, TRUE); gtk_signal_connect (GTK_OBJECT (entry), "changed", GTK_SIGNAL_FUNC (prefix_entry_callback), NULL); - gtk_widget_show (entry); - gtk_widget_show (hbox); + /* comment string. */ + entry = gtk_entry_new_with_max_length (MAX_COMMENT); + gtk_widget_set_usize (entry, 240, 0); + gtk_entry_set_text (GTK_ENTRY (entry), xsvals.comment); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + _("Comment:"), 1.0, 0.5, + entry, TRUE); + gtk_signal_connect (GTK_OBJECT (entry), "changed", + GTK_SIGNAL_FUNC (comment_entry_callback), + NULL); /* Done. */ gtk_widget_show (vbox); @@ -1049,16 +1049,15 @@ comment_entry_callback (GtkWidget *widget, gtk_entry_get_text (GTK_ENTRY (widget)), MAX_COMMENT); } - static void prefix_entry_callback (GtkWidget *widget, gpointer data) { memset (xsvals.prefix, 0, sizeof (xsvals.prefix)); - strncpy (xsvals.prefix, gtk_entry_get_text (GTK_ENTRY (widget)), MAX_PREFIX); + strncpy (xsvals.prefix, + gtk_entry_get_text (GTK_ENTRY (widget)), MAX_PREFIX); } - static void save_ok_callback (GtkWidget *widget, gpointer data) @@ -1067,18 +1066,3 @@ save_ok_callback (GtkWidget *widget, gtk_widget_destroy (GTK_WIDGET (data)); } - - -static void -save_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} diff --git a/plug-ins/common/xpm.c b/plug-ins/common/xpm.c index f80ee5fd2f..fcd8ccd112 100644 --- a/plug-ins/common/xpm.c +++ b/plug-ins/common/xpm.c @@ -41,11 +41,10 @@ Previous...Inherited code from Ray Lehtiniemi, who inherited it from S & P. #include #include -#include #include "libgimp/stdplugins-intl.h" -static const char linenoise [] = +static const gchar linenoise [] = " .+@#$%&*=-;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyz\ ABCDEFGHIJKLMNOPQRSTUVWXYZ`"; @@ -70,28 +69,31 @@ typedef struct guchar b; } rgbkey; -/* whether the image is color or not. global so I only have to pass one user value -to the GHFunc */ - int color; -/* bytes per pixel. global so I only have to pass one user value -to the GHFunc */ - int cpp; +/* whether the image is color or not. global so I only have to pass + * one user value to the GHFunc + */ +gint color; + +/* bytes per pixel. global so I only have to pass one user value + * to the GHFunc + */ +gint cpp; /* Declare local functions */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_image (char *filename); +static gint32 load_image (gchar *filename); static void parse_colors (XpmImage *xpm_image, guchar **cmap); static void parse_image (gint32 image_ID, XpmImage *xpm_image, guchar *cmap); -static gint save_image (char *filename, +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); @@ -99,16 +101,14 @@ static void init_gtk (void); static gint save_dialog (void); static void save_ok_callback (GtkWidget *widget, gpointer data); -static void save_scale_update (GtkAdjustment *adjustment, - double *scale_val); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static XpmSaveVals xpmvals = @@ -137,8 +137,9 @@ query (void) { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -148,7 +149,7 @@ query (void) { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -176,32 +177,35 @@ query (void) nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_xpm_load", "xpm", "/Xpm", + gimp_register_magic_load_handler ("file_xpm_load", + "xpm", + "/Xpm", "0, string, /* XPM */"); - gimp_register_save_handler ("file_xpm_save", "xpm", "/Xpm"); + gimp_register_save_handler ("file_xpm_save", + "xpm", + "/Xpm"); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; - GStatusType status = STATUS_SUCCESS; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - + *return_vals = values; values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + values[0].data.d_status = STATUS_EXECUTION_ERROR; INIT_I18N(); @@ -212,13 +216,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_xpm_save") == 0) @@ -227,19 +230,20 @@ run (char *name, image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - + /* eventually export the image */ switch (run_mode) { case RUN_INTERACTIVE: case RUN_WITH_LAST_VALS: export = gimp_export_image (&image_ID, &drawable_ID, "XPM", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | - CAN_HANDLE_INDEXED | CAN_HANDLE_ALPHA)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED | + CAN_HANDLE_ALPHA)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -256,20 +260,24 @@ run (char *name, /* First acquire information with a dialog */ if (gimp_drawable_has_alpha (drawable_ID)) if (! save_dialog ()) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 4) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { xpmvals.threshold = param[4].data.d_float; + + if (xpmvals.threshold < 0.0 || + xpmvals.threshold > 1.0) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (xpmvals.threshold < 0.0 || xpmvals.threshold > 1.0)) - status = STATUS_CALLING_ERROR; + break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ @@ -279,29 +287,35 @@ run (char *name, default: break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID)) + + if (status == STATUS_SUCCESS) { - gimp_set_data ("file_xpm_save", &xpmvals, sizeof (XpmSaveVals)); - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID)) + { + gimp_set_data ("file_xpm_save", &xpmvals, sizeof (XpmSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - - static gint32 -load_image (char *filename) +load_image (gchar *filename) { XpmImage xpm_image; guchar *cmap; @@ -320,7 +334,7 @@ load_image (char *filename) parse_colors (&xpm_image, &cmap); if (cmap == NULL) gimp_quit(); - + /* create the new image */ image_ID = gimp_image_new (xpm_image.width, xpm_image.height, @@ -338,9 +352,6 @@ load_image (char *filename) return image_ID; } - - - static void parse_colors (XpmImage *xpm_image, guchar **cmap) @@ -349,13 +360,12 @@ parse_colors (XpmImage *xpm_image, Colormap colormap; int i, j; - /* open the display and get the default color map */ display = XOpenDisplay (NULL); colormap = DefaultColormap (display, DefaultScreen (display)); /* alloc a buffer to hold the parsed colors */ - *cmap = g_new(guchar, sizeof (guchar) * 4 * xpm_image->ncolors); + *cmap = g_new (guchar, sizeof (guchar) * 4 * xpm_image->ncolors); if ((*cmap) != NULL) { @@ -383,23 +393,24 @@ parse_colors (XpmImage *xpm_image, /* parse if it's not transparent. the assumption is that g_new will memset the buffer to zeros */ - if (strcmp(colorspec, "None") != 0) { - XParseColor (display, colormap, colorspec, &xcolor); - (*cmap)[j++] = xcolor.red >> 8; - (*cmap)[j++] = xcolor.green >> 8; - (*cmap)[j++] = xcolor.blue >> 8; - (*cmap)[j++] = ~0; - } else { - j += 4; - } + if (strcmp(colorspec, "None") != 0) + { + XParseColor (display, colormap, colorspec, &xcolor); + (*cmap)[j++] = xcolor.red >> 8; + (*cmap)[j++] = xcolor.green >> 8; + (*cmap)[j++] = xcolor.blue >> 8; + (*cmap)[j++] = ~0; + } + else + { + j += 4; + } } } XCloseDisplay (display); } - - static void parse_image (gint32 image_ID, XpmImage *xpm_image, @@ -416,7 +427,6 @@ parse_image (gint32 image_ID, gint32 layer_ID; int i,j; - layer_ID = gimp_layer_new (image_ID, _("Color"), xpm_image->width, @@ -472,25 +482,26 @@ parse_image (gint32 image_ID, gimp_drawable_detach (drawable); } - -guint rgbhash (rgbkey *c) +guint +rgbhash (rgbkey *c) { return ((guint)c->r) ^ ((guint)c->g) ^ ((guint)c->b); } -guint compare (rgbkey *c1, - rgbkey *c2) +guint +compare (rgbkey *c1, + rgbkey *c2) { return (c1->r == c2->r)&&(c1->g == c2->g)&&(c1->b == c2->b); } - -void set_XpmImage (XpmColor *array, - guint index, - char *colorstring) +void +set_XpmImage (XpmColor *array, + guint index, + gchar *colorstring) { - char *p; - int i, charnum, indtemp; + gchar *p; + gint i, charnum, indtemp; indtemp=index; array[index].string = p = g_new(char, cpp+1); @@ -519,44 +530,45 @@ void set_XpmImage (XpmColor *array, } } -void create_colormap_from_hash (gpointer gkey, - gpointer value, - gpointer user_data) +void +create_colormap_from_hash (gpointer gkey, + gpointer value, + gpointer user_data) { rgbkey *key = gkey; - char *string = g_new(char, 8); + gchar *string = g_new(char, 8); - sprintf(string, "#%02X%02X%02X", (int)key->r, (int)key->g, (int)key->b); - set_XpmImage(user_data, *((int *) value), string); + sprintf (string, "#%02X%02X%02X", (int)key->r, (int)key->g, (int)key->b); + set_XpmImage (user_data, *((int *) value), string); } static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) { GDrawable *drawable; - int width; - int height; - int alpha; - int ncolors=1; - int *indexno; - int indexed; + gint width; + gint height; + gint alpha; + gint ncolors = 1; + gint *indexno; + gint indexed; XpmColor *colormap; XpmImage *image; - guint *ibuff = NULL; + guint *ibuff = NULL; /*guint *mbuff = NULL;*/ GPixelRgn pixel_rgn; guchar *buffer; guchar *data; GHashTable *hash = NULL; - - int i, j, k; - int threshold = 255 * xpmvals.threshold; + + gint i, j, k; + gint threshold = 255 * xpmvals.threshold; gint rc = FALSE; @@ -615,7 +627,7 @@ save_image (char *filename, /* allocate buffers making the assumption that ibuff and mbuff are 32 bit aligned... */ - if ((ibuff = g_new(guint, width*height)) == NULL) + if ((ibuff = g_new (guint, width * height)) == NULL) goto cleanup; /*if ((mbuff = g_new(guint, width*height)) == NULL) @@ -673,27 +685,35 @@ save_image (char *filename, a = alpha ? *(data++) : 255; if (a < threshold) - *(idata++) = 0; + { + *(idata++) = 0; + } else - if (indexed) - *(idata++) = (key->r)+1; - else { - indexno = g_hash_table_lookup(hash, key); - if (!indexno) { - indexno = g_new(int, 1); - *indexno = ncolors++; - g_hash_table_insert(hash, key, indexno); - key = g_new(rgbkey, 1); - } + { + if (indexed) + { + *(idata++) = (key->r)+1; + } + else + { + indexno = g_hash_table_lookup(hash, key); + if (!indexno) + { + indexno = g_new(int, 1); + *indexno = ncolors++; + g_hash_table_insert(hash, key, indexno); + key = g_new(rgbkey, 1); + } *(idata++) = *indexno; - } + } + } } - + /* kick the progress bar */ gimp_progress_update ((double) (i+j) / (double) height); } } - g_free(buffer); + g_free (buffer); if (indexed) { @@ -724,8 +744,8 @@ save_image (char *filename, g_hash_table_foreach (hash, create_colormap_from_hash, colormap); } - - image = g_new(XpmImage, 1); + + image = g_new (XpmImage, 1); image->width=width; image->height=height; @@ -737,7 +757,7 @@ save_image (char *filename, /* do the save */ XpmWriteFileFromXpmImage(filename, image, NULL); rc = TRUE; - + cleanup: /* clean up resources */ gimp_drawable_detach (drawable); @@ -753,10 +773,10 @@ static void init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("xpm"); gtk_init (&argc, &argv); @@ -767,8 +787,6 @@ static gint save_dialog (void) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *scale; GtkWidget *frame; GtkWidget *table; GtkObject *scale_data; @@ -792,34 +810,24 @@ save_dialog (void) /* parameter settings */ frame = gtk_frame_new (_("Parameter Settings")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width (GTK_CONTAINER (frame), 6); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); - table = gtk_table_new (1, 2, FALSE); + table = gtk_table_new (1, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 4); gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - - label = gtk_label_new (_("Alpha Threshold:")); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 1.0); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, - GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); - scale_data = gtk_adjustment_new (xpmvals.threshold, 0.0, 1.0, 0.01, 0.01, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 0, 1, - GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 2); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); - gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - GTK_SIGNAL_FUNC (save_scale_update), - &xpmvals.threshold); - gtk_widget_show (label); - gtk_widget_show (scale); - - gtk_widget_show (frame); gtk_widget_show (table); + + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, + _("Alpha Threshold:"), SCALE_WIDTH, 0, + xpmvals.threshold, 0.0, 1.0, 0.01, 0.1, 2, + NULL, NULL); + gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), + &xpmvals.threshold); + gtk_widget_show (dlg); gtk_main (); @@ -836,10 +844,3 @@ save_ok_callback (GtkWidget *widget, gtk_widget_destroy (GTK_WIDGET (data)); } - -static void -save_scale_update (GtkAdjustment *adjustment, - double *scale_val) -{ - *scale_val = adjustment->value; -} diff --git a/plug-ins/common/xwd.c b/plug-ins/common/xwd.c index b4059a9dfd..470a2b12a4 100644 --- a/plug-ins/common/xwd.c +++ b/plug-ins/common/xwd.c @@ -55,16 +55,19 @@ static char ident[] = "@(#) GIMP XWD file-plugin v1.93 11-Apr-98"; #include #endif -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" +#include + +#include +#include + #include "libgimp/stdplugins-intl.h" typedef unsigned long L_CARD32; typedef unsigned short L_CARD16; typedef unsigned char L_CARD8; -typedef struct { +typedef struct +{ L_CARD32 l_header_size; /* Header size */ L_CARD32 l_file_version; /* File version (7) */ @@ -95,7 +98,8 @@ typedef struct { L_CARD32 l_window_bdrwidth;/* Window border width */ } L_XWDFILEHEADER; -typedef struct { +typedef struct +{ L_CARD32 l_pixel; /* Colour index */ L_CARD16 l_red, l_green, l_blue; /* RGB-values */ L_CARD8 l_flags, l_pad; @@ -108,15 +112,19 @@ typedef struct { #define MAPPERBITS 12 #define MAPPERMASK ((1 << MAPPERBITS)-1) -typedef struct { +typedef struct +{ L_CARD32 pixel_val; - unsigned char red,green,blue; + guchar red; + guchar green; + guchar blue; } PMAP; -typedef struct { - int npixel; /* Number of pixel values in map */ - unsigned char pixel_in_map[1 << MAPPERBITS]; - PMAP pmap[256]; +typedef struct +{ + gint npixel; /* Number of pixel values in map */ + guchar pixel_in_map[1 << MAPPERBITS]; + PMAP pmap[256]; } PIXEL_MAP; #define XWDHDR_PAD 0 /* Total number of padding bytes for XWD header */ @@ -125,16 +133,16 @@ typedef struct { /* Declare some local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); static void init_gtk (void); -static gint32 load_image (char *filename); -static gint save_image (char *filename, +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID); static gint32 create_new_image (char *filename, guint width, guint height, @@ -174,18 +182,16 @@ static void write_xwd_cols (FILE *, L_XWDFILEHEADER *, L_XWDCOLOR *); static gint save_index (FILE *, gint32, gint32, int); static gint save_rgb (FILE *, gint32, gint32); -static void show_message (char *); - static int read_msb_first = 1; GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; @@ -210,9 +216,9 @@ query (void) { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) - / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -222,7 +228,7 @@ query (void) { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -251,34 +257,37 @@ those with alpha channels."), nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_xwd_load", "xwd", "", + gimp_register_magic_load_handler ("file_xwd_load", + "xwd", + "", "4,long,0x00000007,4,long,0x07000000"); - gimp_register_save_handler ("file_xwd_save", "xwd", ""); + gimp_register_save_handler ("file_xwd_save", + "xwd", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; GimpExportReturnType export = EXPORT_CANCEL; - int ev; l_run_mode = run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_xwd_load") == 0) { @@ -286,11 +295,16 @@ run (char *name, image_ID = load_image (param[1].data.d_string); - *nreturn_vals = 2; - status = (image_ID != -1) ? STATUS_SUCCESS : STATUS_EXECUTION_ERROR; - values[0].data.d_status = status; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = image_ID; + if (image_ID != -1) + { + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_ID; + } + else + { + status = STATUS_EXECUTION_ERROR; + } } else if (strcmp (name, "file_xwd_save") == 0) { @@ -298,7 +312,7 @@ run (char *name, image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - + /* eventually export the image */ switch (run_mode) { @@ -306,11 +320,12 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "XWD", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -337,24 +352,30 @@ run (char *name, if (status == STATUS_SUCCESS) { - ev = save_image (param[3].data.d_string, image_ID, drawable_ID); - status = ev ? STATUS_SUCCESS : STATUS_EXECUTION_ERROR; + if (! save_image (param[3].data.d_string, image_ID, drawable_ID)) + { + status = STATUS_EXECUTION_ERROR; + } } - values[0].data.d_status = status; - if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CANCEL; + } + + values[0].data.d_status = status; } static void -init_gtk () +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("xwd"); gtk_init (&argc, &argv); @@ -362,8 +383,7 @@ init_gtk () } static gint32 -load_image (char *filename) - +load_image (gchar *filename) { FILE *ifp; int depth, bpp; @@ -374,69 +394,70 @@ load_image (char *filename) ifp = fopen (filename, "rb"); if (!ifp) - { - show_message (_("can't open file for reading")); - return (-1); - } + { + g_message (_("can't open file for reading")); + return (-1); + } read_msb_first = 1; /* Start reading with most significant byte first */ read_xwd_header (ifp, &xwdhdr); if (xwdhdr.l_file_version != 7) - { - read_msb_first = 0; /* Try reading with least significant byte first */ - - fseek (ifp, 0, SEEK_SET); - - read_xwd_header (ifp, &xwdhdr); - if (xwdhdr.l_file_version != 7) { - show_message(_("can't open file as XWD file")); - fclose (ifp); - return (-1); + read_msb_first = 0; /* Try reading with least significant byte first */ + + fseek (ifp, 0, SEEK_SET); + + read_xwd_header (ifp, &xwdhdr); + if (xwdhdr.l_file_version != 7) + { + g_message(_("can't open file as XWD file")); + fclose (ifp); + return (-1); + } } - } /* Position to start of XWDColor structures */ fseek (ifp, (long)xwdhdr.l_header_size, SEEK_SET); if (xwdhdr.l_colormap_entries > 0) - { - xwdcolmap = (L_XWDCOLOR *)g_malloc (sizeof (L_XWDCOLOR) - * xwdhdr.l_colormap_entries); - if (xwdcolmap == NULL) { - show_message (_("can't get memory for colormap")); - fclose (ifp); - return (-1); - } + xwdcolmap = (L_XWDCOLOR *)g_malloc (sizeof (L_XWDCOLOR) + * xwdhdr.l_colormap_entries); + if (xwdcolmap == NULL) + { + g_message (_("can't get memory for colormap")); + fclose (ifp); + return (-1); + } read_xwd_cols (ifp, &xwdhdr, xwdcolmap); #ifdef XWD_COL_DEBUG - {int j; - printf ("File %s\n",filename); - for (j=0; j < xwdhdr.l_colormap_entries; j++) - printf ("Entry 0x%08lx: 0x%04lx, 0x%04lx, 0x%04lx, %d\n", - (long)xwdcolmap[j].l_pixel,(long)xwdcolmap[j].l_red, - (long)xwdcolmap[j].l_green,(long)xwdcolmap[j].l_blue, - (int)xwdcolmap[j].l_flags); + { + int j; + printf ("File %s\n",filename); + for (j=0; j < xwdhdr.l_colormap_entries; j++) + printf ("Entry 0x%08lx: 0x%04lx, 0x%04lx, 0x%04lx, %d\n", + (long)xwdcolmap[j].l_pixel,(long)xwdcolmap[j].l_red, + (long)xwdcolmap[j].l_green,(long)xwdcolmap[j].l_blue, + (int)xwdcolmap[j].l_flags); } #endif if (xwdhdr.l_file_version != 7) - { - show_message (_("can't read color entries")); - g_free (xwdcolmap); - fclose (ifp); - return (-1); + { + g_message (_("can't read color entries")); + g_free (xwdcolmap); + fclose (ifp); + return (-1); + } } - } if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Loading %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + { + temp = g_strdup_printf (_("Loading %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } depth = xwdhdr.l_pixmap_depth; bpp = xwdhdr.l_bits_per_pixel; @@ -487,7 +508,7 @@ load_image (char *filename) temp = g_strdup_printf (_("load_image (xwd): XWD-file %s has format %d, depth %d\n\ and bits per pixel %d.\nCurrently this is not supported.\n"), filename, (int)xwdhdr.l_pixmap_format, depth, bpp); - show_message (temp); + g_message (temp); g_free (temp); return (-1); } @@ -511,7 +532,7 @@ save_image (char *filename, /* Make sure we're not saving an image with an alpha channel */ if (gimp_drawable_has_alpha (drawable_ID)) { - show_message (_("XWD save cannot handle images with alpha channels")); + g_message (_("XWD save cannot handle images with alpha channels")); return FALSE; } @@ -522,7 +543,7 @@ save_image (char *filename, case RGB_IMAGE: break; default: - show_message (_("cannot operate on unknown image types")); + g_message (_("cannot operate on unknown image types")); return (FALSE); break; } @@ -531,7 +552,7 @@ save_image (char *filename, ofp = fopen (filename, "wb"); if (!ofp) { - show_message (_("can't open file for writing")); + g_message (_("can't open file for writing")); return (FALSE); } @@ -1188,7 +1209,7 @@ load_xwd_f2_d1_b1 (char *filename, g_free (scanline); if (err) - show_message (_("EOF encountered on ")); + g_message (_("EOF encountered on ")); gimp_drawable_flush (drawable); @@ -1286,7 +1307,7 @@ load_xwd_f2_d8_b8 (char *filename, g_free (data); if (err) - show_message (_("EOF encountered on reading")); + g_message (_("EOF encountered on reading")); gimp_drawable_flush (drawable); @@ -1334,7 +1355,7 @@ load_xwd_f2_d16_b16 (char *filename, ColorMap = (unsigned char *)g_malloc (maxval); if (ColorMap == NULL) { - show_message (_("No memory for mapping colors")); + g_message (_("No memory for mapping colors")); return (-1); } memset (ColorMap,0,maxval); @@ -1448,7 +1469,7 @@ load_xwd_f2_d16_b16 (char *filename, g_free (ColorMap); if (err) - show_message (_("EOF encountered on reading")); + g_message (_("EOF encountered on reading")); gimp_drawable_flush (drawable); @@ -1645,7 +1666,7 @@ load_xwd_f2_d24_b32 (char *filename, g_free (data); if (err) - show_message (_("EOF encountered on reading")); + g_message (_("EOF encountered on reading")); gimp_drawable_flush (drawable); @@ -1896,7 +1917,7 @@ load_xwd_f1_d24_b1 (char *filename, g_free (xwddata); if (err) - show_message (_("EOF encountered on reading")); + g_message (_("EOF encountered on reading")); gimp_drawable_flush (drawable); @@ -2020,7 +2041,7 @@ save_index (FILE *ofp, if (ferror (ofp)) { - show_message (_("Error during writing indexed/grey image")); + g_message (_("Error during writing indexed/grey image")); return (FALSE); } return (TRUE); @@ -2109,21 +2130,8 @@ save_rgb (FILE *ofp, if (ferror (ofp)) { - show_message (_("Error during writing rgb image")); + g_message (_("Error during writing rgb image")); return (FALSE); } return (TRUE); } - -/* Show a message. Where to show it, depends on the runmode */ -static void -show_message (char *message) -{ - if (l_run_mode == RUN_INTERACTIVE) - gimp_message (message); - else - fprintf (stderr, "sunras: %s\n", message); -} - - - diff --git a/plug-ins/fits/fits.c b/plug-ins/fits/fits.c index 35635c0289..b74a5c82ba 100644 --- a/plug-ins/fits/fits.c +++ b/plug-ins/fits/fits.c @@ -39,18 +39,21 @@ static char ident[] = "@(#) GIMP FITS file-plugin v1.06 21-Nov-99"; #include #include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" -#include "libgimp/stdplugins-intl.h" +#include + +#include +#include + #include "fitsrw.h" +#include "libgimp/stdplugins-intl.h" + /* Load info */ typedef struct { - guint replace; /* replacement for blank/NaN-values */ - guint use_datamin;/* Use DATAMIN/MAX-scaling if possible */ - guint compose; /* compose images with naxis==3 */ + gint replace; /* replacement for blank/NaN-values */ + gint use_datamin; /* Use DATAMIN/MAX-scaling if possible */ + gint compose; /* compose images with naxis==3 */ } FITSLoadVals; typedef struct @@ -58,6 +61,56 @@ typedef struct gint run; } FITSLoadInterface; + +/* Declare some local functions. + */ +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); + +static gint32 load_image (gchar *filename); +static gint save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); + +static FITS_HDU_LIST *create_fits_header (FITS_FILE *ofp, + guint width, guint height, guint bpp); +static gint save_index (FITS_FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); +static gint save_direct (FITS_FILE *ofp, + gint32 image_ID, + gint32 drawable_ID); + +static gint32 create_new_image (gchar *filename, + guint pagenum, + guint width, + guint height, + GImageType itype, + GDrawableType dtype, + gint32 *layer_ID, + GDrawable **drawable, + GPixelRgn *pixel_rgn); + +static void check_load_vals (void); + +static gint32 load_fits (gchar *filename, + FITS_FILE *ifp, + guint picnum, + guint ncompose); + + +static void init_gtk (void); + +static gint load_dialog (void); +static void load_ok_callback (GtkWidget *widget, + gpointer data); +static void show_fits_errors (void); + + static FITSLoadVals plvals = { 0, /* Replace with black */ @@ -70,89 +123,20 @@ static FITSLoadInterface plint = FALSE }; - -/* Declare some local functions. - */ -static void init (void); -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); - -static gint32 load_image (char *filename); -static gint save_image (char *filename, - gint32 image_ID, - gint32 drawable_ID); - -static FITS_HDU_LIST *create_fits_header (FITS_FILE *ofp, - guint width, guint height, guint bpp); -static gint save_index (FITS_FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); -static gint save_direct(FITS_FILE *ofp, - gint32 image_ID, - gint32 drawable_ID); - -static gint32 create_new_image (char *filename, guint pagenum, - guint width, guint height, - GImageType itype, - GDrawableType dtype, - gint32 *layer_ID, GDrawable **drawable, - GPixelRgn *pixel_rgn); - -static void check_load_vals (void); - -static gint32 load_fits (char *filename, FITS_FILE *ifp, - guint picnum, guint ncompose); - - -/* Dialog-handling */ -#define LOAD_FITS_TOGGLES 3 -typedef struct -{ - GtkWidget *dialog; - int toggle_val[2*LOAD_FITS_TOGGLES]; -} LoadDialogVals; - -static void init_gtk (void); - -static gint load_dialog (void); -static void load_close_callback (GtkWidget *widget, - gpointer data); -static void load_ok_callback (GtkWidget *widget, - gpointer data); -static void load_toggle_update (GtkWidget *widget, - gpointer data); -static void show_fits_errors (void); -static void show_message (char *); - - GPlugInInfo PLUG_IN_INFO = { - init, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; - /* The run mode */ static GRunModeType l_run_mode; MAIN () - -static void -init (void) - -{ - gimp_set_data ("file_fits_load", &plvals, sizeof (FITSLoadVals)); -} - - static void query (void) @@ -167,9 +151,9 @@ query (void) { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) - / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -179,14 +163,13 @@ query (void) { PARAM_STRING, "filename", "The name of the file to save the image in" }, { PARAM_STRING, "raw_filename", "The name of the file to save the image in" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); gimp_install_procedure ("file_fits_load", _("load file of the FITS file format"), - _("load file of the FITS file format (Flexible Image\ - Transport System)"), + _("load file of the FITS file format (Flexible Image Transport System)"), "Peter Kirchgessner", "Peter Kirchgessner (peter@kirchgessner.net)", "1997", @@ -198,8 +181,7 @@ query (void) gimp_install_procedure ("file_fits_save", _("save file in the FITS file format"), - _("FITS saving handles all image types except \ -those with alpha channels."), + _("FITS saving handles all image types except those with alpha channels."), "Peter Kirchgessner", "Peter Kirchgessner (peter@kirchgessner.net)", "1997", @@ -210,59 +192,54 @@ those with alpha channels."), save_args, NULL); /* Register file plugin by plugin name and handable extensions */ - gimp_register_magic_load_handler ("file_fits_load", "fit,fits", "", + gimp_register_magic_load_handler ("file_fits_load", + "fit,fits", + "", "0,string,SIMPLE"); - gimp_register_save_handler ("file_fits_save", "fit,fits", ""); + gimp_register_save_handler ("file_fits_save", + "fit,fits", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) - { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - - /* initialize */ - - image_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + GimpExportReturnType export = EXPORT_CANCEL; l_run_mode = run_mode = (GRunModeType)param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_fits_load") == 0) { INIT_I18N_UI(); - *nreturn_vals = 2; - values[1].type = PARAM_IMAGE; - values[1].data.d_image = -1; - switch (run_mode) - { + { case RUN_INTERACTIVE: /* Possibly retrieve data */ gimp_get_data ("file_fits_load", &plvals); - if (!load_dialog ()) return; - break; + if (!load_dialog ()) + status = STATUS_CANCEL; + break; case RUN_NONINTERACTIVE: if (nparams != 3) - { - status = STATUS_CALLING_ERROR; - } + status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: @@ -272,46 +249,52 @@ run (char *name, default: break; - } + } + if (status == STATUS_SUCCESS) - { - check_load_vals (); - image_ID = load_image (param[1].data.d_string); + { + check_load_vals (); + image_ID = load_image (param[1].data.d_string); - /* Write out error messages of FITS-Library */ - show_fits_errors (); + /* Write out error messages of FITS-Library */ + show_fits_errors (); - status = (image_ID != -1) ? STATUS_SUCCESS : STATUS_EXECUTION_ERROR; + if (image_ID != -1) + { + *nreturn_vals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_ID; + } + else + { + status = STATUS_EXECUTION_ERROR; + } - /* Store plvals data */ - if (status == STATUS_SUCCESS) - gimp_set_data ("file_fits_load", &plvals, sizeof (FITSLoadVals)); - } - values[0].data.d_status = status; - values[1].data.d_image = image_ID; + /* Store plvals data */ + if (status == STATUS_SUCCESS) + gimp_set_data ("file_fits_load", &plvals, sizeof (FITSLoadVals)); + } } else if (strcmp (name, "file_fits_save") == 0) { - GimpExportReturnType export = EXPORT_CANCEL; - INIT_I18N_UI(); image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; - *nreturn_vals = 1; - /* eventually export the image */ - switch (run_mode) - { - case RUN_INTERACTIVE: - case RUN_WITH_LAST_VALS: - init_gtk (); - export = gimp_export_image (&image_ID, &drawable_ID, "FITS", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY | CAN_HANDLE_INDEXED)); + /* eventually export the image */ + switch (run_mode) + { + case RUN_INTERACTIVE: + case RUN_WITH_LAST_VALS: + init_gtk (); + export = gimp_export_image (&image_ID, &drawable_ID, "FITS", + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY | + CAN_HANDLE_INDEXED)); if (export == EXPORT_CANCEL) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; @@ -337,113 +320,119 @@ run (char *name, break; } - if (save_image (param[3].data.d_string, image_ID, drawable_ID)) - values[0].data.d_status = STATUS_SUCCESS; - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + if (status == STATUS_SUCCESS) + { + if (! save_image (param[3].data.d_string, image_ID, drawable_ID)) + status = STATUS_EXECUTION_ERROR; + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) +load_image (gchar *filename) +{ + gint32 image_ID, *image_list, *nl; + guint picnum; + int k, n_images, max_images, hdu_picnum; + int compose; + FILE *fp; + FITS_FILE *ifp; + FITS_HDU_LIST *hdu; -{gint32 image_ID, *image_list, *nl; - guint picnum; - int k, n_images, max_images, hdu_picnum; - int compose; - FILE *fp; - FITS_FILE *ifp; - FITS_HDU_LIST *hdu; + fp = fopen (filename, "rb"); + if (!fp) + { + g_message (_("Can't open file for reading")); + return (-1); + } + fclose (fp); - fp = fopen (filename, "rb"); - if (!fp) - { - show_message (_("Can't open file for reading")); - return (-1); - } - fclose (fp); + ifp = fits_open (filename, "r"); + if (ifp == NULL) + { + g_message (_("Error during open of FITS file")); + return (-1); + } + if (ifp->n_pic <= 0) + { + g_message (_("FITS file keeps no displayable images")); + fits_close (ifp); + return (-1); + } - ifp = fits_open (filename, "r"); - if (ifp == NULL) - { - show_message (_("Error during open of FITS file")); - return (-1); - } - if (ifp->n_pic <= 0) - { - show_message (_("FITS file keeps no displayable images")); - fits_close (ifp); - return (-1); - } + image_list = (gint32 *)g_malloc (10 * sizeof (gint32)); + n_images = 0; + max_images = 10; - image_list = (gint32 *)g_malloc (10 * sizeof (gint32)); - n_images = 0; - max_images = 10; + for (picnum = 1; picnum <= ifp->n_pic; ) + { + /* Get image info to see if we can compose them */ + hdu = fits_image_info (ifp, picnum, &hdu_picnum); + if (hdu == NULL) break; - for (picnum = 1; picnum <= ifp->n_pic; ) - { - /* Get image info to see if we can compose them */ - hdu = fits_image_info (ifp, picnum, &hdu_picnum); - if (hdu == NULL) break; + /* Get number of FITS-images to compose */ + compose = ( plvals.compose && (hdu_picnum == 1) && (hdu->naxis == 3) + && (hdu->naxisn[2] > 1) && (hdu->naxisn[2] <= 4)); + if (compose) + compose = hdu->naxisn[2]; + else + compose = 1; /* Load as GRAY */ - /* Get number of FITS-images to compose */ - compose = ( plvals.compose && (hdu_picnum == 1) && (hdu->naxis == 3) - && (hdu->naxisn[2] > 1) && (hdu->naxisn[2] <= 4)); - if (compose) - compose = hdu->naxisn[2]; - else - compose = 1; /* Load as GRAY */ + image_ID = load_fits (filename, ifp, picnum, compose); - image_ID = load_fits (filename, ifp, picnum, compose); + /* Write out error messages of FITS-Library */ + show_fits_errors (); - /* Write out error messages of FITS-Library */ - show_fits_errors (); + if (image_ID == -1) break; + if (n_images == max_images) + { + nl = (gint32 *)g_realloc (image_list, (max_images+10)*sizeof (gint32)); + if (nl == NULL) break; + image_list = nl; + max_images += 10; + } + image_list[n_images++] = image_ID; - if (image_ID == -1) break; - if (n_images == max_images) - { - nl = (gint32 *)g_realloc (image_list, (max_images+10)*sizeof (gint32)); - if (nl == NULL) break; - image_list = nl; - max_images += 10; - } - image_list[n_images++] = image_ID; + picnum += compose; + } - picnum += compose; - } + /* Write out error messages of FITS-Library */ + show_fits_errors (); - /* Write out error messages of FITS-Library */ - show_fits_errors (); + fits_close (ifp); - fits_close (ifp); + /* Display images in reverse order. The last will be displayed by GIMP itself*/ + if (l_run_mode != RUN_NONINTERACTIVE) + { + for (k = n_images-1; k >= 1; k--) + { + gimp_image_undo_enable (image_list[k]); + gimp_image_clean_all (image_list[k]); + gimp_display_new (image_list[k]); + } + } - /* Display images in reverse order. The last will be displayed by GIMP itself*/ - if (l_run_mode != RUN_NONINTERACTIVE) - { - for (k = n_images-1; k >= 1; k--) - { - gimp_image_undo_enable (image_list[k]); - gimp_image_clean_all (image_list[k]); - gimp_display_new (image_list[k]); - } - } + image_ID = (n_images > 0) ? image_list[0] : -1; + g_free (image_list); - image_ID = (n_images > 0) ? image_list[0] : -1; - g_free (image_list); - - return (image_ID); + return (image_ID); } static gint -save_image (char *filename, +save_image (gchar *filename, gint32 image_ID, gint32 drawable_ID) - { FITS_FILE* ofp; GDrawableType drawable_type; @@ -454,37 +443,37 @@ save_image (char *filename, /* Make sure we're not saving an image with an alpha channel */ if (gimp_drawable_has_alpha (drawable_ID)) - { - show_message (_("FITS save cannot handle images with alpha channels")); - return FALSE; - } + { + g_message (_("FITS save cannot handle images with alpha channels")); + return FALSE; + } switch (drawable_type) - { + { case INDEXED_IMAGE: case INDEXEDA_IMAGE: case GRAY_IMAGE: case GRAYA_IMAGE: case RGB_IMAGE: case RGBA_IMAGE: break; default: - show_message (_("Cannot operate on unknown image types")); + g_message (_("Cannot operate on unknown image types")); return (FALSE); break; - } + } /* Open the output file. */ ofp = fits_open (filename, "w"); if (!ofp) - { - show_message (_("Can't open file for writing")); - return (FALSE); - } + { + g_message (_("Can't open file for writing")); + return (FALSE); + } if (l_run_mode != RUN_NONINTERACTIVE) - { - temp = g_strdup_printf (_("Saving %s:"), filename); - gimp_progress_init (temp); - g_free (temp); - } + { + temp = g_strdup_printf (_("Saving %s:"), filename); + gimp_progress_init (temp); + g_free (temp); + } if ((drawable_type == INDEXED_IMAGE) || (drawable_type == INDEXEDA_IMAGE)) retval = save_index (ofp,image_ID, drawable_ID); @@ -500,7 +489,6 @@ save_image (char *filename, /* Check (and correct) the load values plvals */ static void check_load_vals (void) - { if (plvals.replace > 255) plvals.replace = 255; } @@ -508,7 +496,7 @@ check_load_vals (void) /* Create an image. Sets layer_ID, drawable and rgn. Returns image_ID */ static gint32 -create_new_image (char *filename, +create_new_image (gchar *filename, guint pagenum, guint width, guint height, @@ -517,29 +505,29 @@ create_new_image (char *filename, gint32 *layer_ID, GDrawable **drawable, GPixelRgn *pixel_rgn) +{ + gint32 image_ID; + char *tmp; -{gint32 image_ID; - char *tmp; + image_ID = gimp_image_new (width, height, itype); + if ((tmp = g_malloc (strlen (filename) + 64)) != NULL) + { + sprintf (tmp, "%s-img%ld", filename, (long)pagenum); + gimp_image_set_filename (image_ID, tmp); + g_free (tmp); + } + else + gimp_image_set_filename (image_ID, filename); - image_ID = gimp_image_new (width, height, itype); - if ((tmp = g_malloc (strlen (filename) + 64)) != NULL) - { - sprintf (tmp, "%s-img%ld", filename, (long)pagenum); - gimp_image_set_filename (image_ID, tmp); - g_free (tmp); - } - else - gimp_image_set_filename (image_ID, filename); + *layer_ID = gimp_layer_new (image_ID, _("Background"), width, height, + dtype, 100, NORMAL_MODE); + gimp_image_add_layer (image_ID, *layer_ID, 0); - *layer_ID = gimp_layer_new (image_ID, _("Background"), width, height, - dtype, 100, NORMAL_MODE); - gimp_image_add_layer (image_ID, *layer_ID, 0); + *drawable = gimp_drawable_get (*layer_ID); + gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width, + (*drawable)->height, TRUE, FALSE); - *drawable = gimp_drawable_get (*layer_ID); - gimp_pixel_rgn_init (pixel_rgn, *drawable, 0, 0, (*drawable)->width, - (*drawable)->height, TRUE, FALSE); - - return (image_ID); + return (image_ID); } @@ -547,237 +535,240 @@ create_new_image (char *filename, /* to be composed together. This will result in different GIMP image types: */ /* 1: GRAY, 2: GRAYA, 3: RGB, 4: RGBA */ static gint32 -load_fits (char *filename, +load_fits (gchar *filename, FITS_FILE *ifp, - guint picnum, - guint ncompose) + guint picnum, + guint ncompose) +{ + register guchar *dest, *src; + guchar *data, *data_end, *linebuf; + int width, height, tile_height, scan_lines; + int i, j, channel, max_scan; + double a, b; + gint32 layer_ID, image_ID; + GPixelRgn pixel_rgn; + GDrawable *drawable; + GImageType itype; + GDrawableType dtype; + gint err = 0; + FITS_HDU_LIST *hdulist; + FITS_PIX_TRANSFORM trans; -{register unsigned char *dest, *src; - unsigned char *data, *data_end, *linebuf; - int width, height, tile_height, scan_lines; - int i, j, channel, max_scan; - double a, b; - gint32 layer_ID, image_ID; - GPixelRgn pixel_rgn; - GDrawable *drawable; - GImageType itype; - GDrawableType dtype; - int err = 0; - FITS_HDU_LIST *hdulist; - FITS_PIX_TRANSFORM trans; + hdulist = fits_seek_image (ifp, (int)picnum); + if (hdulist == NULL) return (-1); - hdulist = fits_seek_image (ifp, (int)picnum); - if (hdulist == NULL) return (-1); + width = hdulist->naxisn[0]; /* Set the size of the FITS image */ + height = hdulist->naxisn[1]; - width = hdulist->naxisn[0]; /* Set the size of the FITS image */ - height = hdulist->naxisn[1]; + if (ncompose == 2) { itype = GRAY; dtype = GRAYA_IMAGE; } + else if (ncompose == 3) { itype = RGB; dtype = RGB_IMAGE; } + else if (ncompose == 4) { itype = RGB; dtype = RGBA_IMAGE; } + else { ncompose = 1; itype = GRAY; dtype = GRAY_IMAGE;} - if (ncompose == 2) { itype = GRAY; dtype = GRAYA_IMAGE; } - else if (ncompose == 3) { itype = RGB; dtype = RGB_IMAGE; } - else if (ncompose == 4) { itype = RGB; dtype = RGBA_IMAGE; } - else { ncompose = 1; itype = GRAY; dtype = GRAY_IMAGE;} + image_ID = create_new_image (filename, picnum, width, height, itype, dtype, + &layer_ID, &drawable, &pixel_rgn); - image_ID = create_new_image (filename, picnum, width, height, itype, dtype, - &layer_ID, &drawable, &pixel_rgn); + tile_height = gimp_tile_height (); + data = g_malloc (tile_height * width * ncompose); + if (data == NULL) return (-1); + data_end = data + tile_height * width * ncompose; - tile_height = gimp_tile_height (); - data = g_malloc (tile_height * width * ncompose); - if (data == NULL) return (-1); - data_end = data + tile_height * width * ncompose; + /* If the transformation from pixel value to */ + /* data value has been specified, use it */ + if ( plvals.use_datamin + && hdulist->used.datamin && hdulist->used.datamax + && hdulist->used.bzero && hdulist->used.bscale) + { + a = (hdulist->datamin - hdulist->bzero) / hdulist->bscale; + b = (hdulist->datamax - hdulist->bzero) / hdulist->bscale; + if (a < b) trans.pixmin = a, trans.pixmax = b; + else trans.pixmin = b, trans.pixmax = a; + } + else + { + trans.pixmin = hdulist->pixmin; + trans.pixmax = hdulist->pixmax; + } + trans.datamin = 0.0; + trans.datamax = 255.0; + trans.replacement = plvals.replace; + trans.dsttyp = 'c'; - /* If the transformation from pixel value to */ - /* data value has been specified, use it */ - if ( plvals.use_datamin - && hdulist->used.datamin && hdulist->used.datamax - && hdulist->used.bzero && hdulist->used.bscale) - { - a = (hdulist->datamin - hdulist->bzero) / hdulist->bscale; - b = (hdulist->datamax - hdulist->bzero) / hdulist->bscale; - if (a < b) trans.pixmin = a, trans.pixmax = b; - else trans.pixmin = b, trans.pixmax = a; - } - else - { - trans.pixmin = hdulist->pixmin; - trans.pixmax = hdulist->pixmax; - } - trans.datamin = 0.0; - trans.datamax = 255.0; - trans.replacement = plvals.replace; - trans.dsttyp = 'c'; + /* FITS stores images with bottom row first. Therefore we have */ + /* to fill the image from bottom to top. */ - /* FITS stores images with bottom row first. Therefore we have */ - /* to fill the image from bottom to top. */ + if (ncompose == 1) + { + dest = data + tile_height * width; + scan_lines = 0; - if (ncompose == 1) - { - dest = data + tile_height * width; - scan_lines = 0; + for (i = 0; i < height; i++) + { + /* Read FITS line */ + dest -= width; + if (fits_read_pixel (ifp, hdulist, width, &trans, dest) != width) + { + err = 1; + break; + } - for (i = 0; i < height; i++) - { - /* Read FITS line */ - dest -= width; - if (fits_read_pixel (ifp, hdulist, width, &trans, dest) != width) - { - err = 1; - break; - } + scan_lines++; - scan_lines++; + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+1) / (double)height); - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+1) / (double)height); + if ((scan_lines == tile_height) || ((i+1) == height)) + { + gimp_pixel_rgn_set_rect (&pixel_rgn, dest, 0, height-i-1, + width, scan_lines); + scan_lines = 0; + dest = data + tile_height * width; + } + if (err) break; + } + } + else /* multiple images to compose */ + { + linebuf = g_malloc (width); + if (linebuf == NULL) return (-1); - if ((scan_lines == tile_height) || ((i+1) == height)) - { - gimp_pixel_rgn_set_rect (&pixel_rgn, dest, 0, height-i-1, - width, scan_lines); - scan_lines = 0; - dest = data + tile_height * width; - } - if (err) break; - } - } - else /* multiple images to compose */ - { - linebuf = g_malloc (width); - if (linebuf == NULL) return (-1); + for (channel = 0; channel < ncompose; channel++) + { + dest = data + tile_height * width * ncompose + channel; + scan_lines = 0; - for (channel = 0; channel < ncompose; channel++) - { - dest = data + tile_height * width * ncompose + channel; - scan_lines = 0; + for (i = 0; i < height; i++) + { + if ((channel > 0) && ((i % tile_height) == 0)) + { /* Reload a region for follow up channels */ + max_scan = tile_height; + if (i + tile_height > height) max_scan = height - i; + gimp_pixel_rgn_get_rect (&pixel_rgn, + data_end-max_scan*width*ncompose, + 0, height-i-max_scan, width, + max_scan); + } - for (i = 0; i < height; i++) - { - if ((channel > 0) && ((i % tile_height) == 0)) - { /* Reload a region for follow up channels */ - max_scan = tile_height; - if (i + tile_height > height) max_scan = height - i; - gimp_pixel_rgn_get_rect (&pixel_rgn, data_end-max_scan*width*ncompose, - 0, height-i-max_scan, width, max_scan); - } + /* Read FITS scanline */ + dest -= width*ncompose; + if (fits_read_pixel (ifp, hdulist, width, &trans, linebuf) != width) + { + err = 1; + break; + } + j = width; + src = linebuf; + while (j--) + { + *dest = *(src++); + dest += ncompose; + } + dest -= width*ncompose; + scan_lines++; - /* Read FITS scanline */ - dest -= width*ncompose; - if (fits_read_pixel (ifp, hdulist, width, &trans, linebuf) != width) - { - err = 1; - break; - } - j = width; - src = linebuf; - while (j--) - { - *dest = *(src++); - dest += ncompose; - } - dest -= width*ncompose; - scan_lines++; + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ( (double)(channel*height+i+1) + / (double)(height*ncompose)); - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ( (double)(channel*height+i+1) - / (double)(height*ncompose)); + if ((scan_lines == tile_height) || ((i+1) == height)) + { + gimp_pixel_rgn_set_rect (&pixel_rgn, dest-channel, + 0, height-i-1, width, scan_lines); + scan_lines = 0; + dest = data + tile_height * width * ncompose + channel; + } + if (err) break; + } + } + g_free (linebuf); + } - if ((scan_lines == tile_height) || ((i+1) == height)) - { - gimp_pixel_rgn_set_rect (&pixel_rgn, dest-channel, 0, height-i-1, - width, scan_lines); - scan_lines = 0; - dest = data + tile_height * width * ncompose + channel; - } - if (err) break; - } - } - g_free (linebuf); - } + g_free (data); - g_free (data); + if (err) + g_message (_("EOF encountered on reading")); - if (err) - show_message (_("EOF encountered on reading")); + gimp_drawable_flush (drawable); - gimp_drawable_flush (drawable); - - return (err ? -1 : image_ID); + return (err ? -1 : image_ID); } static FITS_HDU_LIST * create_fits_header (FITS_FILE *ofp, - guint width, - guint height, - guint bpp) + guint width, + guint height, + guint bpp) +{ + FITS_HDU_LIST *hdulist; + int print_ctype3 = 0; /* The CTYPE3-card may not be FITS-conforming */ + static char *ctype3_card[] = + { + NULL, NULL, NULL, /* bpp = 0: no additional card */ + "COMMENT Image type within GIMP: GRAY_IMAGE", + NULL, + NULL, + "COMMENT Image type within GIMP: GRAYA_IMAGE (gray with alpha channel)", + "COMMENT Sequence for NAXIS3 : GRAY, ALPHA", + "CTYPE3 = 'GRAYA ' / GRAY IMAGE WITH ALPHA CHANNEL", + "COMMENT Image type within GIMP: RGB_IMAGE", + "COMMENT Sequence for NAXIS3 : RED, GREEN, BLUE", + "CTYPE3 = 'RGB ' / RGB IMAGE", + "COMMENT Image type within GIMP: RGBA_IMAGE (rgb with alpha channel)", + "COMMENT Sequence for NAXIS3 : RED, GREEN, BLUE, ALPHA", + "CTYPE3 = 'RGBA ' / RGB IMAGE WITH ALPHA CHANNEL" + }; -{FITS_HDU_LIST *hdulist; - int print_ctype3 = 0; /* The CTYPE3-card may not be FITS-conforming */ - static char *ctype3_card[] = { - NULL, NULL, NULL, /* bpp = 0: no additional card */ - "COMMENT Image type within GIMP: GRAY_IMAGE", - NULL, - NULL, - "COMMENT Image type within GIMP: GRAYA_IMAGE (gray with alpha channel)", - "COMMENT Sequence for NAXIS3 : GRAY, ALPHA", - "CTYPE3 = 'GRAYA ' / GRAY IMAGE WITH ALPHA CHANNEL", - "COMMENT Image type within GIMP: RGB_IMAGE", - "COMMENT Sequence for NAXIS3 : RED, GREEN, BLUE", - "CTYPE3 = 'RGB ' / RGB IMAGE", - "COMMENT Image type within GIMP: RGBA_IMAGE (rgb with alpha channel)", - "COMMENT Sequence for NAXIS3 : RED, GREEN, BLUE, ALPHA", - "CTYPE3 = 'RGBA ' / RGB IMAGE WITH ALPHA CHANNEL" - }; + hdulist = fits_add_hdu (ofp); + if (hdulist == NULL) return (NULL); - hdulist = fits_add_hdu (ofp); - if (hdulist == NULL) return (NULL); + hdulist->used.simple = 1; + hdulist->bitpix = 8; + hdulist->naxis = (bpp == 1) ? 2 : 3; + hdulist->naxisn[0] = width; + hdulist->naxisn[1] = height; + hdulist->naxisn[2] = bpp; + hdulist->used.datamin = 1; + hdulist->datamin = 0.0; + hdulist->used.datamax = 1; + hdulist->datamax = 255.0; + hdulist->used.bzero = 1; + hdulist->bzero = 0.0; + hdulist->used.bscale = 1; + hdulist->bscale = 1.0; - hdulist->used.simple = 1; - hdulist->bitpix = 8; - hdulist->naxis = (bpp == 1) ? 2 : 3; - hdulist->naxisn[0] = width; - hdulist->naxisn[1] = height; - hdulist->naxisn[2] = bpp; - hdulist->used.datamin = 1; - hdulist->datamin = 0.0; - hdulist->used.datamax = 1; - hdulist->datamax = 255.0; - hdulist->used.bzero = 1; - hdulist->bzero = 0.0; - hdulist->used.bscale = 1; - hdulist->bscale = 1.0; + fits_add_card (hdulist, ""); + fits_add_card (hdulist, + "HISTORY THIS FITS FILE WAS GENERATED BY GIMP USING FITSRW"); + fits_add_card (hdulist, ""); + fits_add_card (hdulist, + "COMMENT FitsRW is (C) Peter Kirchgessner (peter@kirchgessner.net), but available"); + fits_add_card (hdulist, + "COMMENT under the GNU general public licence."), + fits_add_card (hdulist, + "COMMENT For sources see http://www.kirchgessner.net"); + fits_add_card (hdulist, ""); + fits_add_card (hdulist, ctype3_card[bpp*3]); + if (ctype3_card[bpp*3+1] != NULL) + fits_add_card (hdulist, ctype3_card[bpp*3+1]); + if (print_ctype3 && (ctype3_card[bpp*3+2] != NULL)) + fits_add_card (hdulist, ctype3_card[bpp*3+2]); + fits_add_card (hdulist, ""); - fits_add_card (hdulist, ""); - fits_add_card (hdulist, - "HISTORY THIS FITS FILE WAS GENERATED BY GIMP USING FITSRW"); - fits_add_card (hdulist, ""); - fits_add_card (hdulist, - "COMMENT FitsRW is (C) Peter Kirchgessner (peter@kirchgessner.net), but available"); - fits_add_card (hdulist, - "COMMENT under the GNU general public licence."), - fits_add_card (hdulist, - "COMMENT For sources see http://www.kirchgessner.net"); - fits_add_card (hdulist, ""); - fits_add_card (hdulist, ctype3_card[bpp*3]); - if (ctype3_card[bpp*3+1] != NULL) - fits_add_card (hdulist, ctype3_card[bpp*3+1]); - if (print_ctype3 && (ctype3_card[bpp*3+2] != NULL)) - fits_add_card (hdulist, ctype3_card[bpp*3+2]); - fits_add_card (hdulist, ""); - - return (hdulist); + return (hdulist); } /* Save direct colours (GRAY, GRAYA, RGB, RGBA) */ static gint save_direct (FITS_FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j, channel; + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j, channel; int tile_height, bpp, bpsl; long nbytes; - unsigned char *data, *src; + guchar *data, *src; GPixelRgn pixel_rgn; GDrawable *drawable; GDrawableType drawable_type; @@ -808,48 +799,48 @@ save_direct (FITS_FILE *ofp, nbytes = 0; for (channel = 0; channel < bpp; channel++) - { - for (i = 0; i < height; i++) { - if ((i % tile_height) == 0) GET_DIRECT_TILE (data); /* get more data */ + for (i = 0; i < height; i++) + { + if ((i % tile_height) == 0) GET_DIRECT_TILE (data); /* get more data */ - if (bpp == 1) /* One channel only ? Write the scanline */ - { - fwrite (src, 1, width, ofp->fp); - src += bpsl; - } - else /* Multiple channels */ - { - for (j = 0; j < width; j++) /* Write out bytes for current channel */ - { - putc (*src, ofp->fp); - src += bpp; - } - } - nbytes += bpsl; - src -= 2*bpsl; + if (bpp == 1) /* One channel only ? Write the scanline */ + { + fwrite (src, 1, width, ofp->fp); + src += bpsl; + } + else /* Multiple channels */ + { + for (j = 0; j < width; j++) /* Write out bytes for current channel */ + { + putc (*src, ofp->fp); + src += bpp; + } + } + nbytes += bpsl; + src -= 2*bpsl; - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+channel*height)/(double)(height*bpp)); + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double)(i+channel*height)/(double)(height*bpp)); + } } - } nbytes = nbytes % FITS_RECORD_SIZE; if (nbytes) - { - while (nbytes++ < FITS_RECORD_SIZE) - putc (0, ofp->fp); - } + { + while (nbytes++ < FITS_RECORD_SIZE) + putc (0, ofp->fp); + } g_free (data); gimp_drawable_detach (drawable); if (ferror (ofp->fp)) - { - show_message (_("Write error occured")); - return (FALSE); - } + { + g_message (_("Write error occured")); + return (FALSE); + } return (TRUE); #undef GET_DIRECT_TILE } @@ -858,15 +849,15 @@ save_direct (FITS_FILE *ofp, /* Save indexed colours (INDEXED, INDEXEDA) */ static gint save_index (FITS_FILE *ofp, - gint32 image_ID, - gint32 drawable_ID) - -{ int height, width, i, j, channel; + gint32 image_ID, + gint32 drawable_ID) +{ + int height, width, i, j, channel; int tile_height, bpp, bpsl, ncols; long nbytes; - unsigned char *data, *src, *cmap, *cmapptr; - unsigned char red[256], green[256], blue[256]; - unsigned char *channels[3]; + guchar *data, *src, *cmap, *cmapptr; + guchar red[256], green[256], blue[256]; + guchar *channels[3]; GPixelRgn pixel_rgn; GDrawable *drawable; GDrawableType drawable_type; @@ -884,16 +875,16 @@ save_index (FITS_FILE *ofp, gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, FALSE); /* allocate a buffer for retrieving information from the pixel region */ - src = data = (unsigned char *)g_malloc (width * height * bpp); + src = data = (guchar *)g_malloc (width * height * bpp); cmapptr = cmap = gimp_image_get_cmap (image_ID, &ncols); if (ncols > sizeof (red)) ncols = sizeof (red); for (i = 0; i < ncols; i++) - { - red[i] = *(cmapptr++); - green[i] = *(cmapptr++); - blue[i] = *(cmapptr++); - } + { + red[i] = *(cmapptr++); + green[i] = *(cmapptr++); + blue[i] = *(cmapptr++); + } for (i = ncols; i < sizeof (red); i++) red[i] = green[i] = blue[i] = 0; @@ -912,78 +903,80 @@ save_index (FITS_FILE *ofp, /* Write the RGB-channels */ for (channel = 0; channel < 3; channel++) - { - cmapptr = channels[channel]; - for (i = 0; i < height; i++) { - if ((i % tile_height) == 0) GET_INDEXED_TILE (data); /* get more data */ + cmapptr = channels[channel]; + for (i = 0; i < height; i++) + { + if ((i % tile_height) == 0) + GET_INDEXED_TILE (data); /* get more data */ - for (j = 0; j < width; j++) /* Write out bytes for current channel */ - { - putc (cmapptr[*src], ofp->fp); - src += bpp; - } - nbytes += width; - src -= 2*bpsl; + for (j = 0; j < width; j++) /* Write out bytes for current channel */ + { + putc (cmapptr[*src], ofp->fp); + src += bpp; + } + nbytes += width; + src -= 2*bpsl; + } + + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) (i+channel*height) / + (double) (height*(bpp+2))); } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+channel*height)/(double)(height*(bpp+2))); - } - /* Write the Alpha-channel */ if (bpp > 1) - { - for (i = 0; i < height; i++) { - if ((i % tile_height) == 0) - { - GET_INDEXED_TILE (data); /* get more data */ - src++; /* Step to alpha channel data */ - } + for (i = 0; i < height; i++) + { + if ((i % tile_height) == 0) + { + GET_INDEXED_TILE (data); /* get more data */ + src++; /* Step to alpha channel data */ + } - for (j = 0; j < width; j++) /* Write out bytes for alpha channel */ - { - putc (*src, ofp->fp); - src += bpp; - } - nbytes += width; - src -= 2*bpsl; + for (j = 0; j < width; j++) /* Write out bytes for alpha channel */ + { + putc (*src, ofp->fp); + src += bpp; + } + nbytes += width; + src -= 2*bpsl; + } + + if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) + gimp_progress_update ((double) (i+channel*height) / + (double) (height*(bpp+2))); } - if ((l_run_mode != RUN_NONINTERACTIVE) && ((i % 20) == 0)) - gimp_progress_update ((double)(i+channel*height)/(double)(height*(bpp+2))); - } - nbytes = nbytes % FITS_RECORD_SIZE; if (nbytes) - { - while (nbytes++ < FITS_RECORD_SIZE) - putc (0, ofp->fp); - } + { + while (nbytes++ < FITS_RECORD_SIZE) + putc (0, ofp->fp); + } g_free (data); gimp_drawable_detach (drawable); if (ferror (ofp->fp)) - { - show_message (_("Write error occured")); - return (FALSE); - } + { + g_message (_("Write error occured")); + return (FALSE); + } return (TRUE); #undef GET_INDEXED_TILE } - static void -init_gtk () +init_gtk (void) { gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("fits"); gtk_init (&argc, &argv); @@ -995,170 +988,94 @@ init_gtk () static gint load_dialog (void) - { - LoadDialogVals *vals; - GtkWidget *hbbox; - GtkWidget *button; - GtkWidget *toggle; + GtkWidget *dialog; + GtkWidget *vbox; GtkWidget *frame; - GtkWidget *toggle_vbox; - GSList *group; - gint k, j; - char **textptr; - static char *toggle_text[] = { - N_("BLANK/NaN pixel replacement"), N_("Black"), N_("White"), - N_("Pixel value scaling"), N_("Automatic"), N_("by DATAMIN/DATAMAX"), - N_("Image composing"), N_("None"), "NAXIS=3, NAXIS3=2,...,4" - }; init_gtk (); - vals = g_malloc (sizeof (*vals)); + dialog = gimp_dialog_new (_("Load FITS File"), "fits", + gimp_plugin_help_func, "filters/fits.html", + GTK_WIN_POS_MOUSE, + FALSE, FALSE, FALSE, - vals->toggle_val[0] = (plvals.replace == 0); - vals->toggle_val[1] = !(vals->toggle_val[0]); - vals->toggle_val[2] = (plvals.use_datamin == 0); - vals->toggle_val[3] = !(vals->toggle_val[2]); - vals->toggle_val[4] = (plvals.compose == 0); - vals->toggle_val[5] = !(vals->toggle_val[4]); + _("OK"), load_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, - vals->dialog = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (vals->dialog), _("Load FITS File")); - gtk_window_position (GTK_WINDOW (vals->dialog), GTK_WIN_POS_MOUSE); - gtk_signal_connect (GTK_OBJECT (vals->dialog), "destroy", - (GtkSignalFunc) load_close_callback, + NULL); + + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", + GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - /* Action area */ - gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (vals->dialog)->action_area), 2); - gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (vals->dialog)->action_area), FALSE); - hbbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbbox), 4); - gtk_box_pack_end (GTK_BOX (GTK_DIALOG (vals->dialog)->action_area), hbbox, FALSE, FALSE, 0); - gtk_widget_show (hbbox); - - button = gtk_button_new_with_label (_("OK")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) load_ok_callback, - vals); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_grab_default (button); - gtk_widget_show (button); + vbox = gtk_vbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), vbox, + TRUE, TRUE, 0); + gtk_widget_show (vbox); - button = gtk_button_new_with_label (_("Cancel")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) gtk_widget_destroy, - GTK_OBJECT (vals->dialog)); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); + frame = gimp_radio_group_new2 (TRUE, _("BLANK/NaN Pixel Replacement"), + gimp_radio_button_update, + &plvals.replace, (gpointer) plvals.replace, - textptr = toggle_text; - for (k = 0; k < LOAD_FITS_TOGGLES; k++) - { - frame = gtk_frame_new (gettext (*textptr)); - textptr++; - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width (GTK_CONTAINER (frame), 10); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (vals->dialog)->vbox), - frame, FALSE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + _("Black"), (gpointer) 0, NULL, + _("White"), (gpointer) 255, NULL, - group = NULL; - for (j = 0; j < 2; j++) - { - toggle = gtk_radio_button_new_with_label (group, gettext (*textptr)); - textptr++; - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) load_toggle_update, - &(vals->toggle_val[k*2+j])); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), - vals->toggle_val[k*2+j]); - gtk_widget_show (toggle); - } - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - } + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); - gtk_widget_show (vals->dialog); + frame = + gimp_radio_group_new2 (TRUE, _("Pixel Value Scaling"), + gimp_radio_button_update, + &plvals.use_datamin, (gpointer) plvals.use_datamin, + + _("Automatic"), (gpointer) FALSE, NULL, + _("By DATAMIN/DATAMAX"), (gpointer) TRUE, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + frame = + gimp_radio_group_new2 (TRUE, _("Image Composing"), + gimp_radio_button_update, + &plvals.compose, (gpointer) plvals.compose, + + _("None"), (gpointer) FALSE, NULL, + "NAXIS=3, NAXIS3=2,...,4", (gpointer) TRUE, NULL, + + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + gtk_widget_show (dialog); gtk_main (); gdk_flush (); - g_free (vals); - return plint.run; } - -static void -load_close_callback (GtkWidget *widget, - gpointer data) - -{ - gtk_main_quit (); -} - - static void load_ok_callback (GtkWidget *widget, gpointer data) -{LoadDialogVals *vals = (LoadDialogVals *)data; - - /* Read replacement */ - plvals.replace = (vals->toggle_val[0]) ? 0 : 255; - - /* Read pixel value scaling */ - plvals.use_datamin = vals->toggle_val[3]; - - /* Read image composing */ - plvals.compose = vals->toggle_val[5]; - +{ plint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (vals->dialog)); -} + gtk_widget_destroy (GTK_WIDGET (data)); +} static void -load_toggle_update (GtkWidget *widget, - gpointer data) - +show_fits_errors (void) { - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = 1; - else - *toggle_val = 0; -} - - -static void show_fits_errors (void) - -{ - char *msg; + gchar *msg; /* Write out error messages of FITS-Library */ while ((msg = fits_get_error ()) != NULL) - show_message (msg); -} - - -/* Show a message. Where to show it, depends on the runmode */ -static void show_message (char *message) - -{ - if (l_run_mode == RUN_INTERACTIVE) - gimp_message (message); - else - fprintf (stderr, "Fits: %s\n", message); + g_message (msg); } diff --git a/plug-ins/gflare/gflare.c b/plug-ins/gflare/gflare.c index 88a9e7d58a..b91ce95228 100644 --- a/plug-ins/gflare/gflare.c +++ b/plug-ins/gflare/gflare.c @@ -38,7 +38,6 @@ martweb@gmx.net */ - #ifdef RCSID static char rcsid[] = "$Id$"; #endif @@ -50,16 +49,20 @@ static char rcsid[] = "$Id$"; #include #include #include -#include #include #include #include #include #include #include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpcolorspace.h" + +#include + +#include +#include +#include +#include + #include "asupsample.h" #include "gtkmultioptionmenu.h" @@ -103,9 +106,6 @@ static char rcsid[] = "$Id$"; #define ENTRY_WIDTH 40 -#define CHECK_SIZE 4 -#define LIGHTCHECK 192 -#define DARKCHECK 128 #ifndef OPAQUE #define OPAQUE 255 #endif @@ -1942,7 +1942,7 @@ calc_place_sflare () for (n = 0; n < SFLARE_NUM; n++) { sflare = g_new (CalcSFlare, 1); - rnd = (double) rand () / RAND_MAX; + rnd = (double) rand () / G_MAXRAND; for (i = 0; i < GRADIENT_RESOLUTION; i++) if (prob[i] >= rnd) break; @@ -4400,11 +4400,11 @@ preview_rgba_to_rgb (guchar *dest, gint x, gint y, guchar *src) } else { - if ((x % (CHECK_SIZE*2) < CHECK_SIZE) ^ - (y % (CHECK_SIZE*2) < CHECK_SIZE)) - check = LIGHTCHECK; + if ((x % (GIMP_CHECK_SIZE) < GIMP_CHECK_SIZE_SM) ^ + (y % (GIMP_CHECK_SIZE) < GIMP_CHECK_SIZE_SM)) + check = GIMP_CHECK_LIGHT * 255; else - check = DARKCHECK; + check = GIMP_CHECK_DARK * 255; if (src_a == 0) /* full transparent */ { @@ -4695,7 +4695,7 @@ gm_preview_draw (GtkWidget *preview, gchar *gradient_name) gradient_get_values (gradient_name, (guchar *)values, nvalues); - for( row = 0; row < GM_PREVIEW_HEIGHT; row += CHECK_SIZE ) + for( row = 0; row < GM_PREVIEW_HEIGHT; row += GIMP_CHECK_SIZE_SM ) { for( col = 0; col < GM_PREVIEW_WIDTH; col++ ) { @@ -4711,11 +4711,11 @@ gm_preview_draw (GtkWidget *preview, gchar *gradient_name) else { /* more or less transparent */ - if( ( col % (CHECK_SIZE*2) < CHECK_SIZE ) ^ - ( row % (CHECK_SIZE*2) < CHECK_SIZE ) ) - check = LIGHTCHECK; + if( ( col % (GIMP_CHECK_SIZE) < GIMP_CHECK_SIZE_SM ) ^ + ( row % (GIMP_CHECK_SIZE) < GIMP_CHECK_SIZE_SM ) ) + check = GIMP_CHECK_LIGHT * 255; else - check = DARKCHECK; + check = GIMP_CHECK_DARK * 255; if ( src[alpha] == 0 ) { @@ -4731,7 +4731,7 @@ gm_preview_draw (GtkWidget *preview, gchar *gradient_name) } } } - for( irow = 0; irow < CHECK_SIZE && row + irow < GM_PREVIEW_HEIGHT; irow++ ) + for( irow = 0; irow < GIMP_CHECK_SIZE_SM && row + irow < GM_PREVIEW_HEIGHT; irow++ ) { gtk_preview_draw_row( GTK_PREVIEW (preview), (guchar*) dest_row, 0, row + irow, GM_PREVIEW_WIDTH ); diff --git a/plug-ins/gfli/Makefile.am b/plug-ins/gfli/Makefile.am index 11bce75d9c..e6166fca46 100644 --- a/plug-ins/gfli/Makefile.am +++ b/plug-ins/gfli/Makefile.am @@ -15,6 +15,7 @@ INCLUDES = \ -I$(includedir) LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la \ $(GTK_LIBS) \ $(INTLLIBS) diff --git a/plug-ins/gfli/gfli.c b/plug-ins/gfli/gfli.c index 134b303a5d..0469ac500b 100644 --- a/plug-ins/gfli/gfli.c +++ b/plug-ins/gfli/gfli.c @@ -51,829 +51,897 @@ #include #include #include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" + +#include + +#include +#include #include "fli.h" static void query (void); -static void run (gchar *name, gint nparams, GParam *param, gint *nreturn_vals, GParam **return_vals); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); /* return the image-ID of the new image, or -1 in case of an error */ -gint32 load_image (gchar *filename, gint32 from_frame, gint32 to_frame); -gint32 interactive_load_image(gchar *name); +gint32 load_image (gchar *filename, + gint32 from_frame, + gint32 to_frame); +gint load_dialog (gchar *name); /* return TRUE or FALSE */ -int save_image(gchar *filename, gint32 image_id, gint32 from_frame, gint32 to_frame); -int interactive_save_image(gchar *name, gint32 image_id); +gint save_image (gchar *filename, + gint32 image_id, + gint32 from_frame, + gint32 to_frame); +gint save_dialog (gint32 image_id); /* return TRUE or FALSE */ -int get_info(gchar *filename, gint32 *width, gint32 *height, gint32 *frames); - +gint get_info (gchar *filename, + gint32 *width, + gint32 *height, + gint32 *frames); /* * GIMP interface */ -GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; -GParamDef load_args[] = { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_STRING, "filename", "The name of the file to load" }, - { PARAM_STRING, "raw_filename", "The name entered" }, - { PARAM_INT32, "from_frame", "Load beginning from this frame" }, - { PARAM_INT32, "to_frame", "End loading with this frame" }, +GParamDef load_args[] = +{ + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_STRING, "filename", "The name of the file to load" }, + { PARAM_STRING, "raw_filename", "The name entered" }, + { PARAM_INT32, "from_frame", "Load beginning from this frame" }, + { PARAM_INT32, "to_frame", "End loading with this frame" }, }; -GParamDef load_return_vals[] = { - { PARAM_IMAGE, "image", "Output image" }, +GParamDef load_return_vals[] = +{ + { PARAM_IMAGE, "image", "Output image" }, }; gint nload_args = sizeof (load_args) / sizeof (load_args[0]); -gint nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); +gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); -GParamDef save_args[] = { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable (unused)" }, - { PARAM_STRING, "filename", "The name of the file to save" }, - { PARAM_STRING, "raw_filename", "The name entered" }, - { PARAM_INT32, "from_frame", "Save beginning from this frame" }, - { PARAM_INT32, "to_frame", "End saveing with this frame" }, +GParamDef save_args[] = +{ + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Input drawable (unused)" }, + { PARAM_STRING, "filename", "The name of the file to save" }, + { PARAM_STRING, "raw_filename", "The name entered" }, + { PARAM_INT32, "from_frame", "Save beginning from this frame" }, + { PARAM_INT32, "to_frame", "End saveing with this frame" }, }; gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); -GParamDef info_args[] = { - { PARAM_STRING, "filename", "The name of the file to get info" }, +GParamDef info_args[] = +{ + { PARAM_STRING, "filename", "The name of the file to get info" }, }; -GParamDef info_return_vals[] = { - { PARAM_INT32, "width", "Width of one frame" }, - { PARAM_INT32, "height", "Height of one frame" }, - { PARAM_INT32, "frames", "Number of Frames" }, + +GParamDef info_return_vals[] = +{ + { PARAM_INT32, "width", "Width of one frame" }, + { PARAM_INT32, "height", "Height of one frame" }, + { PARAM_INT32, "frames", "Number of Frames" }, }; gint ninfo_args = sizeof (info_args) / sizeof (info_args[0]); -gint ninfo_return_vals = sizeof (info_return_vals) / sizeof (info_return_vals[0]); +gint ninfo_return_vals = (sizeof (info_return_vals) / + sizeof (info_return_vals[0])); + + +static gint32 from_frame; +static gint32 to_frame; MAIN () -static void query () +static void +query (void) { - /* - * Load/save procedures - */ - gimp_install_procedure ( - "file_fli_load_frames", - "load FLI-movies", - "This is an experimantal plug-in to handle FLI movies", - "Jens Ch. Restemeier", - "Jens Ch. Restemeier", - "1997", - "/FLI", - NULL, - PROC_PLUG_IN, - nload_args, nload_return_vals, - load_args, load_return_vals); - gimp_install_procedure ( - "file_fli_load", - "load FLI-movies", - "This is an experimantal plug-in to handle FLI movies", - "Jens Ch. Restemeier", - "Jens Ch. Restemeier", - "1997", - "/FLI", - NULL, - PROC_PLUG_IN, - nload_args - 2, nload_return_vals, - load_args, load_return_vals); - gimp_register_magic_load_handler ("file_fli_load", "fli", "", ""); + /* + * Load/save procedures + */ + gimp_install_procedure ("file_fli_load_frames", + "load FLI-movies", + "This is an experimantal plug-in to handle FLI movies", + "Jens Ch. Restemeier", + "Jens Ch. Restemeier", + "1997", + "/FLI", + NULL, + PROC_PLUG_IN, + nload_args, nload_return_vals, + load_args, load_return_vals); - gimp_install_procedure ( - "file_fli_save", - "save FLI-movies", - "This is an experimantal plug-in to handle FLI movies", - "Jens Ch. Restemeier", - "Jens Ch. Restemeier", - "1997", - "/FLI", - "INDEXED,GRAY", - PROC_PLUG_IN, - nsave_args, 0, - save_args, NULL); - gimp_register_save_handler ("file_fli_save", "fli", ""); + gimp_install_procedure ("file_fli_load", + "load FLI-movies", + "This is an experimantal plug-in to handle FLI movies", + "Jens Ch. Restemeier", + "Jens Ch. Restemeier", + "1997", + "/FLI", + NULL, + PROC_PLUG_IN, + nload_args - 2, nload_return_vals, + load_args, load_return_vals); - /* - * Utility functions: - */ - gimp_install_procedure ( - "file_fli_info", - "Get info about a Fli movie", - "This is a experimantal plug-in to handle FLI movies", - "Jens Ch. Restemeier", - "Jens Ch. Restemeier", - "1997", - NULL, - NULL, - PROC_EXTENSION, - ninfo_args, ninfo_return_vals, - info_args, info_return_vals); + gimp_register_magic_load_handler ("file_fli_load", + "fli", + "", + ""); + + gimp_install_procedure ("file_fli_save", + "save FLI-movies", + "This is an experimantal plug-in to handle FLI movies", + "Jens Ch. Restemeier", + "Jens Ch. Restemeier", + "1997", + "/FLI", + "INDEXED,GRAY", + PROC_PLUG_IN, + nsave_args, 0, + save_args, NULL); + + gimp_register_save_handler ("file_fli_save", + "fli", + ""); + + /* + * Utility functions: + */ + gimp_install_procedure ("file_fli_info", + "Get info about a Fli movie", + "This is a experimantal plug-in to handle FLI movies", + "Jens Ch. Restemeier", + "Jens Ch. Restemeier", + "1997", + NULL, + NULL, + PROC_EXTENSION, + ninfo_args, ninfo_return_vals, + info_args, info_return_vals); } GParam values[5]; -static void run (gchar *name, gint nparams, GParam *param, gint *nreturn_vals, GParam **return_vals) +static void +run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals) { - GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + GRunModeType run_mode; + gint32 image_ID; + gint32 pc; - run_mode = param[0].data.d_int32; + run_mode = param[0].data.d_int32; - *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *nreturn_vals = 1; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; - if (strncmp (name, "file_fli_load", strlen("file_fli_load")) == 0) { - switch (run_mode) { - case RUN_NONINTERACTIVE: { - gint32 image_id; - gint32 pc; - gint32 to_frame; - gint32 from_frame; - /* - * check for valid parameters: - * (Or can I trust GIMP ?) - */ - if ((nparams < nload_args - 2) || (nload_args < nparams)) { - *nreturn_vals = 1; - values[0].data.d_status = STATUS_CALLING_ERROR; - return; - } - for (pc=0; pc=fli_header.frames) { - /* nothing to do ... */ - return -1; - } - if (to_frame>fli_header.frames) { - to_frame=fli_header.frames; - } + /* + * Fix parameters + */ + if ((from_frame==-1) && (to_frame==-1)) + { + /* to make scripting easier: */ + from_frame=1; to_frame=fli_header.frames; + } + if (to_frame= fli_header.frames) + { + /* nothing to do ... */ + return -1; + } + if (to_frame>fli_header.frames) + { + to_frame = fli_header.frames; + } - image_id = gimp_image_new (fli_header.width, fli_header.height, INDEXED); - gimp_image_set_filename (image_id, filename); + image_id = gimp_image_new (fli_header.width, fli_header.height, INDEXED); + gimp_image_set_filename (image_id, filename); - fb=g_malloc(fli_header.width * fli_header.height); - ofb=g_malloc(fli_header.width * fli_header.height); + fb = g_malloc (fli_header.width * fli_header.height); + ofb = g_malloc (fli_header.width * fli_header.height); - /* - * Skip to the beginning of requested frames: - */ - for (cnt=1; cnt < from_frame; cnt++) { - fli_read_frame(f, &fli_header, ofb, ocm, fb, cm); - memcpy(ocm, cm, 768); - fb_x=fb; fb=ofb; ofb=fb_x; - } - /* - * Load range - */ - for (cnt=from_frame; cnt<=to_frame; cnt++) { - gchar layername[64]; - sprintf(layername, "Frame (%i)",cnt); - layer_ID = gimp_layer_new ( - image_id, layername, - fli_header.width, fli_header.height, - INDEXED_IMAGE, 100, NORMAL_MODE); - gimp_image_add_layer (image_id, layer_ID, 0); + /* + * Skip to the beginning of requested frames: + */ + for (cnt = 1; cnt < from_frame; cnt++) + { + fli_read_frame (f, &fli_header, ofb, ocm, fb, cm); + memcpy (ocm, cm, 768); + fb_x = fb; fb = ofb; ofb = fb_x; + } + /* + * Load range + */ + for (cnt = from_frame; cnt <= to_frame; cnt++) + { + gchar layername[64]; + sprintf (layername, "Frame (%i)",cnt); + layer_ID = gimp_layer_new (image_id, layername, + fli_header.width, fli_header.height, + INDEXED_IMAGE, 100, NORMAL_MODE); + gimp_image_add_layer (image_id, layer_ID, 0); - drawable = gimp_drawable_get (layer_ID); - gimp_progress_update ((double) cnt / (double)(to_frame-from_frame)); + drawable = gimp_drawable_get (layer_ID); + gimp_progress_update ((double) cnt / (double)(to_frame-from_frame)); - fli_read_frame(f, &fli_header, ofb, ocm, fb, cm); + fli_read_frame (f, &fli_header, ofb, ocm, fb, cm); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, fli_header.width, fli_header.height, TRUE, FALSE); - gimp_pixel_rgn_set_rect (&pixel_rgn, fb, 0, 0, fli_header.width, fli_header.height); + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, fli_header.width, fli_header.height, + TRUE, FALSE); + gimp_pixel_rgn_set_rect (&pixel_rgn, fb, + 0, 0, fli_header.width, fli_header.height); - gimp_drawable_flush (drawable); - gimp_drawable_detach (drawable); - memcpy(ocm, cm, 768); - fb_x=fb; fb=ofb; ofb=fb_x; - } - gimp_image_set_cmap (image_id, cm, 256); - fclose(f); + gimp_drawable_flush (drawable); + gimp_drawable_detach (drawable); + memcpy (ocm, cm, 768); + fb_x = fb; fb = ofb; ofb = fb_x; + } + gimp_image_set_cmap (image_id, cm, 256); + fclose (f); - g_free(fb); - g_free(ofb); - return image_id; + g_free (fb); + g_free (ofb); + + return image_id; } /* * get framestack and store as fli animation * (some code was taken from the GIF plugin.) */ -int save_image(gchar *filename, gint32 image_id, gint32 from_frame, gint32 to_frame) +gint +save_image (gchar *filename, + gint32 image_id, + gint32 from_frame, + gint32 to_frame) { - FILE *f; - gchar *name_buf; - GDrawable *drawable; - GDrawableType drawable_type; - gint32 *framelist; - gint nframes; + FILE *f; + gchar *name_buf; + GDrawable *drawable; + GDrawableType drawable_type; + gint32 *framelist; + gint nframes; - guchar *fb, *ofb; - guchar cm[768]; - GPixelRgn pixel_rgn; - s_fli_header fli_header; + guchar *fb, *ofb; + guchar cm[768]; + GPixelRgn pixel_rgn; + s_fli_header fli_header; - gint cnt; + gint cnt; - /* - * prepare header and check information - */ - framelist = gimp_image_get_layers(image_id, &nframes); + /* + * prepare header and check information + */ + framelist = gimp_image_get_layers (image_id, &nframes); - /* - * Fix parameters - */ - if ((from_frame==-1) && (to_frame==-1)) { - /* to make scripting easier: */ - from_frame=0; to_frame=nframes; - } - if (to_framenframes) { - /* nothing to do ... */ - return FALSE; - } - if (to_frame>nframes) { - to_frame=nframes; - } + /* + * Fix parameters + */ + if ((from_frame == -1) && (to_frame == -1)) + { + /* to make scripting easier: */ + from_frame = 0; to_frame = nframes; + } + if (to_frame < from_frame) + { + to_frame = nframes; + } + if (from_frame < 1) + { + from_frame = 1; + } + if (to_frame < 1) + { + /* nothing to do ... */ + return FALSE; + } + if (from_frame > nframes) + { + /* nothing to do ... */ + return FALSE; + } + if (to_frame > nframes) + { + to_frame = nframes; + } - drawable_type = gimp_drawable_type(framelist[0]); - switch (drawable_type) { - case INDEXEDA_IMAGE: - case GRAYA_IMAGE: - g_error( "FLI: Sorry, can't save images with Alpha.\n"); - return FALSE; - case GRAY_IMAGE: { - /* build grayscale palette */ - int i; - for (i=0; i<256; i++) { - cm[i*3+0]=cm[i*3+1]=cm[i*3+2]=i; - } - break; + drawable_type = gimp_drawable_type (framelist[0]); + switch (drawable_type) + { + case INDEXEDA_IMAGE: + case GRAYA_IMAGE: + g_message ("FLI: Sorry, can't save images with Alpha.\n"); + return FALSE; + case GRAY_IMAGE: + { + /* build grayscale palette */ + gint i; + for (i = 0; i < 256; i++) + { + cm[i*3+0] = cm[i*3+1] = cm[i*3+2] = i; + } + break; + } + case INDEXED_IMAGE: + { + gint colors, i; + guchar *cmap; + cmap=gimp_image_get_cmap(image_id, &colors); + for (i = 0; i < colors; i++) + { + cm[i*3+0] = cmap[i*3+0]; + cm[i*3+1] = cmap[i*3+1]; + cm[i*3+2] = cmap[i*3+2]; + } + for (i = colors; i < 256; i++) + { + cm[i*3+0] = cm[i*3+1] = cm[i*3+2] = i; + } + break; + } + default: + g_message ("FLI: Sorry, I can save only INDEXED and GRAY images.\n"); + return FALSE; + } + + name_buf = g_strdup_printf ("Saving %s:", filename); + gimp_progress_init (name_buf); + g_free (name_buf); + + /* + * First build the fli header. + */ + fli_header.filesize = 0; /* will be fixed when writing the header */ + fli_header.frames = 0; /* will be fixed during the write */ + fli_header.width = gimp_image_width (image_id); + fli_header.height = gimp_image_height (image_id); + + if ((fli_header.width == 320) && (fli_header.height == 200)) + { + fli_header.magic = HEADER_FLI; + } + else + { + fli_header.magic = HEADER_FLC; + } + fli_header.depth = 8; /* I've never seen a depth != 8 */ + fli_header.flags = 3; + fli_header.speed = 1000 / 25; + fli_header.created = 0; /* program ID. not neccessary... */ + fli_header.updated = 0; /* date in MS-DOS format. ignore...*/ + fli_header.aspect_x = 1; /* aspect ratio. Will be added as soon.. */ + fli_header.aspect_y = 1; /* ... as GIMP supports it. */ + fli_header.oframe1 = fli_header.oframe2 = 0; /* will be fixed during the write */ + + f = fopen (filename ,"wb"); + if (!f) + { + g_message ("FLI: can't open \"%s\"\n", filename); + return FALSE; + } + fseek (f, 128, SEEK_SET); + + fb = g_malloc (fli_header.width * fli_header.height); + ofb = g_malloc (fli_header.width * fli_header.height); + + /* + * Now write all frames + */ + for (cnt = from_frame; cnt <= to_frame; cnt++) + { + gint offset_x, offset_y, xc, yc; + guint rows, cols, rowstride; + guchar *tmp; + + gimp_progress_update ((double) cnt / (double)(to_frame-from_frame)); + + /* get layer data from GIMP */ + drawable = gimp_drawable_get (framelist[nframes-cnt]); + gimp_drawable_offsets (framelist[cnt-1], &offset_x, &offset_y); + cols = drawable->width; + rows = drawable->height; + rowstride = drawable->width; + gimp_pixel_rgn_init (&pixel_rgn, drawable, + 0, 0, drawable->width, drawable->height, + FALSE, FALSE); + tmp = malloc(cols * rows); + gimp_pixel_rgn_get_rect (&pixel_rgn, tmp, + 0, 0, drawable->width, drawable->height); + + /* now paste it into the framebuffer, with the neccessary offset */ + for (yc = 0; yc < cols; yc++) + { + gint yy; + yy = yc + offset_y; + if ((yy > 0) && (yy < fli_header.height)) + { + for (xc = 0; xc < cols; xc++) + { + gint xx; + xx = xc + offset_x; + if ((xx > 0) && (xx < fli_header.width)) + { + fb[yy*fli_header.width + xx] = tmp[yc*cols+xc]; + } } - case INDEXED_IMAGE: { - gint colors, i; - guchar *cmap; - cmap=gimp_image_get_cmap(image_id, &colors); - for (i=0; i from_frame) + { + /* save frame, allow all codecs */ + fli_write_frame (f, &fli_header, ofb, cm, fb, cm, W_ALL); } - fli_header.depth=8; /* I've never seen a depth != 8 */ - fli_header.flags=3; - fli_header.speed=1000/25; - fli_header.created=0; /* program ID. not neccessary... */ - fli_header.updated=0; /* date in MS-DOS format. ignore...*/ - fli_header.aspect_x=1; /* aspect ratio. Will be added as soon.. */ - fli_header.aspect_y=1; /* ... as GIMP supports it. */ - fli_header.oframe1=fli_header.oframe2=0; /* will be fixed during the write */ - - f=fopen(filename ,"wb"); - if (!f) { - g_error ("FLI: can't open \"%s\"\n", filename); - return FALSE; + else + { + /* save first frame, no delta information, allow all codecs */ + fli_write_frame (f, &fli_header, NULL, NULL, fb, cm, W_ALL); } - fseek(f,128,SEEK_SET); + memcpy (ofb, fb, fli_header.width * fli_header.height); + } - fb=g_malloc(fli_header.width * fli_header.height); - ofb=g_malloc(fli_header.width * fli_header.height); + /* + * finish fli + */ + fli_write_header (f, &fli_header); + fclose (f); - /* - * Now write all frames - */ - for (cnt=from_frame; cnt<=to_frame; cnt++) { - gint offset_x, offset_y, xc, yc; - guint rows, cols, rowstride; - guchar *tmp; + g_free (fb); + g_free (ofb); + g_free (framelist); - gimp_progress_update ((double) cnt / (double)(to_frame-from_frame)); - - /* get layer data from GIMP */ - drawable = gimp_drawable_get (framelist[nframes-cnt]); - gimp_drawable_offsets (framelist[cnt-1], &offset_x, &offset_y); - cols = drawable->width; - rows = drawable->height; - rowstride = drawable->width; - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, FALSE, FALSE); - tmp=malloc(cols * rows); - gimp_pixel_rgn_get_rect (&pixel_rgn, tmp, 0, 0, drawable->width, drawable->height); - - /* now paste it into the framebuffer, with the neccessary offset */ - for (yc=0; yc0) && (yy0) && (xxfrom_frame) { - /* save frame, allow all codecs */ - fli_write_frame(f, &fli_header, ofb, cm, fb, cm, W_ALL); - } else { - /* save first frame, no delta information, allow all codecs */ - fli_write_frame(f, &fli_header, NULL, NULL, fb, cm, W_ALL); - } - memcpy(ofb, fb, fli_header.width * fli_header.height); - } - - /* - * finish fli - */ - fli_write_header(f, &fli_header); - fclose(f); - - g_free(fb); - g_free(ofb); - g_free(framelist); - - return TRUE; + return TRUE; } /* * Dialogs for interactive usage */ -gint result; +gint result = FALSE; -static void cb_cancel(GtkWidget *widget, gpointer data) +static void +cb_ok (GtkWidget *widget, + gpointer data) { - result=FALSE; - gtk_main_quit(); + result = TRUE; + + gtk_widget_destroy (GTK_WIDGET (data)); } -static void cb_ok(GtkWidget *widget, gpointer data) +void +init_gtk (void) { - result=TRUE; - gtk_main_quit(); + guchar *color_cube; + gchar **argv; + gint argc; + + argc = 1; + argv = g_new (gchar *, 1); + argv[0] = g_strdup ("gfli"); + + gtk_init (&argc, &argv); + gtk_rc_parse (gimp_gtkrc()); + + gdk_set_use_xshm (gimp_use_xshm ()); + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + color_cube = gimp_color_cube (); + gtk_preview_set_color_cube (color_cube[0], color_cube[1], + color_cube[2], color_cube[3]); + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); } -static void cb_change(GtkWidget *widget, gpointer data) +gint +load_dialog (gchar *name) { - *((gint32 *)data)=atoi(gtk_entry_get_text(GTK_ENTRY(widget))); + GtkWidget *dialog; + GtkWidget *table; + GtkWidget *spinbutton; + GtkObject *adj; + + gint32 width, height, nframes; + get_info (name, &width, &height, &nframes); + + from_frame = 1; + to_frame = nframes; + + init_gtk (); + + dialog = gimp_dialog_new ("GFLI 1.2 - Load framestack", "gfli", + gimp_plugin_help_func, "filters/gfli.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, + + "OK", cb_ok, + NULL, NULL, NULL, TRUE, FALSE, + "Cancel", gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, + + NULL); + + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", + GTK_SIGNAL_FUNC (gtk_main_quit), + NULL); + + table = gtk_table_new (2, 2, FALSE); + gtk_container_set_border_width (GTK_CONTAINER (table), 6); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, + FALSE, FALSE, 0); + gtk_widget_show (table); + + /* + * Maybe I add on-the-fly RGB conversion, to keep palettechanges... + * But for now you can set a start- and a end-frame: + */ + spinbutton = gimp_spin_button_new (&adj, + from_frame, 1, nframes, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + "From:", 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &from_frame); + + spinbutton = gimp_spin_button_new (&adj, + to_frame, 1, nframes, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + "To:", 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &to_frame); + + gtk_widget_show (dialog); + + gtk_main (); + gdk_flush (); + + return result; } -void init_gui() +gint +save_dialog (gint32 image_id) { - guchar *color_cube; - gchar **argv; - gint argc; + GtkWidget *dialog; + GtkWidget *table; + GtkWidget *spinbutton; + GtkObject *adj; - argc = 1; - argv = g_new (gchar *, 1); - argv[0] = g_strdup ("gfli"); + gint nframes; - gtk_init (&argc, &argv); - gtk_rc_parse (gimp_gtkrc()); + g_free (gimp_image_get_layers (image_id, &nframes)); - gdk_set_use_xshm (gimp_use_xshm ()); - gtk_preview_set_gamma (gimp_gamma ()); - gtk_preview_set_install_cmap (gimp_install_cmap ()); - color_cube = gimp_color_cube (); - gtk_preview_set_color_cube (color_cube[0], color_cube[1], - color_cube[2], color_cube[3]); - gtk_widget_set_default_visual (gtk_preview_get_visual ()); - gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); -} - -gint32 interactive_load_image(gchar *name) -{ - GtkWidget *dialog; - GtkWidget *entry; - GtkWidget *label; - GtkWidget *table; - GtkWidget *button; - char buffer[32]; - - gint32 from_frame, to_frame, width, height, nframes; - get_info(name, &width, &height, &nframes); - - from_frame=1; to_frame=nframes; - - init_gui(); - - dialog=gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW(dialog), "GFLI 1.2 - Load framestack"); - gtk_signal_connect (GTK_OBJECT (dialog), "destroy", - (GtkSignalFunc)cb_cancel, - NULL); - - table=gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); - gtk_container_border_width (GTK_CONTAINER (table), 5); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0); - gtk_widget_show(table); - - /* - * Maybe I add on-the-fly RGB conversion, to keep palettechanges... - * But for now you can set a start- and a end-frame: - */ - label = gtk_label_new ("From:"); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(label); - - entry = gtk_entry_new (); - gtk_entry_set_text(GTK_ENTRY(entry), "1"); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc)cb_change, - (gpointer)&from_frame); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(entry); - - label = gtk_label_new ("To:"); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(label); - - entry = gtk_entry_new (); - sprintf(buffer, "%i", to_frame); - gtk_entry_set_text(GTK_ENTRY(entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc)cb_change, - (gpointer)&to_frame); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(entry); - - button = gtk_button_new_with_label ("OK"); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) cb_ok, - (gpointer) NULL); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_widget_grab_default (button); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show (button); - button = gtk_button_new_with_label ("Cancel"); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) cb_cancel, - (gpointer) NULL); - gtk_box_pack_end (GTK_BOX (GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_widget_show (button); - - gtk_widget_show(dialog); - - result=FALSE; - - gtk_main(); - gdk_flush(); - - if (result) { - return load_image (name, from_frame, to_frame); - } - - return -1; -} - -int interactive_save_image(gchar *name, gint32 image_id) -{ - GtkWidget *dialog; - GtkWidget *entry; - GtkWidget *label; - GtkWidget *table; - GtkWidget *button; - char buffer[32]; - gint32 from_frame, to_frame; - gint nframes; - - g_free( gimp_image_get_layers(image_id, &nframes) ); - - from_frame=1; to_frame=nframes; - - init_gui(); - - dialog=gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW(dialog), "GFLI 1.2 - Save framestack"); - gtk_signal_connect (GTK_OBJECT (dialog), "destroy", - (GtkSignalFunc)cb_cancel, - NULL); - - table=gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); - gtk_container_border_width (GTK_CONTAINER (table), 5); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0); - gtk_widget_show(table); - - /* - * Maybe I'll add some functions to influence compression - * or FLI version. But for now you can set a start- and a end-frame: - */ - - label = gtk_label_new ("From:"); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(label); - - entry = gtk_entry_new(); - gtk_entry_set_text(GTK_ENTRY(entry), "1"); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc)cb_change, - (gpointer)&from_frame); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(entry); - - label = gtk_label_new ("To:"); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(label); - - entry = gtk_entry_new (); - sprintf(buffer, "%i", to_frame); - gtk_entry_set_text(GTK_ENTRY(entry), buffer); - gtk_signal_connect (GTK_OBJECT (entry), "changed", - (GtkSignalFunc)cb_change, - (gpointer)&to_frame); - gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(entry); - - button = gtk_button_new_with_label ("OK"); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) cb_ok, - (gpointer) NULL); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_widget_grab_default (button); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show (button); - button = gtk_button_new_with_label ("Cancel"); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) cb_cancel, - (gpointer) NULL); - gtk_box_pack_end (GTK_BOX (GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_widget_show (button); - - gtk_widget_show(dialog); - - result=FALSE; - - gtk_main(); - gdk_flush(); - - if (result) { - return save_image(name, image_id, from_frame, to_frame); - } - - return FALSE; + from_frame = 1; + to_frame = nframes; + + init_gtk (); + + dialog = gimp_dialog_new ("GFLI 1.2 - Save framestack", "gfli", + gimp_plugin_help_func, "filters/gfli.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, + + "OK", cb_ok, + NULL, NULL, NULL, TRUE, FALSE, + "Cancel", gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, + + NULL); + + gtk_signal_connect (GTK_OBJECT (dialog), "destroy", + GTK_SIGNAL_FUNC (gtk_main_quit), + NULL); + + table = gtk_table_new (2, 2, FALSE); + gtk_container_set_border_width (GTK_CONTAINER (table), 6); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, + FALSE, FALSE, 0); + gtk_widget_show (table); + + /* + * Maybe I add on-the-fly RGB conversion, to keep palettechanges... + * But for now you can set a start- and a end-frame: + */ + spinbutton = gimp_spin_button_new (&adj, + from_frame, 1, nframes, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 0, + "From:", 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &from_frame); + + spinbutton = gimp_spin_button_new (&adj, + to_frame, 1, nframes, 1, 10, 0, 1, 0); + gimp_table_attach_aligned (GTK_TABLE (table), 1, + "To:", 1.0, 0.5, + spinbutton, TRUE); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (gimp_int_adjustment_update), + &to_frame); + + gtk_widget_show (dialog); + + gtk_main (); + gdk_flush (); + + return result; } diff --git a/plug-ins/gimpressionist/repaint.c b/plug-ins/gimpressionist/repaint.c index 8957bb2e49..2b133b1e7b 100644 --- a/plug-ins/gimpressionist/repaint.c +++ b/plug-ins/gimpressionist/repaint.c @@ -4,18 +4,23 @@ #define HAVE_DIRENT_H #define HAVE_UNISTD_H #endif + #include #include #include #ifdef HAVE_UNISTD_H #include #endif -#include #include + +#include + +#include +#include + #include "gimpressionist.h" #include "ppmtool.h" -#include -#include + #include gimpressionist_vals_t runningvals; @@ -628,7 +633,7 @@ void repaint(struct ppm *p, struct ppm *a) ty = ypos[i-1]; } if(runningvals.placecenter) { - double z = RAND_FUNC() * 0.75 / RAND_MAX; + double z = RAND_FUNC() * 0.75 / G_MAXRAND; tx = tx * (1.0-z) + tmp.width/2 * z; ty = ty * (1.0-z) + tmp.height/2 * z; } @@ -746,9 +751,9 @@ void repaint(struct ppm *p, struct ppm *a) } if(runningvals.colornoise > 0.0) { double v = runningvals.colornoise; - r = r + RAND_FUNC() / (float)RAND_MAX * v - v/2; - g = g + RAND_FUNC() / (float)RAND_MAX * v - v/2; - b = b + RAND_FUNC() / (float)RAND_MAX * v - v/2; + r = r + RAND_FUNC() / (float)G_MAXRAND * v - v/2; + g = g + RAND_FUNC() / (float)G_MAXRAND * v - v/2; + b = b + RAND_FUNC() / (float)G_MAXRAND * v - v/2; if(r < 0) r = 0; else if(r > 255) r = 255; if(g < 0) g = 0; else if(g > 255) g = 255; if(b < 0) b = 0; else if(b > 255) b = 255; diff --git a/plug-ins/ifscompose/ifscompose_utils.c b/plug-ins/ifscompose/ifscompose_utils.c index 6f0c1d0390..468df8f04c 100644 --- a/plug-ins/ifscompose/ifscompose_utils.c +++ b/plug-ins/ifscompose/ifscompose_utils.c @@ -19,17 +19,16 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include #include #include #include -#include -#include "libgimp/gimp.h" -#include "ifscompose.h" -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ +#include + +#include +#include + +#include "ifscompose.h" typedef struct { GdkPoint point; @@ -795,10 +794,10 @@ ifs_render(AffElement **elements, gint num_elements, psum = 0; for (i=0;idata)->quality; @@ -493,7 +490,7 @@ run (char *name, parasite_free(parasite); } #endif /* GIMP_HAVE_PARASITES */ - + /* we start an undo_group and immediately freeze undo saving so that we can avoid sucking up tile cache with our unneeded preview steps. */ @@ -513,7 +510,7 @@ run (char *name, gimp_undo_push_group_end (image_ID); if (!err) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -521,8 +518,10 @@ run (char *name, /* pw - added two more progressive and comment */ /* sg - added subsampling, preview, baseline, restarts and DCT */ if (nparams != 14) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { jsvals.quality = param[5].data.d_float; jsvals.smoothing = param[6].data.d_float; @@ -540,26 +539,24 @@ run (char *name, if (image_comment) g_free (image_comment); image_comment = g_strdup (param[9].data.d_string); + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.subsmp < 0 || jsvals.subsmp > 2) + status = STATUS_CALLING_ERROR; + else if (jsvals.dct < 0 || jsvals.dct > 2) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.subsmp < 0 || jsvals.subsmp > 2)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.dct < 0 || jsvals.dct > 2)) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ gimp_get_data ("file_jpeg_save", &jsvals); #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -580,26 +577,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID, - FALSE)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID, + FALSE)) + { + /* Store mvals data */ + gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) { /* If the image was exported, delete the new display. */ /* This also deletes the image. */ - + if (display_ID > -1) gimp_display_delete (display_ID); else @@ -607,7 +606,6 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - /* pw - now we need to change the defaults to be whatever * was used to save this image. Dump the old parasites * and add new ones. */ @@ -627,14 +625,18 @@ run (char *name, parasite = parasite_new ("jpeg-save-options", 0, sizeof (jsvals), &jsvals); gimp_image_parasite_attach (orig_image_ID, parasite); parasite_free (parasite); - #endif /* Have Parasites */ } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - /* Read next byte */ -static unsigned int +static guint jpeg_getc (j_decompress_ptr cinfo) { struct jpeg_source_mgr * datasrc = cinfo->src; @@ -889,7 +891,8 @@ load_image (char *filename, } else { - image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, image_type); + image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, + image_type); gimp_image_set_filename (image_ID, filename); } @@ -899,7 +902,7 @@ load_image (char *filename, cinfo.output_width, cinfo.output_height, layer_type, 100, NORMAL_MODE); - } + } else { layer_ID = gimp_layer_new (image_ID, _("Background"), @@ -909,47 +912,49 @@ load_image (char *filename, } drawable_global = drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); - /* Step 5.1: if the file had resolution information, set it on the - * image */ #ifdef GIMP_HAVE_RESOLUTION_INFO + /* Step 5.1: if the file had resolution information, set it on the image */ if (!preview && cinfo.saw_JFIF_marker) - { - float xresolution; - float yresolution; - float asymmetry; + { + gdouble xresolution; + gdouble yresolution; + gdouble asymmetry; - xresolution = cinfo.X_density; - yresolution = cinfo.Y_density; + xresolution = cinfo.X_density; + yresolution = cinfo.Y_density; - switch (cinfo.density_unit) - { - case 0: /* unknown */ - asymmetry = xresolution / yresolution; - xresolution = 72 * asymmetry; - yresolution = 72; - break; - - case 1: /* dots per inch */ - break; + switch (cinfo.density_unit) + { + case 0: /* unknown -> set the aspect ratio but use the default + * image resolution + */ + asymmetry = xresolution / yresolution; + gimp_image_get_resolution (image_ID, &xresolution, &yresolution); + xresolution *= asymmetry; + break; - case 2: /* dots per cm */ - xresolution *= 2.54; - yresolution *= 2.54; - break; + case 1: /* dots per inch */ + break; - default: - g_message ("unknown density unit %d\nassuming dots per inch", - cinfo.density_unit); - break; - } + case 2: /* dots per cm */ + xresolution *= 2.54; + yresolution *= 2.54; + gimp_image_set_unit (image_ID, UNIT_MM); + break; - gimp_image_set_resolution (image_ID, xresolution, yresolution); - } + default: + g_message ("unknown density unit %d\nassuming dots per inch", + cinfo.density_unit); + break; + } + + gimp_image_set_resolution (image_ID, xresolution, yresolution); + } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ @@ -1345,20 +1350,36 @@ save_image (char *filename, #ifdef GIMP_HAVE_RESOLUTION_INFO { - double xresolution; - double yresolution; + gdouble xresolution; + gdouble yresolution; gimp_image_get_resolution (orig_image_ID, &xresolution, &yresolution); if (xresolution > 1e-5 && yresolution > 1e-5) { - cinfo.density_unit = 1; /* dots per inch */ + gdouble factor; + + factor = gimp_unit_get_factor (gimp_image_get_unit (orig_image_ID)); + + if (factor == 2.54 /* cm */ || + factor == 25.4 /* mm */) + { + cinfo.density_unit = 2; /* dots per cm */ + + xresolution /= 2.54; + yresolution /= 2.54; + } + else + { + cinfo.density_unit = 1; /* dots per inch */ + } + cinfo.X_density = xresolution; cinfo.Y_density = yresolution; } } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - + /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. @@ -1526,7 +1547,7 @@ static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback) + GtkSignalFunc callback) { GtkWidget *menu_item = gtk_menu_item_new_with_label (label); gtk_container_add (GTK_CONTAINER (menu), menu_item); diff --git a/plug-ins/jpeg/jpeg-load.h b/plug-ins/jpeg/jpeg-load.h index 09e6569ffb..d25d1cbfa4 100644 --- a/plug-ins/jpeg/jpeg-load.h +++ b/plug-ins/jpeg/jpeg-load.h @@ -164,21 +164,21 @@ #define DEFAULT_COMMENT "Created with The GIMP" /* sg - these should not be global... */ -gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; -GtkWidget *preview_size = NULL; -GDrawable *drawable_global = NULL; +static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; +static GtkWidget *preview_size = NULL; +static GDrawable *drawable_global = NULL; typedef struct { gdouble quality; gdouble smoothing; - gint optimize; - gint progressive; - gint baseline; - gint subsmp; - gint restart; - gint dct; - gint preview; + gint optimize; + gint progressive; + gint baseline; + gint subsmp; + gint restart; + gint dct; + gint preview; } JpegSaveVals; typedef struct @@ -189,25 +189,21 @@ typedef struct typedef struct { struct jpeg_compress_struct cinfo; - gint tile_height; - FILE *outfile; - gint has_alpha; - gint rowstride; - guchar *temp; - guchar *data; - guchar *src; + gint tile_height; + FILE *outfile; + gint has_alpha; + gint rowstride; + guchar *temp; + guchar *data; + guchar *src; GDrawable *drawable; - GPixelRgn pixel_rgn; - char *file_name; - - gint abort_me; + GPixelRgn pixel_rgn; + gchar *file_name; + gint abort_me; } preview_persistent; gint *abort_me = NULL; -typedef void (*MenuItemCallback) (GtkWidget *widget, - gpointer user_data); - /* Declare local functions. */ static void query (void); @@ -228,7 +224,7 @@ static gint save_image (gchar *filename, static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback); + GtkSignalFunc callback); static void init_gtk (void); static gint save_dialog (void); @@ -263,10 +259,10 @@ static void dct_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static JpegSaveVals jsvals = @@ -295,7 +291,7 @@ static GtkWidget *restart_markers_label = NULL; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -307,8 +303,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -327,7 +324,7 @@ query () { PARAM_INT32, "restart", "Frequency of restart markers (in rows, 0 = no restart markers)" }, { PARAM_INT32, "dct", "DCT algorithm to use (speed/quality tradeoff)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -355,41 +352,41 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_jpeg_load", "jpg,jpeg", "", "6,string,JFIF"); - gimp_register_save_handler ("file_jpeg_save", "jpg,jpeg", ""); + gimp_register_magic_load_handler ("file_jpeg_load", + "jpg,jpeg", + "", + "6,string,JFIF"); + gimp_register_save_handler ("file_jpeg_save", + "jpg,jpeg", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; - gint32 display_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; + gint32 display_ID = -1; #ifdef GIMP_HAVE_PARASITES - Parasite *parasite; + Parasite *parasite; #endif /* GIMP_HAVE_PARASITES */ - int err; + gint err; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - -#if 0 - printf ("JPEG: Waiting (pid %d)...\n", getpid()); - kill (getpid(), SIGSTOP); -#endif + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_jpeg_load") == 0) { @@ -400,13 +397,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_jpeg_save") == 0) @@ -423,7 +419,8 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "JPEG", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); switch (export) { case EXPORT_EXPORT: @@ -434,8 +431,7 @@ run (char *name, case EXPORT_IGNORE: break; case EXPORT_CANCEL: - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; break; } @@ -443,7 +439,7 @@ run (char *name, default: break; } - + if (image_comment) { g_free (image_comment); @@ -460,16 +456,16 @@ run (char *name, if (!image_comment) image_comment = g_strdup (DEFAULT_COMMENT); - jsvals.quality = DEFAULT_QUALITY; - jsvals.smoothing = DEFAULT_SMOOTHING; - jsvals.optimize = DEFAULT_OPTIMIZE; + jsvals.quality = DEFAULT_QUALITY; + jsvals.smoothing = DEFAULT_SMOOTHING; + jsvals.optimize = DEFAULT_OPTIMIZE; jsvals.progressive = DEFAULT_PROGRESSIVE; - jsvals.baseline = DEFAULT_BASELINE; - jsvals.subsmp = DEFAULT_SUBSMP; - jsvals.restart = DEFAULT_RESTART; - jsvals.dct = DEFAULT_DCT; - jsvals.preview = DEFAULT_PREVIEW; - + jsvals.baseline = DEFAULT_BASELINE; + jsvals.subsmp = DEFAULT_SUBSMP; + jsvals.restart = DEFAULT_RESTART; + jsvals.dct = DEFAULT_DCT; + jsvals.preview = DEFAULT_PREVIEW; + switch (run_mode) { case RUN_INTERACTIVE: @@ -478,7 +474,8 @@ run (char *name, #ifdef GIMP_HAVE_PARASITES /* load up the previously used values */ - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -493,7 +490,7 @@ run (char *name, parasite_free(parasite); } #endif /* GIMP_HAVE_PARASITES */ - + /* we start an undo_group and immediately freeze undo saving so that we can avoid sucking up tile cache with our unneeded preview steps. */ @@ -513,7 +510,7 @@ run (char *name, gimp_undo_push_group_end (image_ID); if (!err) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -521,8 +518,10 @@ run (char *name, /* pw - added two more progressive and comment */ /* sg - added subsampling, preview, baseline, restarts and DCT */ if (nparams != 14) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { jsvals.quality = param[5].data.d_float; jsvals.smoothing = param[6].data.d_float; @@ -540,26 +539,24 @@ run (char *name, if (image_comment) g_free (image_comment); image_comment = g_strdup (param[9].data.d_string); + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.subsmp < 0 || jsvals.subsmp > 2) + status = STATUS_CALLING_ERROR; + else if (jsvals.dct < 0 || jsvals.dct > 2) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.subsmp < 0 || jsvals.subsmp > 2)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.dct < 0 || jsvals.dct > 2)) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ gimp_get_data ("file_jpeg_save", &jsvals); #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -580,26 +577,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID, - FALSE)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID, + FALSE)) + { + /* Store mvals data */ + gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) { /* If the image was exported, delete the new display. */ /* This also deletes the image. */ - + if (display_ID > -1) gimp_display_delete (display_ID); else @@ -607,7 +606,6 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - /* pw - now we need to change the defaults to be whatever * was used to save this image. Dump the old parasites * and add new ones. */ @@ -627,14 +625,18 @@ run (char *name, parasite = parasite_new ("jpeg-save-options", 0, sizeof (jsvals), &jsvals); gimp_image_parasite_attach (orig_image_ID, parasite); parasite_free (parasite); - #endif /* Have Parasites */ } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - /* Read next byte */ -static unsigned int +static guint jpeg_getc (j_decompress_ptr cinfo) { struct jpeg_source_mgr * datasrc = cinfo->src; @@ -889,7 +891,8 @@ load_image (char *filename, } else { - image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, image_type); + image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, + image_type); gimp_image_set_filename (image_ID, filename); } @@ -899,7 +902,7 @@ load_image (char *filename, cinfo.output_width, cinfo.output_height, layer_type, 100, NORMAL_MODE); - } + } else { layer_ID = gimp_layer_new (image_ID, _("Background"), @@ -909,47 +912,49 @@ load_image (char *filename, } drawable_global = drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); - /* Step 5.1: if the file had resolution information, set it on the - * image */ #ifdef GIMP_HAVE_RESOLUTION_INFO + /* Step 5.1: if the file had resolution information, set it on the image */ if (!preview && cinfo.saw_JFIF_marker) - { - float xresolution; - float yresolution; - float asymmetry; + { + gdouble xresolution; + gdouble yresolution; + gdouble asymmetry; - xresolution = cinfo.X_density; - yresolution = cinfo.Y_density; + xresolution = cinfo.X_density; + yresolution = cinfo.Y_density; - switch (cinfo.density_unit) - { - case 0: /* unknown */ - asymmetry = xresolution / yresolution; - xresolution = 72 * asymmetry; - yresolution = 72; - break; - - case 1: /* dots per inch */ - break; + switch (cinfo.density_unit) + { + case 0: /* unknown -> set the aspect ratio but use the default + * image resolution + */ + asymmetry = xresolution / yresolution; + gimp_image_get_resolution (image_ID, &xresolution, &yresolution); + xresolution *= asymmetry; + break; - case 2: /* dots per cm */ - xresolution *= 2.54; - yresolution *= 2.54; - break; + case 1: /* dots per inch */ + break; - default: - g_message ("unknown density unit %d\nassuming dots per inch", - cinfo.density_unit); - break; - } + case 2: /* dots per cm */ + xresolution *= 2.54; + yresolution *= 2.54; + gimp_image_set_unit (image_ID, UNIT_MM); + break; - gimp_image_set_resolution (image_ID, xresolution, yresolution); - } + default: + g_message ("unknown density unit %d\nassuming dots per inch", + cinfo.density_unit); + break; + } + + gimp_image_set_resolution (image_ID, xresolution, yresolution); + } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ @@ -1345,20 +1350,36 @@ save_image (char *filename, #ifdef GIMP_HAVE_RESOLUTION_INFO { - double xresolution; - double yresolution; + gdouble xresolution; + gdouble yresolution; gimp_image_get_resolution (orig_image_ID, &xresolution, &yresolution); if (xresolution > 1e-5 && yresolution > 1e-5) { - cinfo.density_unit = 1; /* dots per inch */ + gdouble factor; + + factor = gimp_unit_get_factor (gimp_image_get_unit (orig_image_ID)); + + if (factor == 2.54 /* cm */ || + factor == 25.4 /* mm */) + { + cinfo.density_unit = 2; /* dots per cm */ + + xresolution /= 2.54; + yresolution /= 2.54; + } + else + { + cinfo.density_unit = 1; /* dots per inch */ + } + cinfo.X_density = xresolution; cinfo.Y_density = yresolution; } } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - + /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. @@ -1526,7 +1547,7 @@ static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback) + GtkSignalFunc callback) { GtkWidget *menu_item = gtk_menu_item_new_with_label (label); gtk_container_add (GTK_CONTAINER (menu), menu_item); diff --git a/plug-ins/jpeg/jpeg-save.c b/plug-ins/jpeg/jpeg-save.c index 09e6569ffb..d25d1cbfa4 100644 --- a/plug-ins/jpeg/jpeg-save.c +++ b/plug-ins/jpeg/jpeg-save.c @@ -164,21 +164,21 @@ #define DEFAULT_COMMENT "Created with The GIMP" /* sg - these should not be global... */ -gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; -GtkWidget *preview_size = NULL; -GDrawable *drawable_global = NULL; +static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; +static GtkWidget *preview_size = NULL; +static GDrawable *drawable_global = NULL; typedef struct { gdouble quality; gdouble smoothing; - gint optimize; - gint progressive; - gint baseline; - gint subsmp; - gint restart; - gint dct; - gint preview; + gint optimize; + gint progressive; + gint baseline; + gint subsmp; + gint restart; + gint dct; + gint preview; } JpegSaveVals; typedef struct @@ -189,25 +189,21 @@ typedef struct typedef struct { struct jpeg_compress_struct cinfo; - gint tile_height; - FILE *outfile; - gint has_alpha; - gint rowstride; - guchar *temp; - guchar *data; - guchar *src; + gint tile_height; + FILE *outfile; + gint has_alpha; + gint rowstride; + guchar *temp; + guchar *data; + guchar *src; GDrawable *drawable; - GPixelRgn pixel_rgn; - char *file_name; - - gint abort_me; + GPixelRgn pixel_rgn; + gchar *file_name; + gint abort_me; } preview_persistent; gint *abort_me = NULL; -typedef void (*MenuItemCallback) (GtkWidget *widget, - gpointer user_data); - /* Declare local functions. */ static void query (void); @@ -228,7 +224,7 @@ static gint save_image (gchar *filename, static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback); + GtkSignalFunc callback); static void init_gtk (void); static gint save_dialog (void); @@ -263,10 +259,10 @@ static void dct_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static JpegSaveVals jsvals = @@ -295,7 +291,7 @@ static GtkWidget *restart_markers_label = NULL; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -307,8 +303,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -327,7 +324,7 @@ query () { PARAM_INT32, "restart", "Frequency of restart markers (in rows, 0 = no restart markers)" }, { PARAM_INT32, "dct", "DCT algorithm to use (speed/quality tradeoff)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -355,41 +352,41 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_jpeg_load", "jpg,jpeg", "", "6,string,JFIF"); - gimp_register_save_handler ("file_jpeg_save", "jpg,jpeg", ""); + gimp_register_magic_load_handler ("file_jpeg_load", + "jpg,jpeg", + "", + "6,string,JFIF"); + gimp_register_save_handler ("file_jpeg_save", + "jpg,jpeg", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; - gint32 display_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; + gint32 display_ID = -1; #ifdef GIMP_HAVE_PARASITES - Parasite *parasite; + Parasite *parasite; #endif /* GIMP_HAVE_PARASITES */ - int err; + gint err; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - -#if 0 - printf ("JPEG: Waiting (pid %d)...\n", getpid()); - kill (getpid(), SIGSTOP); -#endif + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_jpeg_load") == 0) { @@ -400,13 +397,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_jpeg_save") == 0) @@ -423,7 +419,8 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "JPEG", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); switch (export) { case EXPORT_EXPORT: @@ -434,8 +431,7 @@ run (char *name, case EXPORT_IGNORE: break; case EXPORT_CANCEL: - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; break; } @@ -443,7 +439,7 @@ run (char *name, default: break; } - + if (image_comment) { g_free (image_comment); @@ -460,16 +456,16 @@ run (char *name, if (!image_comment) image_comment = g_strdup (DEFAULT_COMMENT); - jsvals.quality = DEFAULT_QUALITY; - jsvals.smoothing = DEFAULT_SMOOTHING; - jsvals.optimize = DEFAULT_OPTIMIZE; + jsvals.quality = DEFAULT_QUALITY; + jsvals.smoothing = DEFAULT_SMOOTHING; + jsvals.optimize = DEFAULT_OPTIMIZE; jsvals.progressive = DEFAULT_PROGRESSIVE; - jsvals.baseline = DEFAULT_BASELINE; - jsvals.subsmp = DEFAULT_SUBSMP; - jsvals.restart = DEFAULT_RESTART; - jsvals.dct = DEFAULT_DCT; - jsvals.preview = DEFAULT_PREVIEW; - + jsvals.baseline = DEFAULT_BASELINE; + jsvals.subsmp = DEFAULT_SUBSMP; + jsvals.restart = DEFAULT_RESTART; + jsvals.dct = DEFAULT_DCT; + jsvals.preview = DEFAULT_PREVIEW; + switch (run_mode) { case RUN_INTERACTIVE: @@ -478,7 +474,8 @@ run (char *name, #ifdef GIMP_HAVE_PARASITES /* load up the previously used values */ - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -493,7 +490,7 @@ run (char *name, parasite_free(parasite); } #endif /* GIMP_HAVE_PARASITES */ - + /* we start an undo_group and immediately freeze undo saving so that we can avoid sucking up tile cache with our unneeded preview steps. */ @@ -513,7 +510,7 @@ run (char *name, gimp_undo_push_group_end (image_ID); if (!err) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -521,8 +518,10 @@ run (char *name, /* pw - added two more progressive and comment */ /* sg - added subsampling, preview, baseline, restarts and DCT */ if (nparams != 14) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { jsvals.quality = param[5].data.d_float; jsvals.smoothing = param[6].data.d_float; @@ -540,26 +539,24 @@ run (char *name, if (image_comment) g_free (image_comment); image_comment = g_strdup (param[9].data.d_string); + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.subsmp < 0 || jsvals.subsmp > 2) + status = STATUS_CALLING_ERROR; + else if (jsvals.dct < 0 || jsvals.dct > 2) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.subsmp < 0 || jsvals.subsmp > 2)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.dct < 0 || jsvals.dct > 2)) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ gimp_get_data ("file_jpeg_save", &jsvals); #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -580,26 +577,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID, - FALSE)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID, + FALSE)) + { + /* Store mvals data */ + gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) { /* If the image was exported, delete the new display. */ /* This also deletes the image. */ - + if (display_ID > -1) gimp_display_delete (display_ID); else @@ -607,7 +606,6 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - /* pw - now we need to change the defaults to be whatever * was used to save this image. Dump the old parasites * and add new ones. */ @@ -627,14 +625,18 @@ run (char *name, parasite = parasite_new ("jpeg-save-options", 0, sizeof (jsvals), &jsvals); gimp_image_parasite_attach (orig_image_ID, parasite); parasite_free (parasite); - #endif /* Have Parasites */ } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - /* Read next byte */ -static unsigned int +static guint jpeg_getc (j_decompress_ptr cinfo) { struct jpeg_source_mgr * datasrc = cinfo->src; @@ -889,7 +891,8 @@ load_image (char *filename, } else { - image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, image_type); + image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, + image_type); gimp_image_set_filename (image_ID, filename); } @@ -899,7 +902,7 @@ load_image (char *filename, cinfo.output_width, cinfo.output_height, layer_type, 100, NORMAL_MODE); - } + } else { layer_ID = gimp_layer_new (image_ID, _("Background"), @@ -909,47 +912,49 @@ load_image (char *filename, } drawable_global = drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); - /* Step 5.1: if the file had resolution information, set it on the - * image */ #ifdef GIMP_HAVE_RESOLUTION_INFO + /* Step 5.1: if the file had resolution information, set it on the image */ if (!preview && cinfo.saw_JFIF_marker) - { - float xresolution; - float yresolution; - float asymmetry; + { + gdouble xresolution; + gdouble yresolution; + gdouble asymmetry; - xresolution = cinfo.X_density; - yresolution = cinfo.Y_density; + xresolution = cinfo.X_density; + yresolution = cinfo.Y_density; - switch (cinfo.density_unit) - { - case 0: /* unknown */ - asymmetry = xresolution / yresolution; - xresolution = 72 * asymmetry; - yresolution = 72; - break; - - case 1: /* dots per inch */ - break; + switch (cinfo.density_unit) + { + case 0: /* unknown -> set the aspect ratio but use the default + * image resolution + */ + asymmetry = xresolution / yresolution; + gimp_image_get_resolution (image_ID, &xresolution, &yresolution); + xresolution *= asymmetry; + break; - case 2: /* dots per cm */ - xresolution *= 2.54; - yresolution *= 2.54; - break; + case 1: /* dots per inch */ + break; - default: - g_message ("unknown density unit %d\nassuming dots per inch", - cinfo.density_unit); - break; - } + case 2: /* dots per cm */ + xresolution *= 2.54; + yresolution *= 2.54; + gimp_image_set_unit (image_ID, UNIT_MM); + break; - gimp_image_set_resolution (image_ID, xresolution, yresolution); - } + default: + g_message ("unknown density unit %d\nassuming dots per inch", + cinfo.density_unit); + break; + } + + gimp_image_set_resolution (image_ID, xresolution, yresolution); + } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ @@ -1345,20 +1350,36 @@ save_image (char *filename, #ifdef GIMP_HAVE_RESOLUTION_INFO { - double xresolution; - double yresolution; + gdouble xresolution; + gdouble yresolution; gimp_image_get_resolution (orig_image_ID, &xresolution, &yresolution); if (xresolution > 1e-5 && yresolution > 1e-5) { - cinfo.density_unit = 1; /* dots per inch */ + gdouble factor; + + factor = gimp_unit_get_factor (gimp_image_get_unit (orig_image_ID)); + + if (factor == 2.54 /* cm */ || + factor == 25.4 /* mm */) + { + cinfo.density_unit = 2; /* dots per cm */ + + xresolution /= 2.54; + yresolution /= 2.54; + } + else + { + cinfo.density_unit = 1; /* dots per inch */ + } + cinfo.X_density = xresolution; cinfo.Y_density = yresolution; } } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - + /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. @@ -1526,7 +1547,7 @@ static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback) + GtkSignalFunc callback) { GtkWidget *menu_item = gtk_menu_item_new_with_label (label); gtk_container_add (GTK_CONTAINER (menu), menu_item); diff --git a/plug-ins/jpeg/jpeg-save.h b/plug-ins/jpeg/jpeg-save.h index 09e6569ffb..d25d1cbfa4 100644 --- a/plug-ins/jpeg/jpeg-save.h +++ b/plug-ins/jpeg/jpeg-save.h @@ -164,21 +164,21 @@ #define DEFAULT_COMMENT "Created with The GIMP" /* sg - these should not be global... */ -gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; -GtkWidget *preview_size = NULL; -GDrawable *drawable_global = NULL; +static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; +static GtkWidget *preview_size = NULL; +static GDrawable *drawable_global = NULL; typedef struct { gdouble quality; gdouble smoothing; - gint optimize; - gint progressive; - gint baseline; - gint subsmp; - gint restart; - gint dct; - gint preview; + gint optimize; + gint progressive; + gint baseline; + gint subsmp; + gint restart; + gint dct; + gint preview; } JpegSaveVals; typedef struct @@ -189,25 +189,21 @@ typedef struct typedef struct { struct jpeg_compress_struct cinfo; - gint tile_height; - FILE *outfile; - gint has_alpha; - gint rowstride; - guchar *temp; - guchar *data; - guchar *src; + gint tile_height; + FILE *outfile; + gint has_alpha; + gint rowstride; + guchar *temp; + guchar *data; + guchar *src; GDrawable *drawable; - GPixelRgn pixel_rgn; - char *file_name; - - gint abort_me; + GPixelRgn pixel_rgn; + gchar *file_name; + gint abort_me; } preview_persistent; gint *abort_me = NULL; -typedef void (*MenuItemCallback) (GtkWidget *widget, - gpointer user_data); - /* Declare local functions. */ static void query (void); @@ -228,7 +224,7 @@ static gint save_image (gchar *filename, static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback); + GtkSignalFunc callback); static void init_gtk (void); static gint save_dialog (void); @@ -263,10 +259,10 @@ static void dct_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static JpegSaveVals jsvals = @@ -295,7 +291,7 @@ static GtkWidget *restart_markers_label = NULL; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -307,8 +303,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -327,7 +324,7 @@ query () { PARAM_INT32, "restart", "Frequency of restart markers (in rows, 0 = no restart markers)" }, { PARAM_INT32, "dct", "DCT algorithm to use (speed/quality tradeoff)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -355,41 +352,41 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_jpeg_load", "jpg,jpeg", "", "6,string,JFIF"); - gimp_register_save_handler ("file_jpeg_save", "jpg,jpeg", ""); + gimp_register_magic_load_handler ("file_jpeg_load", + "jpg,jpeg", + "", + "6,string,JFIF"); + gimp_register_save_handler ("file_jpeg_save", + "jpg,jpeg", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; - gint32 display_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; + gint32 display_ID = -1; #ifdef GIMP_HAVE_PARASITES - Parasite *parasite; + Parasite *parasite; #endif /* GIMP_HAVE_PARASITES */ - int err; + gint err; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - -#if 0 - printf ("JPEG: Waiting (pid %d)...\n", getpid()); - kill (getpid(), SIGSTOP); -#endif + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_jpeg_load") == 0) { @@ -400,13 +397,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_jpeg_save") == 0) @@ -423,7 +419,8 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "JPEG", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); switch (export) { case EXPORT_EXPORT: @@ -434,8 +431,7 @@ run (char *name, case EXPORT_IGNORE: break; case EXPORT_CANCEL: - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; break; } @@ -443,7 +439,7 @@ run (char *name, default: break; } - + if (image_comment) { g_free (image_comment); @@ -460,16 +456,16 @@ run (char *name, if (!image_comment) image_comment = g_strdup (DEFAULT_COMMENT); - jsvals.quality = DEFAULT_QUALITY; - jsvals.smoothing = DEFAULT_SMOOTHING; - jsvals.optimize = DEFAULT_OPTIMIZE; + jsvals.quality = DEFAULT_QUALITY; + jsvals.smoothing = DEFAULT_SMOOTHING; + jsvals.optimize = DEFAULT_OPTIMIZE; jsvals.progressive = DEFAULT_PROGRESSIVE; - jsvals.baseline = DEFAULT_BASELINE; - jsvals.subsmp = DEFAULT_SUBSMP; - jsvals.restart = DEFAULT_RESTART; - jsvals.dct = DEFAULT_DCT; - jsvals.preview = DEFAULT_PREVIEW; - + jsvals.baseline = DEFAULT_BASELINE; + jsvals.subsmp = DEFAULT_SUBSMP; + jsvals.restart = DEFAULT_RESTART; + jsvals.dct = DEFAULT_DCT; + jsvals.preview = DEFAULT_PREVIEW; + switch (run_mode) { case RUN_INTERACTIVE: @@ -478,7 +474,8 @@ run (char *name, #ifdef GIMP_HAVE_PARASITES /* load up the previously used values */ - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -493,7 +490,7 @@ run (char *name, parasite_free(parasite); } #endif /* GIMP_HAVE_PARASITES */ - + /* we start an undo_group and immediately freeze undo saving so that we can avoid sucking up tile cache with our unneeded preview steps. */ @@ -513,7 +510,7 @@ run (char *name, gimp_undo_push_group_end (image_ID); if (!err) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -521,8 +518,10 @@ run (char *name, /* pw - added two more progressive and comment */ /* sg - added subsampling, preview, baseline, restarts and DCT */ if (nparams != 14) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { jsvals.quality = param[5].data.d_float; jsvals.smoothing = param[6].data.d_float; @@ -540,26 +539,24 @@ run (char *name, if (image_comment) g_free (image_comment); image_comment = g_strdup (param[9].data.d_string); + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.subsmp < 0 || jsvals.subsmp > 2) + status = STATUS_CALLING_ERROR; + else if (jsvals.dct < 0 || jsvals.dct > 2) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.subsmp < 0 || jsvals.subsmp > 2)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.dct < 0 || jsvals.dct > 2)) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ gimp_get_data ("file_jpeg_save", &jsvals); #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -580,26 +577,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID, - FALSE)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID, + FALSE)) + { + /* Store mvals data */ + gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) { /* If the image was exported, delete the new display. */ /* This also deletes the image. */ - + if (display_ID > -1) gimp_display_delete (display_ID); else @@ -607,7 +606,6 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - /* pw - now we need to change the defaults to be whatever * was used to save this image. Dump the old parasites * and add new ones. */ @@ -627,14 +625,18 @@ run (char *name, parasite = parasite_new ("jpeg-save-options", 0, sizeof (jsvals), &jsvals); gimp_image_parasite_attach (orig_image_ID, parasite); parasite_free (parasite); - #endif /* Have Parasites */ } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - /* Read next byte */ -static unsigned int +static guint jpeg_getc (j_decompress_ptr cinfo) { struct jpeg_source_mgr * datasrc = cinfo->src; @@ -889,7 +891,8 @@ load_image (char *filename, } else { - image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, image_type); + image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, + image_type); gimp_image_set_filename (image_ID, filename); } @@ -899,7 +902,7 @@ load_image (char *filename, cinfo.output_width, cinfo.output_height, layer_type, 100, NORMAL_MODE); - } + } else { layer_ID = gimp_layer_new (image_ID, _("Background"), @@ -909,47 +912,49 @@ load_image (char *filename, } drawable_global = drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); - /* Step 5.1: if the file had resolution information, set it on the - * image */ #ifdef GIMP_HAVE_RESOLUTION_INFO + /* Step 5.1: if the file had resolution information, set it on the image */ if (!preview && cinfo.saw_JFIF_marker) - { - float xresolution; - float yresolution; - float asymmetry; + { + gdouble xresolution; + gdouble yresolution; + gdouble asymmetry; - xresolution = cinfo.X_density; - yresolution = cinfo.Y_density; + xresolution = cinfo.X_density; + yresolution = cinfo.Y_density; - switch (cinfo.density_unit) - { - case 0: /* unknown */ - asymmetry = xresolution / yresolution; - xresolution = 72 * asymmetry; - yresolution = 72; - break; - - case 1: /* dots per inch */ - break; + switch (cinfo.density_unit) + { + case 0: /* unknown -> set the aspect ratio but use the default + * image resolution + */ + asymmetry = xresolution / yresolution; + gimp_image_get_resolution (image_ID, &xresolution, &yresolution); + xresolution *= asymmetry; + break; - case 2: /* dots per cm */ - xresolution *= 2.54; - yresolution *= 2.54; - break; + case 1: /* dots per inch */ + break; - default: - g_message ("unknown density unit %d\nassuming dots per inch", - cinfo.density_unit); - break; - } + case 2: /* dots per cm */ + xresolution *= 2.54; + yresolution *= 2.54; + gimp_image_set_unit (image_ID, UNIT_MM); + break; - gimp_image_set_resolution (image_ID, xresolution, yresolution); - } + default: + g_message ("unknown density unit %d\nassuming dots per inch", + cinfo.density_unit); + break; + } + + gimp_image_set_resolution (image_ID, xresolution, yresolution); + } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ @@ -1345,20 +1350,36 @@ save_image (char *filename, #ifdef GIMP_HAVE_RESOLUTION_INFO { - double xresolution; - double yresolution; + gdouble xresolution; + gdouble yresolution; gimp_image_get_resolution (orig_image_ID, &xresolution, &yresolution); if (xresolution > 1e-5 && yresolution > 1e-5) { - cinfo.density_unit = 1; /* dots per inch */ + gdouble factor; + + factor = gimp_unit_get_factor (gimp_image_get_unit (orig_image_ID)); + + if (factor == 2.54 /* cm */ || + factor == 25.4 /* mm */) + { + cinfo.density_unit = 2; /* dots per cm */ + + xresolution /= 2.54; + yresolution /= 2.54; + } + else + { + cinfo.density_unit = 1; /* dots per inch */ + } + cinfo.X_density = xresolution; cinfo.Y_density = yresolution; } } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - + /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. @@ -1526,7 +1547,7 @@ static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback) + GtkSignalFunc callback) { GtkWidget *menu_item = gtk_menu_item_new_with_label (label); gtk_container_add (GTK_CONTAINER (menu), menu_item); diff --git a/plug-ins/jpeg/jpeg.c b/plug-ins/jpeg/jpeg.c index 09e6569ffb..d25d1cbfa4 100644 --- a/plug-ins/jpeg/jpeg.c +++ b/plug-ins/jpeg/jpeg.c @@ -164,21 +164,21 @@ #define DEFAULT_COMMENT "Created with The GIMP" /* sg - these should not be global... */ -gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; -GtkWidget *preview_size = NULL; -GDrawable *drawable_global = NULL; +static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; +static GtkWidget *preview_size = NULL; +static GDrawable *drawable_global = NULL; typedef struct { gdouble quality; gdouble smoothing; - gint optimize; - gint progressive; - gint baseline; - gint subsmp; - gint restart; - gint dct; - gint preview; + gint optimize; + gint progressive; + gint baseline; + gint subsmp; + gint restart; + gint dct; + gint preview; } JpegSaveVals; typedef struct @@ -189,25 +189,21 @@ typedef struct typedef struct { struct jpeg_compress_struct cinfo; - gint tile_height; - FILE *outfile; - gint has_alpha; - gint rowstride; - guchar *temp; - guchar *data; - guchar *src; + gint tile_height; + FILE *outfile; + gint has_alpha; + gint rowstride; + guchar *temp; + guchar *data; + guchar *src; GDrawable *drawable; - GPixelRgn pixel_rgn; - char *file_name; - - gint abort_me; + GPixelRgn pixel_rgn; + gchar *file_name; + gint abort_me; } preview_persistent; gint *abort_me = NULL; -typedef void (*MenuItemCallback) (GtkWidget *widget, - gpointer user_data); - /* Declare local functions. */ static void query (void); @@ -228,7 +224,7 @@ static gint save_image (gchar *filename, static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback); + GtkSignalFunc callback); static void init_gtk (void); static gint save_dialog (void); @@ -263,10 +259,10 @@ static void dct_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static JpegSaveVals jsvals = @@ -295,7 +291,7 @@ static GtkWidget *restart_markers_label = NULL; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -307,8 +303,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -327,7 +324,7 @@ query () { PARAM_INT32, "restart", "Frequency of restart markers (in rows, 0 = no restart markers)" }, { PARAM_INT32, "dct", "DCT algorithm to use (speed/quality tradeoff)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -355,41 +352,41 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_jpeg_load", "jpg,jpeg", "", "6,string,JFIF"); - gimp_register_save_handler ("file_jpeg_save", "jpg,jpeg", ""); + gimp_register_magic_load_handler ("file_jpeg_load", + "jpg,jpeg", + "", + "6,string,JFIF"); + gimp_register_save_handler ("file_jpeg_save", + "jpg,jpeg", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; - gint32 display_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; + gint32 display_ID = -1; #ifdef GIMP_HAVE_PARASITES - Parasite *parasite; + Parasite *parasite; #endif /* GIMP_HAVE_PARASITES */ - int err; + gint err; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - -#if 0 - printf ("JPEG: Waiting (pid %d)...\n", getpid()); - kill (getpid(), SIGSTOP); -#endif + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_jpeg_load") == 0) { @@ -400,13 +397,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_jpeg_save") == 0) @@ -423,7 +419,8 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "JPEG", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); switch (export) { case EXPORT_EXPORT: @@ -434,8 +431,7 @@ run (char *name, case EXPORT_IGNORE: break; case EXPORT_CANCEL: - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; break; } @@ -443,7 +439,7 @@ run (char *name, default: break; } - + if (image_comment) { g_free (image_comment); @@ -460,16 +456,16 @@ run (char *name, if (!image_comment) image_comment = g_strdup (DEFAULT_COMMENT); - jsvals.quality = DEFAULT_QUALITY; - jsvals.smoothing = DEFAULT_SMOOTHING; - jsvals.optimize = DEFAULT_OPTIMIZE; + jsvals.quality = DEFAULT_QUALITY; + jsvals.smoothing = DEFAULT_SMOOTHING; + jsvals.optimize = DEFAULT_OPTIMIZE; jsvals.progressive = DEFAULT_PROGRESSIVE; - jsvals.baseline = DEFAULT_BASELINE; - jsvals.subsmp = DEFAULT_SUBSMP; - jsvals.restart = DEFAULT_RESTART; - jsvals.dct = DEFAULT_DCT; - jsvals.preview = DEFAULT_PREVIEW; - + jsvals.baseline = DEFAULT_BASELINE; + jsvals.subsmp = DEFAULT_SUBSMP; + jsvals.restart = DEFAULT_RESTART; + jsvals.dct = DEFAULT_DCT; + jsvals.preview = DEFAULT_PREVIEW; + switch (run_mode) { case RUN_INTERACTIVE: @@ -478,7 +474,8 @@ run (char *name, #ifdef GIMP_HAVE_PARASITES /* load up the previously used values */ - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -493,7 +490,7 @@ run (char *name, parasite_free(parasite); } #endif /* GIMP_HAVE_PARASITES */ - + /* we start an undo_group and immediately freeze undo saving so that we can avoid sucking up tile cache with our unneeded preview steps. */ @@ -513,7 +510,7 @@ run (char *name, gimp_undo_push_group_end (image_ID); if (!err) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -521,8 +518,10 @@ run (char *name, /* pw - added two more progressive and comment */ /* sg - added subsampling, preview, baseline, restarts and DCT */ if (nparams != 14) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { jsvals.quality = param[5].data.d_float; jsvals.smoothing = param[6].data.d_float; @@ -540,26 +539,24 @@ run (char *name, if (image_comment) g_free (image_comment); image_comment = g_strdup (param[9].data.d_string); + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.subsmp < 0 || jsvals.subsmp > 2) + status = STATUS_CALLING_ERROR; + else if (jsvals.dct < 0 || jsvals.dct > 2) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.subsmp < 0 || jsvals.subsmp > 2)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.dct < 0 || jsvals.dct > 2)) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ gimp_get_data ("file_jpeg_save", &jsvals); #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -580,26 +577,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID, - FALSE)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID, + FALSE)) + { + /* Store mvals data */ + gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) { /* If the image was exported, delete the new display. */ /* This also deletes the image. */ - + if (display_ID > -1) gimp_display_delete (display_ID); else @@ -607,7 +606,6 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - /* pw - now we need to change the defaults to be whatever * was used to save this image. Dump the old parasites * and add new ones. */ @@ -627,14 +625,18 @@ run (char *name, parasite = parasite_new ("jpeg-save-options", 0, sizeof (jsvals), &jsvals); gimp_image_parasite_attach (orig_image_ID, parasite); parasite_free (parasite); - #endif /* Have Parasites */ } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - /* Read next byte */ -static unsigned int +static guint jpeg_getc (j_decompress_ptr cinfo) { struct jpeg_source_mgr * datasrc = cinfo->src; @@ -889,7 +891,8 @@ load_image (char *filename, } else { - image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, image_type); + image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, + image_type); gimp_image_set_filename (image_ID, filename); } @@ -899,7 +902,7 @@ load_image (char *filename, cinfo.output_width, cinfo.output_height, layer_type, 100, NORMAL_MODE); - } + } else { layer_ID = gimp_layer_new (image_ID, _("Background"), @@ -909,47 +912,49 @@ load_image (char *filename, } drawable_global = drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); - /* Step 5.1: if the file had resolution information, set it on the - * image */ #ifdef GIMP_HAVE_RESOLUTION_INFO + /* Step 5.1: if the file had resolution information, set it on the image */ if (!preview && cinfo.saw_JFIF_marker) - { - float xresolution; - float yresolution; - float asymmetry; + { + gdouble xresolution; + gdouble yresolution; + gdouble asymmetry; - xresolution = cinfo.X_density; - yresolution = cinfo.Y_density; + xresolution = cinfo.X_density; + yresolution = cinfo.Y_density; - switch (cinfo.density_unit) - { - case 0: /* unknown */ - asymmetry = xresolution / yresolution; - xresolution = 72 * asymmetry; - yresolution = 72; - break; - - case 1: /* dots per inch */ - break; + switch (cinfo.density_unit) + { + case 0: /* unknown -> set the aspect ratio but use the default + * image resolution + */ + asymmetry = xresolution / yresolution; + gimp_image_get_resolution (image_ID, &xresolution, &yresolution); + xresolution *= asymmetry; + break; - case 2: /* dots per cm */ - xresolution *= 2.54; - yresolution *= 2.54; - break; + case 1: /* dots per inch */ + break; - default: - g_message ("unknown density unit %d\nassuming dots per inch", - cinfo.density_unit); - break; - } + case 2: /* dots per cm */ + xresolution *= 2.54; + yresolution *= 2.54; + gimp_image_set_unit (image_ID, UNIT_MM); + break; - gimp_image_set_resolution (image_ID, xresolution, yresolution); - } + default: + g_message ("unknown density unit %d\nassuming dots per inch", + cinfo.density_unit); + break; + } + + gimp_image_set_resolution (image_ID, xresolution, yresolution); + } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ @@ -1345,20 +1350,36 @@ save_image (char *filename, #ifdef GIMP_HAVE_RESOLUTION_INFO { - double xresolution; - double yresolution; + gdouble xresolution; + gdouble yresolution; gimp_image_get_resolution (orig_image_ID, &xresolution, &yresolution); if (xresolution > 1e-5 && yresolution > 1e-5) { - cinfo.density_unit = 1; /* dots per inch */ + gdouble factor; + + factor = gimp_unit_get_factor (gimp_image_get_unit (orig_image_ID)); + + if (factor == 2.54 /* cm */ || + factor == 25.4 /* mm */) + { + cinfo.density_unit = 2; /* dots per cm */ + + xresolution /= 2.54; + yresolution /= 2.54; + } + else + { + cinfo.density_unit = 1; /* dots per inch */ + } + cinfo.X_density = xresolution; cinfo.Y_density = yresolution; } } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - + /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. @@ -1526,7 +1547,7 @@ static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback) + GtkSignalFunc callback) { GtkWidget *menu_item = gtk_menu_item_new_with_label (label); gtk_container_add (GTK_CONTAINER (menu), menu_item); diff --git a/plug-ins/jpeg/jpeg.h b/plug-ins/jpeg/jpeg.h index 09e6569ffb..d25d1cbfa4 100644 --- a/plug-ins/jpeg/jpeg.h +++ b/plug-ins/jpeg/jpeg.h @@ -164,21 +164,21 @@ #define DEFAULT_COMMENT "Created with The GIMP" /* sg - these should not be global... */ -gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; -GtkWidget *preview_size = NULL; -GDrawable *drawable_global = NULL; +static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; +static GtkWidget *preview_size = NULL; +static GDrawable *drawable_global = NULL; typedef struct { gdouble quality; gdouble smoothing; - gint optimize; - gint progressive; - gint baseline; - gint subsmp; - gint restart; - gint dct; - gint preview; + gint optimize; + gint progressive; + gint baseline; + gint subsmp; + gint restart; + gint dct; + gint preview; } JpegSaveVals; typedef struct @@ -189,25 +189,21 @@ typedef struct typedef struct { struct jpeg_compress_struct cinfo; - gint tile_height; - FILE *outfile; - gint has_alpha; - gint rowstride; - guchar *temp; - guchar *data; - guchar *src; + gint tile_height; + FILE *outfile; + gint has_alpha; + gint rowstride; + guchar *temp; + guchar *data; + guchar *src; GDrawable *drawable; - GPixelRgn pixel_rgn; - char *file_name; - - gint abort_me; + GPixelRgn pixel_rgn; + gchar *file_name; + gint abort_me; } preview_persistent; gint *abort_me = NULL; -typedef void (*MenuItemCallback) (GtkWidget *widget, - gpointer user_data); - /* Declare local functions. */ static void query (void); @@ -228,7 +224,7 @@ static gint save_image (gchar *filename, static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback); + GtkSignalFunc callback); static void init_gtk (void); static gint save_dialog (void); @@ -263,10 +259,10 @@ static void dct_callback (GtkWidget *widget, GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static JpegSaveVals jsvals = @@ -295,7 +291,7 @@ static GtkWidget *restart_markers_label = NULL; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -307,8 +303,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -327,7 +324,7 @@ query () { PARAM_INT32, "restart", "Frequency of restart markers (in rows, 0 = no restart markers)" }, { PARAM_INT32, "dct", "DCT algorithm to use (speed/quality tradeoff)" } }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N(); @@ -355,41 +352,41 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_jpeg_load", "jpg,jpeg", "", "6,string,JFIF"); - gimp_register_save_handler ("file_jpeg_save", "jpg,jpeg", ""); + gimp_register_magic_load_handler ("file_jpeg_load", + "jpg,jpeg", + "", + "6,string,JFIF"); + gimp_register_save_handler ("file_jpeg_save", + "jpg,jpeg", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - gint32 drawable_ID; - gint32 orig_image_ID; - gint32 display_ID = -1; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + gint32 orig_image_ID; + gint32 display_ID = -1; #ifdef GIMP_HAVE_PARASITES - Parasite *parasite; + Parasite *parasite; #endif /* GIMP_HAVE_PARASITES */ - int err; + gint err; GimpExportReturnType export = EXPORT_CANCEL; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; - -#if 0 - printf ("JPEG: Waiting (pid %d)...\n", getpid()); - kill (getpid(), SIGSTOP); -#endif + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_jpeg_load") == 0) { @@ -400,13 +397,12 @@ run (char *name, if (image_ID != -1) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + status = STATUS_EXECUTION_ERROR; } } else if (strcmp (name, "file_jpeg_save") == 0) @@ -423,7 +419,8 @@ run (char *name, case RUN_WITH_LAST_VALS: init_gtk (); export = gimp_export_image (&image_ID, &drawable_ID, "JPEG", - (CAN_HANDLE_RGB | CAN_HANDLE_GRAY)); + (CAN_HANDLE_RGB | + CAN_HANDLE_GRAY)); switch (export) { case EXPORT_EXPORT: @@ -434,8 +431,7 @@ run (char *name, case EXPORT_IGNORE: break; case EXPORT_CANCEL: - *nreturn_vals = 1; - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; break; } @@ -443,7 +439,7 @@ run (char *name, default: break; } - + if (image_comment) { g_free (image_comment); @@ -460,16 +456,16 @@ run (char *name, if (!image_comment) image_comment = g_strdup (DEFAULT_COMMENT); - jsvals.quality = DEFAULT_QUALITY; - jsvals.smoothing = DEFAULT_SMOOTHING; - jsvals.optimize = DEFAULT_OPTIMIZE; + jsvals.quality = DEFAULT_QUALITY; + jsvals.smoothing = DEFAULT_SMOOTHING; + jsvals.optimize = DEFAULT_OPTIMIZE; jsvals.progressive = DEFAULT_PROGRESSIVE; - jsvals.baseline = DEFAULT_BASELINE; - jsvals.subsmp = DEFAULT_SUBSMP; - jsvals.restart = DEFAULT_RESTART; - jsvals.dct = DEFAULT_DCT; - jsvals.preview = DEFAULT_PREVIEW; - + jsvals.baseline = DEFAULT_BASELINE; + jsvals.subsmp = DEFAULT_SUBSMP; + jsvals.restart = DEFAULT_RESTART; + jsvals.dct = DEFAULT_DCT; + jsvals.preview = DEFAULT_PREVIEW; + switch (run_mode) { case RUN_INTERACTIVE: @@ -478,7 +474,8 @@ run (char *name, #ifdef GIMP_HAVE_PARASITES /* load up the previously used values */ - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -493,7 +490,7 @@ run (char *name, parasite_free(parasite); } #endif /* GIMP_HAVE_PARASITES */ - + /* we start an undo_group and immediately freeze undo saving so that we can avoid sucking up tile cache with our unneeded preview steps. */ @@ -513,7 +510,7 @@ run (char *name, gimp_undo_push_group_end (image_ID); if (!err) - return; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -521,8 +518,10 @@ run (char *name, /* pw - added two more progressive and comment */ /* sg - added subsampling, preview, baseline, restarts and DCT */ if (nparams != 14) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) + { + status = STATUS_CALLING_ERROR; + } + else { jsvals.quality = param[5].data.d_float; jsvals.smoothing = param[6].data.d_float; @@ -540,26 +539,24 @@ run (char *name, if (image_comment) g_free (image_comment); image_comment = g_strdup (param[9].data.d_string); + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + status = STATUS_CALLING_ERROR; + else if (jsvals.subsmp < 0 || jsvals.subsmp > 2) + status = STATUS_CALLING_ERROR; + else if (jsvals.dct < 0 || jsvals.dct > 2) + status = STATUS_CALLING_ERROR; } - if (status == STATUS_SUCCESS && - (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.subsmp < 0 || jsvals.subsmp > 2)) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS && - (jsvals.dct < 0 || jsvals.dct > 2)) - status = STATUS_CALLING_ERROR; break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ gimp_get_data ("file_jpeg_save", &jsvals); #ifdef GIMP_HAVE_PARASITES - parasite = gimp_image_parasite_find (orig_image_ID, "jpeg-save-options"); + parasite = gimp_image_parasite_find (orig_image_ID, + "jpeg-save-options"); if (parasite) { jsvals.quality = ((JpegSaveVals *)parasite->data)->quality; @@ -580,26 +577,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_image (param[3].data.d_string, - image_ID, - drawable_ID, - orig_image_ID, - FALSE)) + if (status == STATUS_SUCCESS) { - /* Store mvals data */ - gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); - - values[0].data.d_status = STATUS_SUCCESS; + if (save_image (param[3].data.d_string, + image_ID, + drawable_ID, + orig_image_ID, + FALSE)) + { + /* Store mvals data */ + gimp_set_data ("file_jpeg_save", &jsvals, sizeof (JpegSaveVals)); + } + else + { + status = STATUS_EXECUTION_ERROR; + } } - else - values[0].data.d_status = STATUS_EXECUTION_ERROR; if (export == EXPORT_EXPORT) { /* If the image was exported, delete the new display. */ /* This also deletes the image. */ - + if (display_ID > -1) gimp_display_delete (display_ID); else @@ -607,7 +606,6 @@ run (char *name, } #ifdef GIMP_HAVE_PARASITES - /* pw - now we need to change the defaults to be whatever * was used to save this image. Dump the old parasites * and add new ones. */ @@ -627,14 +625,18 @@ run (char *name, parasite = parasite_new ("jpeg-save-options", 0, sizeof (jsvals), &jsvals); gimp_image_parasite_attach (orig_image_ID, parasite); parasite_free (parasite); - #endif /* Have Parasites */ } + else + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } - /* Read next byte */ -static unsigned int +static guint jpeg_getc (j_decompress_ptr cinfo) { struct jpeg_source_mgr * datasrc = cinfo->src; @@ -889,7 +891,8 @@ load_image (char *filename, } else { - image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, image_type); + image_ID = gimp_image_new (cinfo.output_width, cinfo.output_height, + image_type); gimp_image_set_filename (image_ID, filename); } @@ -899,7 +902,7 @@ load_image (char *filename, cinfo.output_width, cinfo.output_height, layer_type, 100, NORMAL_MODE); - } + } else { layer_ID = gimp_layer_new (image_ID, _("Background"), @@ -909,47 +912,49 @@ load_image (char *filename, } drawable_global = drawable = gimp_drawable_get (layer_ID); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); + gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); - /* Step 5.1: if the file had resolution information, set it on the - * image */ #ifdef GIMP_HAVE_RESOLUTION_INFO + /* Step 5.1: if the file had resolution information, set it on the image */ if (!preview && cinfo.saw_JFIF_marker) - { - float xresolution; - float yresolution; - float asymmetry; + { + gdouble xresolution; + gdouble yresolution; + gdouble asymmetry; - xresolution = cinfo.X_density; - yresolution = cinfo.Y_density; + xresolution = cinfo.X_density; + yresolution = cinfo.Y_density; - switch (cinfo.density_unit) - { - case 0: /* unknown */ - asymmetry = xresolution / yresolution; - xresolution = 72 * asymmetry; - yresolution = 72; - break; - - case 1: /* dots per inch */ - break; + switch (cinfo.density_unit) + { + case 0: /* unknown -> set the aspect ratio but use the default + * image resolution + */ + asymmetry = xresolution / yresolution; + gimp_image_get_resolution (image_ID, &xresolution, &yresolution); + xresolution *= asymmetry; + break; - case 2: /* dots per cm */ - xresolution *= 2.54; - yresolution *= 2.54; - break; + case 1: /* dots per inch */ + break; - default: - g_message ("unknown density unit %d\nassuming dots per inch", - cinfo.density_unit); - break; - } + case 2: /* dots per cm */ + xresolution *= 2.54; + yresolution *= 2.54; + gimp_image_set_unit (image_ID, UNIT_MM); + break; - gimp_image_set_resolution (image_ID, xresolution, yresolution); - } + default: + g_message ("unknown density unit %d\nassuming dots per inch", + cinfo.density_unit); + break; + } + + gimp_image_set_resolution (image_ID, xresolution, yresolution); + } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ @@ -1345,20 +1350,36 @@ save_image (char *filename, #ifdef GIMP_HAVE_RESOLUTION_INFO { - double xresolution; - double yresolution; + gdouble xresolution; + gdouble yresolution; gimp_image_get_resolution (orig_image_ID, &xresolution, &yresolution); if (xresolution > 1e-5 && yresolution > 1e-5) { - cinfo.density_unit = 1; /* dots per inch */ + gdouble factor; + + factor = gimp_unit_get_factor (gimp_image_get_unit (orig_image_ID)); + + if (factor == 2.54 /* cm */ || + factor == 25.4 /* mm */) + { + cinfo.density_unit = 2; /* dots per cm */ + + xresolution /= 2.54; + yresolution /= 2.54; + } + else + { + cinfo.density_unit = 1; /* dots per inch */ + } + cinfo.X_density = xresolution; cinfo.Y_density = yresolution; } } #endif /* GIMP_HAVE_RESOLUTION_INFO */ - + /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. @@ -1526,7 +1547,7 @@ static void add_menu_item (GtkWidget *menu, char *label, guint op_no, - MenuItemCallback callback) + GtkSignalFunc callback) { GtkWidget *menu_item = gtk_menu_item_new_with_label (label); gtk_container_add (GTK_CONTAINER (menu), menu_item); diff --git a/plug-ins/megawidget/.cvsignore b/plug-ins/megawidget/.cvsignore deleted file mode 100644 index bd835effc8..0000000000 --- a/plug-ins/megawidget/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -Makefile.in -Makefile -.deps -_libs -.libs -megawidget diff --git a/plug-ins/megawidget/Makefile.am b/plug-ins/megawidget/Makefile.am deleted file mode 100644 index 3621a6f9ef..0000000000 --- a/plug-ins/megawidget/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ -## Process this file with automake to produce Makefile.in - -lib_LIBRARIES = libmegawidget.a - -libmegawidget_a_SOURCES = \ - megawidget.c \ - megawidget.h - -INCLUDES = \ - -I$(top_srcdir) \ - $(GTK_CFLAGS) \ - -I$(includedir) - -LDADD = \ - $(top_builddir)/libgimp/libgimp.la \ - $(GTK_LIBS) \ - $(INTLLIBS) - -.PHONY: files - -files: - @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ - echo $$p; \ - done diff --git a/plug-ins/megawidget/megawidget.c b/plug-ins/megawidget/megawidget.c deleted file mode 100644 index c869ef148d..0000000000 --- a/plug-ins/megawidget/megawidget.c +++ /dev/null @@ -1,185 +0,0 @@ -/************************************************** - * file: megawidget/megawidget.c - * - * Copyright (c) 1997 Eric L. Hernes (erich@rrnet.com) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software withough specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $Id$ - */ - -/* Functions added by Xavier Bouchoux (Xavier.Bouchoux@ensimag.imag.fr) - * mw_value_radio_group_new() - * --> it modifies a user variable to a value associated with the current - * button - * mw_ientry_button_new() - * mw_fentry_button_new() - * ---> Guess... - * mw_color_select_button_create() - * --> Creates a colored button, wich creates a colorselection window - * (just like ifs compose) - */ - -#include "config.h" - -#include -#include - -#include - -#include - -#include "libgimp/stdplugins-intl.h" - -#include "megawidget.h" - -static mw_preview_t *mw_do_preview = NULL; - -gint do_preview = TRUE; - -static void -ui_toggle_callback (GtkWidget *widget, - gpointer data) -{ - gint *toggle_val; - - toggle_val = (gint *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; - - if (do_preview && mw_do_preview != NULL) - (* mw_do_preview) (NULL); -} - -struct mwPreview * -mw_preview_build_virgin (GDrawable *drw) -{ - struct mwPreview *mwp; - - mwp = g_new (struct mwPreview, 1); - - if (drw->width > drw->height) - { - mwp->scale = (gdouble) drw->width / (gdouble) PREVIEW_SIZE; - mwp->width = PREVIEW_SIZE; - mwp->height = drw->height / mwp->scale; - } - else - { - mwp->scale = (gdouble) drw->height / (gdouble) PREVIEW_SIZE; - mwp->height = PREVIEW_SIZE; - mwp->width = drw->width / mwp->scale; - } - - mwp->bpp = 3; - mwp->bits = NULL; - - return mwp; -} - -struct mwPreview * -mw_preview_build (GDrawable *drw) -{ - struct mwPreview *mwp; - gint x, y, b; - guchar *bc; - guchar *drwBits; - GPixelRgn pr; - - mwp = mw_preview_build_virgin (drw); - - gimp_pixel_rgn_init (&pr, drw, 0, 0, drw->width, drw->height, FALSE, FALSE); - drwBits = g_new (guchar, drw->width * drw->bpp); - - mwp->bpp = 3; - bc = mwp->bits = g_new (guchar, mwp->width * mwp->height * mwp->bpp); - for (y = 0; y < mwp->height; y++) - { - gimp_pixel_rgn_get_row (&pr, drwBits, 0, (int)(y*mwp->scale), drw->width); - - for (x = 0; x < mwp->width; x++) - { - for (b = 0; b < mwp->bpp; b++) - *bc++ = *(drwBits + - ((gint) (x * mwp->scale) * drw->bpp) + b % drw->bpp); - } - } - g_free (drwBits); - - return mwp; -} - -GtkWidget * -mw_preview_new (GtkWidget *parent, - struct mwPreview *mwp, - mw_preview_t *fcn) -{ - GtkWidget *preview; - GtkWidget *frame; - GtkWidget *pframe; - GtkWidget *vbox; - GtkWidget *button; - guchar *color_cube; - - gtk_preview_set_gamma (gimp_gamma ()); - gtk_preview_set_install_cmap (gimp_install_cmap ()); - color_cube = gimp_color_cube (); - gtk_preview_set_color_cube (color_cube[0], color_cube[1], - color_cube[2], color_cube[3]); - - gtk_widget_set_default_visual (gtk_preview_get_visual ()); - gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); - - frame = gtk_frame_new (_("Preview")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (parent), frame, FALSE, FALSE, 0); - gtk_widget_show (frame); - - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); - gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_widget_show (vbox); - - pframe = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME(pframe), GTK_SHADOW_IN); - gtk_container_border_width (GTK_CONTAINER (pframe), 3); - gtk_box_pack_start (GTK_BOX (vbox), pframe, FALSE, FALSE, 0); - gtk_widget_show (pframe); - - preview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (preview), mwp->width, mwp->height); - gtk_container_add (GTK_CONTAINER (pframe), preview); - gtk_widget_show (preview); - mw_do_preview = fcn; - - button = gtk_check_button_new_with_label (_("Do Preview")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), do_preview); - gtk_signal_connect (GTK_OBJECT (button), "toggled", - GTK_SIGNAL_FUNC (ui_toggle_callback), - &do_preview); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - return preview; -} diff --git a/plug-ins/megawidget/megawidget.h b/plug-ins/megawidget/megawidget.h deleted file mode 100644 index ce07cb1d65..0000000000 --- a/plug-ins/megawidget/megawidget.h +++ /dev/null @@ -1,56 +0,0 @@ -/************************************************** - * file: megawidget/megawidget.h - * - * Copyright (c) 1997 Eric L. Hernes (erich@rrnet.com) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software withough specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $Id$ - */ - -#ifndef __MEGAWIDGET_H__ -#define __MEGAWIDGET_H__ - -struct mwPreview -{ - gint width; - gint height; - gint bpp; - gdouble scale; - guchar *bits; -}; - -#ifndef PREVIEW_SIZE -#define PREVIEW_SIZE 100 -#endif - -extern gint do_preview; - -typedef void mw_preview_t (GtkWidget *pvw); - -GtkWidget * mw_preview_new (GtkWidget *parent, - struct mwPreview *mwp, - mw_preview_t *fcn); - -struct mwPreview * mw_preview_build (GDrawable *drw); -struct mwPreview * mw_preview_build_virgin (GDrawable *drw); - -#endif /* __MEGAWIDGET_H__ */ diff --git a/plug-ins/mosaic/Makefile.am b/plug-ins/mosaic/Makefile.am index d44c192cf7..6f061097b5 100644 --- a/plug-ins/mosaic/Makefile.am +++ b/plug-ins/mosaic/Makefile.am @@ -17,6 +17,7 @@ INCLUDES = \ -I$(includedir) LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la \ $(GTK_LIBS) \ $(INTLLIBS) diff --git a/plug-ins/mosaic/mosaic.c b/plug-ins/mosaic/mosaic.c index 909ec15eed..4b5424cc36 100644 --- a/plug-ins/mosaic/mosaic.c +++ b/plug-ins/mosaic/mosaic.c @@ -26,27 +26,27 @@ #include #include -#include "gtk/gtk.h" -#include "config.h" + +#include + +#include +#include +#include + #include "libgimp/stdplugins-intl.h" -#include "libgimp/gimp.h" /* The mosaic logo */ #include "mosaic_logo.h" -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - #define SCALE_WIDTH 150 -#define HORIZONTAL 0 -#define VERTICAL 1 +#define HORIZONTAL 0 +#define VERTICAL 1 #define OPAQUE 255 -#define SUPERSAMPLE 3 -#define MAG_THRESHOLD 7.5 -#define COUNT_THRESHOLD 0.1 -#define MAX_POINTS 12 +#define SUPERSAMPLE 3 +#define MAG_THRESHOLD 7.5 +#define COUNT_THRESHOLD 0.1 +#define MAX_POINTS 12 #define SQUARES 0 #define HEXAGONS 1 @@ -99,15 +99,17 @@ typedef struct /* Declare local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); static void mosaic (GDrawable *drawable); /* user interface functions */ -static gint mosaic_dialog (void); +static gint mosaic_dialog (void); +static void mosaic_ok_callback (GtkWidget *widget, + gpointer data); /* gradient finding machinery */ static void find_gradients (GDrawable *drawable, @@ -234,14 +236,6 @@ static gint polygon_extents (Polygon * poly, gdouble * max_y); static void polygon_reset (Polygon * poly); -static void mosaic_close_callback (GtkWidget *widget, - gpointer data); -static void mosaic_ok_callback (GtkWidget *widget, - gpointer data); -static void mosaic_toggle_update (GtkWidget *widget, - gpointer data); -static void mosaic_scale_update (GtkAdjustment *adjustment, - double *scale_val); /* * Some static variables */ @@ -286,17 +280,17 @@ static MosaicInterface mint = GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef args[] = { @@ -336,24 +330,23 @@ query () } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[1]; - GDrawable *active_drawable; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + GDrawable *active_drawable; run_mode = param[0].data.d_int32; - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - *nreturn_vals = 1; - *return_vals = values; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; switch (run_mode) { @@ -411,10 +404,12 @@ run (char *name, /* Create the mosaic */ if ((status == STATUS_SUCCESS) && - (gimp_drawable_is_rgb (active_drawable->id) || gimp_drawable_is_gray (active_drawable->id))) + (gimp_drawable_is_rgb (active_drawable->id) || + gimp_drawable_is_gray (active_drawable->id))) { /* set the tile cache size so that the gaussian blur works well */ - gimp_tile_cache_ntiles (2 * (MAX (active_drawable->width, active_drawable->height) / + gimp_tile_cache_ntiles (2 * (MAX (active_drawable->width, + active_drawable->height) / gimp_tile_width () + 1)); /* run the effect */ @@ -511,14 +506,10 @@ mosaic (GDrawable *drawable) } static gint -mosaic_dialog () +mosaic_dialog (void) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *hbbox; - GtkWidget *button; GtkWidget *toggle; - GtkWidget *scale; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *logo_box; @@ -528,17 +519,13 @@ mosaic_dialog () GtkWidget *preview; GtkWidget *table; GtkObject *scale_data; - GSList *group = NULL; guchar *color_cube; gchar **argv; - gint argc; - gint use_squares = (mvals.tile_type == SQUARES); - gint use_hexagons = (mvals.tile_type == HEXAGONS); - gint use_octagons = (mvals.tile_type == OCTAGONS); - gint y; + gint argc; + gint y; - argc = 1; - argv = g_new (gchar *, 1); + argc = 1; + argv = g_new (gchar *, 1); argv[0] = g_strdup ("mosaic"); gtk_init (&argc, &argv); @@ -554,50 +541,35 @@ mosaic_dialog () gtk_widget_set_default_visual (gtk_preview_get_visual ()); gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); - dlg = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (dlg), _("Mosaic")); - gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE); + dlg = gimp_dialog_new (_("Mosaic"), "mosaic", + gimp_plugin_help_func, "filters/mosaic.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, + + _("OK"), mosaic_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, + + NULL); + gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - (GtkSignalFunc) mosaic_close_callback, + GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - /* Action area */ - gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dlg)->action_area), 2); - gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dlg)->action_area), FALSE); - hbbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbbox), 4); - gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dlg)->action_area), hbbox, FALSE, FALSE, 0); - gtk_widget_show (hbbox); - - button = gtk_button_new_with_label (_("OK")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) mosaic_ok_callback, - dlg); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Cancel")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) gtk_widget_destroy, - GTK_OBJECT (dlg)); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - /* The main hbox -- splits the scripts and the info vbox */ - main_hbox = gtk_hbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (main_hbox), 10); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_hbox, TRUE, TRUE, 0); + main_hbox = gtk_hbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_hbox, + TRUE, TRUE, 0); /* The vbox for first column of options */ - vbox = gtk_vbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (main_hbox), vbox, TRUE, TRUE, 0); + vbox = gtk_vbox_new (FALSE, 4); + gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); /* The logo frame & drawing area */ - hbox = gtk_hbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); logo_box = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), logo_box, FALSE, FALSE, 0); @@ -622,15 +594,16 @@ mosaic_dialog () /* the vertical box and its toggle buttons */ frame = gtk_frame_new ("Options"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); + + toggle_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_set_border_width (GTK_CONTAINER (toggle_vbox), 2); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - toggle = gtk_check_button_new_with_label ( _("Antialiasing")); + toggle = gtk_check_button_new_with_label (_("Antialiasing")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.antialiasing); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), mvals.antialiasing); gtk_widget_show (toggle); @@ -638,25 +611,28 @@ mosaic_dialog () toggle = gtk_check_button_new_with_label ( _("Color Averaging")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.color_averaging); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), mvals.color_averaging); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + mvals.color_averaging); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label ( _("Pitted Surfaces")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.tile_surface); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), (mvals.tile_surface == ROUGH)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + (mvals.tile_surface == ROUGH)); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label ( _("FG/BG Lighting")); gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, + GTK_SIGNAL_FUNC (gimp_toggle_button_update), &mvals.grout_color); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), (mvals.grout_color == FG_BG)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + (mvals.grout_color == FG_BG)); gtk_widget_show (toggle); gtk_widget_show (toggle_vbox); @@ -664,163 +640,103 @@ mosaic_dialog () gtk_widget_show (hbox); /* tiling primitive */ - frame = gtk_frame_new ( _("Tiling Primitives")); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + frame = gimp_radio_group_new2 (TRUE, _("Tiling Primitives"), + gimp_radio_button_update, + &mvals.tile_type, (gpointer) mvals.tile_type, - toggle = gtk_radio_button_new_with_label (group, _("Squares")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, - &use_squares); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_squares); - gtk_widget_show (toggle); + _("Squares"), + (gpointer) SQUARES, NULL, + _("Hexagons"), + (gpointer) HEXAGONS, NULL, + _("Octagons & Squares"), + (gpointer) OCTAGONS, NULL, - toggle = gtk_radio_button_new_with_label (group, _("Hexagons")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, - &use_hexagons); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_hexagons); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (group, _("Octagons & Squares")); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mosaic_toggle_update, - &use_octagons); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_octagons); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); + NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); + gtk_widget_show (vbox); /* parameter settings */ - frame = gtk_frame_new ( _("Parameter Settings")); + frame = gtk_frame_new (_("Parameter Settings")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (main_hbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (6, 2, FALSE); - gtk_container_border_width (GTK_CONTAINER (table), 5); + + table = gtk_table_new (6, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - label = gtk_label_new ( _("Tile Size")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_size, 5.0, 100.0, 1.0, 1.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, + _("Tile Size:"), SCALE_WIDTH, 0, + mvals.tile_size, 5.0, 100.0, 1.0, 10.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_size); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Tile Height")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_height, 1.0, 50.0, 1.0, 1.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, + _("Tile Height:"), SCALE_WIDTH, 0, + mvals.tile_height, 1.0, 50.0, 1.0, 10.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_height); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Tile Spacing")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_spacing, 1.0, 50.0, 1.0, 1.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 2, 3, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + _("Tile Spacing:"), SCALE_WIDTH, 0, + mvals.tile_spacing, 1.0, 50.0, 1.0, 10.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_spacing); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Tile Neatness")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.tile_neatness, 0.0, 1.0, 0.01, 0.01, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 3, 4, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 2); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + _("Tile Neatness:"), SCALE_WIDTH, 0, + mvals.tile_neatness, + 0.0, 1.0, 0.10, 0.1, 2, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.tile_neatness); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Light Direction")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.light_dir, 0.0, 360.0, 5.0, 5.0, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 4, 5, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 4, + _("Light Direction:"), SCALE_WIDTH, 0, + mvals.light_dir, 0.0, 360.0, 1.0, 15.0, 1, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.light_dir); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new ( _("Color Variation")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6, GTK_FILL, 0, 5, 0); - scale_data = gtk_adjustment_new (mvals.color_variation, 0.0, 1.0, 0.01, 0.01, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 5, 6, GTK_FILL, 0, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 2); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 5, + _("Color Variation:"), SCALE_WIDTH, 0, + mvals.color_variation, + 0.0, 1.0, 0.01, 0.1, 2, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) mosaic_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &mvals.color_variation); - gtk_widget_show (label); - gtk_widget_show (scale); gtk_widget_show (frame); gtk_widget_show (table); + gtk_widget_show (main_hbox); gtk_widget_show (dlg); gtk_main (); gdk_flush (); - /* determine tile type */ - if (use_squares) - mvals.tile_type = SQUARES; - else if (use_hexagons) - mvals.tile_type = HEXAGONS; - else if (use_octagons) - mvals.tile_type = OCTAGONS; - return mint.run; } +static void +mosaic_ok_callback (GtkWidget *widget, + gpointer data) +{ + mint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); +} /* * Gradient finding machinery @@ -1284,7 +1200,7 @@ fp_rand (gdouble val) { gdouble rand_val; - rand_val = (gdouble) rand () / (gdouble) (RAND_MAX - 1); + rand_val = (gdouble) rand () / (gdouble) (G_MAXRAND - 1); return rand_val * val; } @@ -2500,7 +2416,7 @@ calc_spec_contrib (SpecVec *vecs, if (mvals.tile_surface == ROUGH) { /* If the surface is rough, randomly perturb the distance */ - dist -= dist * ((gdouble) rand () / (gdouble) RAND_MAX); + dist -= dist * ((gdouble) rand () / (gdouble) G_MAXRAND); } /* If the distance to an edge is less than the tile_spacing, there @@ -2656,42 +2572,3 @@ polygon_reset (Polygon *poly) { poly->npts = 0; } - - -/* Mosaic interface functions */ - -static void -mosaic_close_callback (GtkWidget *widget, - gpointer data) -{ - gtk_main_quit (); -} - -static void -mosaic_ok_callback (GtkWidget *widget, - gpointer data) -{ - mint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (data)); -} - -static void -mosaic_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; -} - -static void -mosaic_scale_update (GtkAdjustment *adjustment, - double *scale_val) -{ - *scale_val = adjustment->value; -} diff --git a/plug-ins/script-fu/script-fu-constants.c b/plug-ins/script-fu/script-fu-constants.c index d7877706ce..ce4ff3ab2a 100644 --- a/plug-ins/script-fu/script-fu-constants.c +++ b/plug-ins/script-fu/script-fu-constants.c @@ -204,6 +204,7 @@ init_generated_constants (void) setvar (cintern ("PDB-CALLING-ERROR"), flocons (1), NIL); setvar (cintern ("PDB-PASS-THROUGH"), flocons (2), NIL); setvar (cintern ("PDB-SUCCESS"), flocons (3), NIL); + setvar (cintern ("PDB-CANCEL"), flocons (4), NIL); setvar (cintern ("CONTINUOUS"), flocons (0), NIL); setvar (cintern ("INCREMENTAL"), flocons (1), NIL); diff --git a/plug-ins/sgi/sgi.c b/plug-ins/sgi/sgi.c index e0a4a13405..d2c3b5dd70 100644 --- a/plug-ins/sgi/sgi.c +++ b/plug-ins/sgi/sgi.c @@ -32,6 +32,67 @@ * Revision History: * * $Log$ + * Revision 1.19 2000/01/25 17:46:54 mitch + * 2000-01-25 Michael Natterer + * + * * configure.in + * * po-plug-ins/POTFILES.in + * * plug-ins/common/Makefile.am + * * plug-ins/common/plugin-defs.pl + * * plug-ins/megawidget/*: removed. (There were only 3 functions + * left which were used by ~5 plugins, so I moved the resp. functions + * to the plugins). More preview stuff to come... + * + * * app/airbrush_blob.c + * * modules/colorsel_triangle.c + * * modules/colorsel_water.c: use G_PI instead of M_PI. + * + * * app/procedural_db.h + * * libgimp/gimpenums.h + * * plug-ins/script-fu/script-fu-constants.c + * * tools/pdbgen/enums.pl: new PDB return value STATUS_CANCEL which + * indicates that "Cancel" was pressed in a plugin dialog. (Useful + * only for file load/save plugins). + * + * * app/fileops.[ch] + * * app/menus.c: changes to handle STATUS_CANCEL correctly. Did some + * code cleanup in fileops.[ch]. Pop up a warning if File->Save + * failed. + * + * * app/plug_in.c: return_val[0] is of type PDB_STATUS, not + * PDB_INT32. + * + * * libgimp/gimpmath.h: new constant G_MAXRAND which equals to + * RAND_MAX if it exists or to G_MAXINT otherwise. + * + * * libgimp/gimpwidgets.[ch]: new function gimp_random_seed_new() + * which creates a spinbutton and a "Time" toggle. + * Call the function which does the "set_sensitive" magic from the + * radio button callback. + * + * * plug-ins/[75 plugins]: + * + * - Return STATUS_CANCEL in all file load/save dialogs if "Cancel" + * was pressed. + * - Standardized the file plugins' "run" functions. + * - Use G_PI and G_MAXRAND everywhere. + * - Added tons of scales and spinbuttons instead of text entries. + * - Applied uniform packing/spacings all over the place. + * - Reorganized some UIs (stuff like moving the preview to the top + * left corner of the dialog). + * - Removed many ui helper functions and callbacks and use the stuff + * from libgimp instead. + * - I tried not to restrict the range of possible values when I + * replaced entries with spinbuttons/scales but may have failed, + * though in some cases. Please test ;-) + * - #include where appropriate and use it's + * constants. + * - Indentation, s/int/gint/ et.al., code cleanup. + * + * RFC: The plugins are definitely not useable with GIMP 1.0 any + * more, so shouldn't we remove all the remaining compatibility + * stuff ??? (like "#ifdef GIMP_HAVE_PARASITES") + * * Revision 1.18 2000/01/17 17:02:26 mitch * 2000-01-17 Michael Natterer * @@ -282,10 +343,10 @@ #include #include -#include "libgimp/stdplugins-intl.h" - #include "sgi.h" /* SGI image library definitions */ +#include "libgimp/stdplugins-intl.h" + /* * Constants... @@ -319,10 +380,10 @@ static gint save_dialog (void); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static gint compression = SGI_COMP_RLE; @@ -347,6 +408,7 @@ query (void) static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); static gint nload_return_vals = (sizeof (load_return_vals) / sizeof (load_return_vals[0])); + static GParamDef save_args[] = { { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, @@ -388,10 +450,13 @@ query (void) save_args, NULL); - gimp_register_magic_load_handler ("file_sgi_load", "rgb,bw,sgi,icon", - "", "0,short,474"); - - gimp_register_save_handler ("file_sgi_save", "rgb,bw,sgi,icon", ""); + gimp_register_magic_load_handler ("file_sgi_load", + "rgb,bw,sgi,icon", + "", + "0,short,474"); + gimp_register_save_handler ("file_sgi_save", + "rgb,bw,sgi,icon", + ""); } static void @@ -401,47 +466,39 @@ run (gchar *name, gint *nreturn_vals, GParam **return_vals) { - GParam *values; /* Return values */ - GRunModeType run_mode; - gint32 image_ID; - gint32 drawable_ID; - GimpExportReturnType export = EXPORT_CANCEL; + static GParam values[2]; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gint32 drawable_ID; + GimpExportReturnType export = EXPORT_CANCEL; - /* - * Initialize parameter data... - */ - - values = g_new (GParam, 2); + run_mode = param[0].data.d_int32; + *nreturn_vals = 1; + *return_vals = values; values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_SUCCESS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; INIT_I18N_UI(); - *return_vals = values; - - /* - * Load or save an image... - */ - if (strcmp (name, "file_sgi_load") == 0) { - *nreturn_vals = 2; - image_ID = load_image (param[1].data.d_string); if (image_ID != -1) { + *nreturn_vals = 2; values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + { + status = STATUS_EXECUTION_ERROR; + } } else if (strcmp (name, "file_sgi_save") == 0) { - *nreturn_vals = 1; - run_mode = param[0].data.d_int32; image_ID = param[1].data.d_int32; drawable_ID = param[2].data.d_int32; @@ -457,11 +514,10 @@ run (gchar *name, CAN_HANDLE_ALPHA)); if (export == EXPORT_CANCEL) { - values[0].data.d_status = STATUS_EXECUTION_ERROR; + values[0].data.d_status = STATUS_CANCEL; return; } break; - default: break; } @@ -478,7 +534,7 @@ run (gchar *name, * Then acquire information with a dialog... */ if (!save_dialog ()) - goto finish; + status = STATUS_CANCEL; break; case RUN_NONINTERACTIVE: @@ -486,13 +542,15 @@ run (gchar *name, * Make sure all the arguments are there! */ if (nparams != 6) - values[0].data.d_status = STATUS_CALLING_ERROR; + { + status = STATUS_CALLING_ERROR; + } else { compression = param[5].data.d_int32; if (compression < 0 || compression > 2) - values[0].data.d_status = STATUS_CALLING_ERROR; + status = STATUS_CALLING_ERROR; }; break; @@ -500,7 +558,6 @@ run (gchar *name, /* * Possibly retrieve data... */ - gimp_get_data ("file_sgi_save", &compression); break; @@ -508,21 +565,28 @@ run (gchar *name, break; }; - if (values[0].data.d_status == STATUS_SUCCESS) + if (status == STATUS_SUCCESS) { if (save_image (param[3].data.d_string, image_ID, drawable_ID)) - gimp_set_data ("file_sgi_save", &compression, sizeof (compression)); + { + gimp_set_data ("file_sgi_save", + &compression, sizeof (compression)); + } else - values[0].data.d_status = STATUS_EXECUTION_ERROR; - }; - - finish: + { + status = STATUS_EXECUTION_ERROR; + } + } if (export == EXPORT_EXPORT) gimp_image_delete (image_ID); } else - values[0].data.d_status = STATUS_EXECUTION_ERROR; + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } @@ -548,7 +612,7 @@ load_image (gchar *filename) /* I - File to load */ guchar **pixels, /* Pixel rows */ *pixel, /* Pixel data */ *pptr; /* Current pixel */ - unsigned short **rows; /* SGI image data */ + gushort **rows; /* SGI image data */ gchar *progress; /* Title for progress display... */ @@ -558,10 +622,10 @@ load_image (gchar *filename) /* I - File to load */ sgip = sgiOpen(filename, SGI_READ, 0, 0, 0, 0, 0); if (sgip == NULL) - { - g_print("can't open image file\n"); - gimp_quit(); - }; + { + g_message ("can't open image file\n"); + return -1; + }; if (strrchr(filename, '/') != NULL) progress = g_strdup_printf (_("Loading %s:"), strrchr(filename, '/') + 1); @@ -571,63 +635,63 @@ load_image (gchar *filename) /* I - File to load */ gimp_progress_init(progress); g_free (progress); - /* - * Get the image dimensions and create the image... - */ + /* + * Get the image dimensions and create the image... + */ image_type = 0; /* shut up warnings */ layer_type = 0; switch (sgip->zsize) - { + { case 1 : /* Grayscale */ - image_type = GRAY; - layer_type = GRAY_IMAGE; - break; + image_type = GRAY; + layer_type = GRAY_IMAGE; + break; case 2 : /* Grayscale + alpha */ - image_type = GRAY; - layer_type = GRAYA_IMAGE; - break; + image_type = GRAY; + layer_type = GRAYA_IMAGE; + break; case 3 : /* RGB */ - image_type = RGB; - layer_type = RGB_IMAGE; - break; + image_type = RGB; + layer_type = RGB_IMAGE; + break; case 4 : /* RGBA */ - image_type = RGB; - layer_type = RGBA_IMAGE; - break; - }; + image_type = RGB; + layer_type = RGBA_IMAGE; + break; + } image = gimp_image_new(sgip->xsize, sgip->ysize, image_type); if (image == -1) - { - g_print("can't allocate new image\n"); - gimp_quit(); - }; + { + g_message ("can't allocate new image\n"); + return -1; + } gimp_image_set_filename(image, filename); - /* - * Create the "background" layer to hold the image... - */ + /* + * Create the "background" layer to hold the image... + */ layer = gimp_layer_new (image, _("Background"), sgip->xsize, sgip->ysize, layer_type, 100, NORMAL_MODE); gimp_image_add_layer(image, layer, 0); - /* - * Get the drawable and set the pixel region for our load... - */ + /* + * Get the drawable and set the pixel region for our load... + */ drawable = gimp_drawable_get(layer); gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, drawable->width, drawable->height, TRUE, FALSE); - /* - * Temporary buffers... - */ + /* + * Temporary buffers... + */ tile_height = gimp_tile_height(); pixel = g_new(guchar, tile_height * sgip->xsize * sgip->zsize); @@ -642,72 +706,74 @@ load_image (gchar *filename) /* I - File to load */ for (i = 1; i < sgip->zsize; i ++) rows[i] = rows[0] + i * sgip->xsize; - /* - * Load the image... - */ + /* + * Load the image... + */ for (y = 0, count = 0; y < sgip->ysize; y ++, count ++) - { - if (count >= tile_height) { - gimp_pixel_rgn_set_rect(&pixel_rgn, pixel, 0, y - count, drawable->width, count); - count = 0; + if (count >= tile_height) + { + gimp_pixel_rgn_set_rect (&pixel_rgn, pixel, + 0, y - count, drawable->width, count); + count = 0; - gimp_progress_update((double)y / (double)sgip->ysize); - }; + gimp_progress_update((double)y / (double)sgip->ysize); + } - for (i = 0; i < sgip->zsize; i ++) - if (sgiGetRow(sgip, rows[i], sgip->ysize - 1 - y, i) < 0) - printf("sgiGetRow(sgip, rows[i], %d, %d) failed!\n", - sgip->ysize - 1 - y, i); + for (i = 0; i < sgip->zsize; i ++) + if (sgiGetRow(sgip, rows[i], sgip->ysize - 1 - y, i) < 0) + printf("sgiGetRow(sgip, rows[i], %d, %d) failed!\n", + sgip->ysize - 1 - y, i); - if (sgip->bpp == 1) - { - /* - * 8-bit (unsigned) pixels... - */ + if (sgip->bpp == 1) + { + /* + * 8-bit (unsigned) pixels... + */ - for (x = 0, pptr = pixels[count]; x < sgip->xsize; x ++) - for (i = 0; i < sgip->zsize; i ++, pptr ++) - *pptr = rows[i][x]; + for (x = 0, pptr = pixels[count]; x < sgip->xsize; x ++) + for (i = 0; i < sgip->zsize; i ++, pptr ++) + *pptr = rows[i][x]; + } + else + { + /* + * 16-bit (unsigned) pixels... + */ + + for (x = 0, pptr = pixels[count]; x < sgip->xsize; x ++) + for (i = 0; i < sgip->zsize; i ++, pptr ++) + *pptr = rows[i][x] >> 8; + } } - else - { - /* - * 16-bit (unsigned) pixels... - */ - for (x = 0, pptr = pixels[count]; x < sgip->xsize; x ++) - for (i = 0; i < sgip->zsize; i ++, pptr ++) - *pptr = rows[i][x] >> 8; - }; - }; + /* + * Do the last n rows (count always > 0) + */ - /* - * Do the last n rows (count always > 0) - */ + gimp_pixel_rgn_set_rect (&pixel_rgn, pixel, 0, + y - count, drawable->width, count); - gimp_pixel_rgn_set_rect(&pixel_rgn, pixel, 0, y - count, drawable->width, count); + /* + * Done with the file... + */ - /* - * Done with the file... - */ + sgiClose (sgip); - sgiClose(sgip); + g_free (pixel); + g_free (pixels); + g_free (rows[0]); + g_free (rows); - g_free(pixel); - g_free(pixels); - g_free(rows[0]); - g_free(rows); + /* + * Update the display... + */ - /* - * Update the display... - */ - - gimp_drawable_flush(drawable); - gimp_drawable_detach(drawable); + gimp_drawable_flush (drawable); + gimp_drawable_detach (drawable); return (image); } @@ -718,24 +784,24 @@ load_image (gchar *filename) /* I - File to load */ */ static gint -save_image (char *filename, /* I - File to save to */ - gint32 image_ID, /* I - Image to save */ - gint32 drawable_ID) /* I - Current drawable */ +save_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID) { - int i, j, /* Looping var */ - x, /* Current X coordinate */ - y, /* Current Y coordinate */ - tile_height, /* Height of tile in GIMP */ - count, /* Count of rows to put in image */ - zsize; /* Number of channels in file */ - sgi_t *sgip; /* File pointer */ - GDrawable *drawable; /* Drawable for layer */ - GPixelRgn pixel_rgn; /* Pixel region for layer */ - guchar **pixels, /* Pixel rows */ - *pixel, /* Pixel data */ - *pptr; /* Current pixel */ - unsigned short **rows; /* SGI image data */ - gchar *progress; /* Title for progress display... */ + gint i, j, /* Looping var */ + x, /* Current X coordinate */ + y, /* Current Y coordinate */ + tile_height, /* Height of tile in GIMP */ + count, /* Count of rows to put in image */ + zsize; /* Number of channels in file */ + sgi_t *sgip; /* File pointer */ + GDrawable *drawable; /* Drawable for layer */ + GPixelRgn pixel_rgn; /* Pixel region for layer */ + guchar **pixels, /* Pixel rows */ + *pixel, /* Pixel data */ + *pptr; /* Current pixel */ + gushort **rows; /* SGI image data */ + gchar *progress; /* Title for progress display... */ /* * Get the drawable for the current image... @@ -750,22 +816,22 @@ save_image (char *filename, /* I - File to save to */ switch (gimp_drawable_type(drawable_ID)) { case GRAY_IMAGE : - zsize = 1; - break; + zsize = 1; + break; case GRAYA_IMAGE : - zsize = 2; - break; + zsize = 2; + break; case RGB_IMAGE : - zsize = 3; - break; + zsize = 3; + break; case RGBA_IMAGE : - zsize = 4; - break; + zsize = 4; + break; default: - g_warning ("Image must be of type RGB or GRAY\n"); + g_message ("SGI: Image must be of type RGB or GRAY\n"); return FALSE; break; - }; + } /* * Open the file for writing... @@ -775,7 +841,7 @@ save_image (char *filename, /* I - File to save to */ drawable->height, zsize); if (sgip == NULL) { - g_warning ("can't create image file\n"); + g_message ("SGI: Can't create image file\n"); return FALSE; }; @@ -787,9 +853,9 @@ save_image (char *filename, /* I - File to save to */ gimp_progress_init(progress); g_free (progress); - /* - * Allocate memory for "tile_height" rows... - */ + /* + * Allocate memory for "tile_height" rows... + */ tile_height = gimp_tile_height(); pixel = g_new(guchar, tile_height * drawable->width * zsize); @@ -798,15 +864,15 @@ save_image (char *filename, /* I - File to save to */ for (i = 0; i < tile_height; i ++) pixels[i]= pixel + drawable->width * zsize * i; - rows = g_new(unsigned short *, sgip->zsize); - rows[0] = g_new(unsigned short, sgip->xsize * sgip->zsize); + rows = g_new (gushort *, sgip->zsize); + rows[0] = g_new (gushort, sgip->xsize * sgip->zsize); for (i = 1; i < sgip->zsize; i ++) rows[i] = rows[0] + i * sgip->xsize; - /* - * Save the image... - */ + /* + * Save the image... + */ for (y = 0; y < drawable->height; y += count) { @@ -819,7 +885,7 @@ save_image (char *filename, /* I - File to save to */ else count = tile_height; - gimp_pixel_rgn_get_rect(&pixel_rgn, pixel, 0, y, drawable->width, count); + gimp_pixel_rgn_get_rect (&pixel_rgn, pixel, 0, y, drawable->width, count); /* * Convert to shorts and write each color plane separately... @@ -832,7 +898,7 @@ save_image (char *filename, /* I - File to save to */ rows[j][x] = *pptr; for (j = 0; j < zsize; j ++) - sgiPutRow(sgip, rows[j], drawable->height - 1 - y - i, j); + sgiPutRow (sgip, rows[j], drawable->height - 1 - y - i, j); }; gimp_progress_update ((double) y / (double) drawable->height); @@ -858,7 +924,7 @@ save_ok_callback (GtkWidget *widget, { runme = TRUE; - gtk_widget_destroy(GTK_WIDGET(data)); + gtk_widget_destroy (GTK_WIDGET (data)); } static void diff --git a/plug-ins/sinus/Makefile.am b/plug-ins/sinus/Makefile.am index 0113863a72..1332f8f4d9 100644 --- a/plug-ins/sinus/Makefile.am +++ b/plug-ins/sinus/Makefile.am @@ -5,19 +5,18 @@ libexecdir = $(gimpplugindir)/plug-ins libexec_PROGRAMS = sinus sinus_SOURCES = \ - sinus.c \ + sinus.c \ sinus_logo.h INCLUDES = \ - -I$(top_srcdir) \ - $(GTK_CFLAGS) \ + -I$(top_srcdir) \ + $(GTK_CFLAGS) \ -I$(includedir) LDADD = \ - $(top_builddir)/plug-ins/megawidget/libmegawidget.a \ - $(top_builddir)/libgimp/libgimpui.la \ - $(top_builddir)/libgimp/libgimp.la \ - $(GTK_LIBS) \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(GTK_LIBS) \ $(INTLLIBS) .PHONY: files diff --git a/plug-ins/sinus/sinus.c b/plug-ins/sinus/sinus.c index 20e22d7493..1a351aa7ad 100644 --- a/plug-ins/sinus/sinus.c +++ b/plug-ins/sinus/sinus.c @@ -36,25 +36,18 @@ #include #include -#include #include #include #include #include -#include - #include "libgimp/stdplugins-intl.h" #ifdef USE_LOGO #include "sinus_logo.h" #endif -#ifndef RAND_MAX -#define RAND_MAX 2147483647 -#endif /* RAND_MAX */ - /* * This structure is used for persistent data. */ @@ -114,6 +107,25 @@ static gint drawable_is_grayscale = FALSE; static struct mwPreview *thePreview; static GDrawable *drawable; +/* preview stuff -- to be removed as soon as we have a real libgimp preview */ + +struct mwPreview +{ + gint width; + gint height; + gint bpp; + gdouble scale; + guchar *bits; +}; + +#define PREVIEW_SIZE 100 + +static gint do_preview = TRUE; + +static GtkWidget * mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp); +static struct mwPreview * mw_preview_build_virgin (GDrawable *drw); + /* Declare functions */ static void query (void); @@ -326,26 +338,26 @@ prepare_coef (params *p) if (svals.perturbation==IDEAL) { p->c11= 0*rand(); - p->c12= (2.0*rand()/(RAND_MAX+1.0)-1)*scaley; /*rand+rand is used to keep */ - p->c13= (2*G_PI*rand())/RAND_MAX; + p->c12= (2.0*rand()/(G_MAXRAND+1.0)-1)*scaley; /*rand+rand is used to keep */ + p->c13= (2*G_PI*rand())/G_MAXRAND; p->c21= 0*rand(); - p->c22= (2.0*rand()/(RAND_MAX+1.0)-1)*scaley; /*correspondance beetween Ideal*/ - p->c23= (2*G_PI*rand())/RAND_MAX; - p->c31= (2.0*rand()/(RAND_MAX+1.0)-1)*scalex; /*and perturbed coefs (I hope...)*/ + p->c22= (2.0*rand()/(G_MAXRAND+1.0)-1)*scaley; /*correspondance beetween Ideal*/ + p->c23= (2*G_PI*rand())/G_MAXRAND; + p->c31= (2.0*rand()/(G_MAXRAND+1.0)-1)*scalex; /*and perturbed coefs (I hope...)*/ p->c32= 0*rand(); - p->c33= (2*G_PI*rand())/RAND_MAX; + p->c33= (2*G_PI*rand())/G_MAXRAND; } else { - p->c11= (2.0*rand()/(RAND_MAX+1.0)-1)*scalex; - p->c12= (2.0*rand()/(RAND_MAX+1.0)-1)*scaley; - p->c13= (2*G_PI*rand())/RAND_MAX; - p->c21= (2.0*rand()/(RAND_MAX+1.0)-1)*scalex; - p->c22= (2.0*rand()/(RAND_MAX+1.0)-1)*scaley; - p->c23= (2*G_PI*rand())/RAND_MAX; - p->c31= (2.0*rand()/(RAND_MAX+1.0)-1)*scalex; - p->c32= (2.0*rand()/(RAND_MAX+1.0)-1)*scaley; - p->c33= (2*G_PI*rand())/RAND_MAX; + p->c11= (2.0*rand()/(G_MAXRAND+1.0)-1)*scalex; + p->c12= (2.0*rand()/(G_MAXRAND+1.0)-1)*scaley; + p->c13= (2*G_PI*rand())/G_MAXRAND; + p->c21= (2.0*rand()/(G_MAXRAND+1.0)-1)*scalex; + p->c22= (2.0*rand()/(G_MAXRAND+1.0)-1)*scaley; + p->c23= (2*G_PI*rand())/G_MAXRAND; + p->c31= (2.0*rand()/(G_MAXRAND+1.0)-1)*scalex; + p->c32= (2.0*rand()/(G_MAXRAND+1.0)-1)*scaley; + p->c33= (2*G_PI*rand())/G_MAXRAND; } if (svals.tiling) @@ -763,7 +775,7 @@ sinus_dialog (void) gtk_box_pack_start (GTK_BOX (main_hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); - preview = mw_preview_new (vbox, thePreview, &sinus_do_preview); + preview = mw_preview_new (vbox, thePreview); sinus_do_preview (preview); #ifdef USE_LOGO @@ -1108,3 +1120,91 @@ sinus_do_preview (GtkWidget *widget) fprintf (stderr,"Not enough mem for sinus Preview...\n"); } } + +static void +mw_preview_toggle_callback (GtkWidget *widget, + gpointer data) +{ + gimp_toggle_button_update (widget, data); + + if (do_preview) + sinus_do_preview (NULL); +} + +static struct mwPreview * +mw_preview_build_virgin (GDrawable *drw) +{ + struct mwPreview *mwp; + + mwp = g_new (struct mwPreview, 1); + + if (drw->width > drw->height) + { + mwp->scale = (gdouble) drw->width / (gdouble) PREVIEW_SIZE; + mwp->width = PREVIEW_SIZE; + mwp->height = drw->height / mwp->scale; + } + else + { + mwp->scale = (gdouble) drw->height / (gdouble) PREVIEW_SIZE; + mwp->height = PREVIEW_SIZE; + mwp->width = drw->width / mwp->scale; + } + + mwp->bpp = 3; + mwp->bits = NULL; + + return mwp; +} + +static GtkWidget * +mw_preview_new (GtkWidget *parent, + struct mwPreview *mwp) +{ + GtkWidget *preview; + GtkWidget *frame; + GtkWidget *pframe; + GtkWidget *vbox; + GtkWidget *button; + guchar *color_cube; + + gtk_preview_set_gamma (gimp_gamma ()); + gtk_preview_set_install_cmap (gimp_install_cmap ()); + color_cube = gimp_color_cube (); + gtk_preview_set_color_cube (color_cube[0], color_cube[1], + color_cube[2], color_cube[3]); + + gtk_widget_set_default_visual (gtk_preview_get_visual ()); + gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); + + frame = gtk_frame_new (_("Preview")); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_box_pack_start (GTK_BOX (parent), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + vbox = gtk_vbox_new (FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + pframe = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME(pframe), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (vbox), pframe, FALSE, FALSE, 0); + gtk_widget_show (pframe); + + preview = gtk_preview_new (GTK_PREVIEW_COLOR); + gtk_preview_size (GTK_PREVIEW (preview), mwp->width, mwp->height); + gtk_container_add (GTK_CONTAINER (pframe), preview); + gtk_widget_show (preview); + + button = gtk_check_button_new_with_label (_("Do Preview")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), do_preview); + gtk_signal_connect (GTK_OBJECT (button), "toggled", + GTK_SIGNAL_FUNC (mw_preview_toggle_callback), + &do_preview); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + return preview; +} + diff --git a/plug-ins/uri/uri-backend-wget.c b/plug-ins/uri/uri-backend-wget.c index e977d2a119..fd96bd88c1 100644 --- a/plug-ins/uri/uri-backend-wget.c +++ b/plug-ins/uri/uri-backend-wget.c @@ -32,25 +32,26 @@ /* Author: Josh MacDonald. */ static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (char *filename); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); +static gint32 load_image (gchar *filename, + GStatusType *status /* return value */); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -58,14 +59,13 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); INIT_I18N(); @@ -81,60 +81,65 @@ query () nload_args, nload_return_vals, load_args, load_return_vals); - gimp_register_load_handler ("file_url_load", "", "http:,ftp:"); + gimp_register_load_handler ("file_url_load", + "", + "http:,ftp:"); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_url_load") == 0) { - image_ID = load_image (param[2].data.d_string); - if (image_ID != -1) + image_ID = load_image (param[2].data.d_string, &status); + + if (image_ID != -1 && + status == STATUS_SUCCESS) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) +load_image (gchar *filename, + GStatusType *status) { GParam* params; gint retvals; - char* ext = strrchr (filename, '.'); - char* tmpname; - int pid; - int status; + gchar *ext = strrchr (filename, '.'); + gchar *tmpname; + gint pid; + gint process_status; if (!ext || ext[1] == 0 || strchr(ext, '/')) { g_message ("url: can't open URL without an extension\n"); + *status = STATUS_CALLING_ERROR; return -1; } @@ -151,6 +156,7 @@ load_image (char *filename) { g_message ("url: fork failed: %s\n", g_strerror(errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } else if (pid == 0) @@ -167,17 +173,19 @@ load_image (char *filename) { g_message ("url: spawn failed: %s\n", g_strerror(errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } #endif { - waitpid (pid, &status, 0); + waitpid (pid, &process_status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (process_status) || + WEXITSTATUS (process_status) != 0) { g_message ("url: wget exited abnormally on URL %s\n", filename); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } } @@ -192,8 +200,12 @@ load_image (char *filename) unlink (tmpname); g_free (tmpname); - if (params[0].data.d_status == FALSE) - return -1; + *status = params[0].data.d_status; + + if (params[0].data.d_status != STATUS_SUCCESS) + { + return -1; + } else { gimp_image_set_filename (params[1].data.d_int32, filename); diff --git a/plug-ins/uri/uri.c b/plug-ins/uri/uri.c index e977d2a119..fd96bd88c1 100644 --- a/plug-ins/uri/uri.c +++ b/plug-ins/uri/uri.c @@ -32,25 +32,26 @@ /* Author: Josh MacDonald. */ static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); -static gint32 load_image (char *filename); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); +static gint32 load_image (gchar *filename, + GStatusType *status /* return value */); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -58,14 +59,13 @@ query () { PARAM_STRING, "filename", "The name of the file to load" }, { PARAM_STRING, "raw_filename", "The name entered" }, }; - static GParamDef load_return_vals[] = { { PARAM_IMAGE, "image", "Output image" }, }; - - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); INIT_I18N(); @@ -81,60 +81,65 @@ query () nload_args, nload_return_vals, load_args, load_return_vals); - gimp_register_load_handler ("file_url_load", "", "http:,ftp:"); + gimp_register_load_handler ("file_url_load", + "", + "http:,ftp:"); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - gint32 image_ID; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (strcmp (name, "file_url_load") == 0) { - image_ID = load_image (param[2].data.d_string); - if (image_ID != -1) + image_ID = load_image (param[2].data.d_string, &status); + + if (image_ID != -1 && + status == STATUS_SUCCESS) { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } - else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } } else - g_assert (FALSE); + { + status = STATUS_CALLING_ERROR; + } + + values[0].data.d_status = status; } static gint32 -load_image (char *filename) +load_image (gchar *filename, + GStatusType *status) { GParam* params; gint retvals; - char* ext = strrchr (filename, '.'); - char* tmpname; - int pid; - int status; + gchar *ext = strrchr (filename, '.'); + gchar *tmpname; + gint pid; + gint process_status; if (!ext || ext[1] == 0 || strchr(ext, '/')) { g_message ("url: can't open URL without an extension\n"); + *status = STATUS_CALLING_ERROR; return -1; } @@ -151,6 +156,7 @@ load_image (char *filename) { g_message ("url: fork failed: %s\n", g_strerror(errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } else if (pid == 0) @@ -167,17 +173,19 @@ load_image (char *filename) { g_message ("url: spawn failed: %s\n", g_strerror(errno)); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } #endif { - waitpid (pid, &status, 0); + waitpid (pid, &process_status, 0); - if (!WIFEXITED(status) || - WEXITSTATUS(status) != 0) + if (!WIFEXITED (process_status) || + WEXITSTATUS (process_status) != 0) { g_message ("url: wget exited abnormally on URL %s\n", filename); g_free (tmpname); + *status = STATUS_EXECUTION_ERROR; return -1; } } @@ -192,8 +200,12 @@ load_image (char *filename) unlink (tmpname); g_free (tmpname); - if (params[0].data.d_status == FALSE) - return -1; + *status = params[0].data.d_status; + + if (params[0].data.d_status != STATUS_SUCCESS) + { + return -1; + } else { gimp_image_set_filename (params[1].data.d_int32, filename); diff --git a/plug-ins/xjt/xjt.c b/plug-ins/xjt/xjt.c index 1e092e0720..bffa0cc7fe 100644 --- a/plug-ins/xjt/xjt.c +++ b/plug-ins/xjt/xjt.c @@ -49,8 +49,8 @@ * version 1.00.00; 1998/10/29 hof: 1.st (pre) release */ +#include "config.h" -/* System UNIX includes */ #include #include #include @@ -59,11 +59,10 @@ #include #include -/* GIMP includes */ -#include "config.h" +#include +#include +#include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" #include "libgimp/stdplugins-intl.h" /* XJT includes */ @@ -76,12 +75,12 @@ #define MAX_LINE_LEN 10000 -int xjt_debug = FALSE; -pid_t g_pid; -char *global_parasite_prop_lines = NULL; -gint global_parasite_id = 0; -char **global_all_parasite_names = NULL; -gint32 global_num_parasites = 0; +static gint xjt_debug = FALSE; +static pid_t g_pid; +static gchar *global_parasite_prop_lines = NULL; +static gint global_parasite_id = 0; +static gchar **global_all_parasite_names = NULL; +static gint32 global_num_parasites = 0; typedef struct { @@ -198,7 +197,8 @@ typedef struct char *string_val; } t_param_prop; -typedef struct { +typedef struct +{ t_parasitetype parasite_type; gint32 parasite_id; gint32 flags; @@ -259,20 +259,21 @@ typedef struct } t_guide_props; -typedef struct { - char *version; - GImageType image_type; - gint image_width; - gint image_height; - float xresolution; - float yresolution; - gint32 tattoo; - gint n_layers; - gint n_channels; - t_layer_props *layer_props; - t_channel_props *channel_props; - t_channel_props *mask_props; - t_guide_props *guide_props; +typedef struct +{ + gchar *version; + GImageType image_type; + gint image_width; + gint image_height; + gfloat xresolution; + gfloat yresolution; + gint32 tattoo; + gint n_layers; + gint n_channels; + t_layer_props *layer_props; + t_channel_props *channel_props; + t_channel_props *mask_props; + t_guide_props *guide_props; t_parasite_props *parasite_props; } t_image_props; @@ -316,36 +317,27 @@ t_prop_table g_prop_table[PROP_TABLE_ENTRIES] = { /* Declare local functions. */ static void query (void); -static void run (char *name, - int nparams, +static void run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals); -static gint32 load_xjt_image (char *filename); -static gint save_xjt_image (char *filename, - gint32 image_ID, - gint32 drawable_ID); -static gint save_dialog (); - -static void save_close_callback (GtkWidget *widget, - gpointer data); -static void save_ok_callback (GtkWidget *widget, - gpointer data); -static void save_scale_update (GtkAdjustment *adjustment, - double *scale_val); -static void save_optimize_update (GtkWidget *widget, - gpointer data); -static void save_clr_transparent_update (GtkWidget *widget, - gpointer data); +static gint32 load_xjt_image (gchar *filename); +static gint save_xjt_image (gchar *filename, + gint32 image_ID, + gint32 drawable_ID); +static gint save_dialog (void); +static void save_ok_callback (GtkWidget *widget, + gpointer data); GPlugInInfo PLUG_IN_INFO = { - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ }; static t_JpegSaveVals jsvals = @@ -389,7 +381,7 @@ int p_system(char *cmd) MAIN () static void -query () +query (void) { static GParamDef load_args[] = { @@ -401,8 +393,9 @@ query () { { PARAM_IMAGE, "image", "Output image" }, }; - static int nload_args = sizeof (load_args) / sizeof (load_args[0]); - static int nload_return_vals = sizeof (load_return_vals) / sizeof (load_return_vals[0]); + static gint nload_args = sizeof (load_args) / sizeof (load_args[0]); + static gint nload_return_vals = (sizeof (load_return_vals) / + sizeof (load_return_vals[0])); static GParamDef save_args[] = { @@ -416,7 +409,7 @@ query () { PARAM_INT32, "optimize", "Optimization of entropy encoding parameters" }, { PARAM_INT32, "clr_transparent", "set all full-transparent pixels to 0" }, }; - static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + static gint nsave_args = sizeof (save_args) / sizeof (save_args[0]); INIT_I18N (); @@ -444,67 +437,70 @@ query () nsave_args, 0, save_args, NULL); - gimp_register_magic_load_handler ("file_xjt_load", "xjt,xjtgz,xjtbz2", "", ""); - gimp_register_save_handler ("file_xjt_save", "xjt,xjtgz,xjtbz2", ""); + gimp_register_magic_load_handler ("file_xjt_load", + "xjt,xjtgz,xjtbz2", + "", + ""); + gimp_register_save_handler ("file_xjt_save", + "xjt,xjtgz,xjtbz2", + ""); } static void -run (char *name, - int nparams, +run (gchar *name, + gint nparams, GParam *param, - int *nreturn_vals, + gint *nreturn_vals, GParam **return_vals) { static GParam values[2]; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - gint32 image_ID; - char *l_env; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gint32 image_ID; + gchar *l_env; - g_pid = getpid(); + g_pid = getpid (); xjt_debug = FALSE; l_env = getenv("XJT_DEBUG"); if(l_env != NULL) - { - if((*l_env != 'n') && (*l_env != 'N')) xjt_debug = TRUE; - } + { + if((*l_env != 'n') && (*l_env != 'N')) xjt_debug = TRUE; + } run_mode = param[0].data.d_int32; *nreturn_vals = 1; - *return_vals = values; - values[0].type = PARAM_STATUS; - values[0].data.d_status = STATUS_CALLING_ERROR; + *return_vals = values; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_EXECUTION_ERROR; if (run_mode == RUN_NONINTERACTIVE) - { - INIT_I18N(); - } + { + INIT_I18N(); + } else - { - INIT_I18N_UI(); - } - + { + INIT_I18N_UI(); + } if (strcmp (name, "file_xjt_load") == 0) - { + { image_ID = load_xjt_image (param[1].data.d_string); if (image_ID != -1) - { + { *nreturn_vals = 2; - values[0].data.d_status = STATUS_SUCCESS; - values[1].type = PARAM_IMAGE; + values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; - } + } else - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } - } + { + status = STATUS_EXECUTION_ERROR; + } + } else if (strcmp (name, "file_xjt_save") == 0) - { + { switch (run_mode) { case RUN_INTERACTIVE: @@ -513,32 +509,34 @@ run (char *name, /* First acquire information with a dialog */ if (! save_dialog ()) - { - return; - } + { + status = STATUS_CANCEL; + } break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are there! */ if (nparams != 8) - status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) - { - jsvals.quality = param[5].data.d_float; - jsvals.smoothing = param[6].data.d_float; - jsvals.optimize = param[7].data.d_int32; + { + status = STATUS_CALLING_ERROR; + } + else + { + jsvals.quality = param[5].data.d_float; + jsvals.smoothing = param[6].data.d_float; + jsvals.optimize = param[7].data.d_int32; jsvals.clr_transparent = param[8].data.d_int32; - } - if (status == STATUS_SUCCESS - && (jsvals.quality < 0.0 || jsvals.quality > 1.0)) - { - status = STATUS_CALLING_ERROR; - } - if (status == STATUS_SUCCESS - && (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0)) - { - status = STATUS_CALLING_ERROR; - } + + if (jsvals.quality < 0.0 || jsvals.quality > 1.0) + { + status = STATUS_CALLING_ERROR; + } + else if (jsvals.smoothing < 0.0 || jsvals.smoothing > 1.0) + { + status = STATUS_CALLING_ERROR; + } + } + break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ @@ -549,20 +547,28 @@ run (char *name, break; } - *nreturn_vals = 1; - if (save_xjt_image (param[3].data.d_string, param[1].data.d_int32, param[2].data.d_int32) <0) - { - values[0].data.d_status = STATUS_EXECUTION_ERROR; - } - else - { - /* Store mvals data */ - gimp_set_data ("file_xjt_save", &jsvals, sizeof (t_JpegSaveVals)); + if (status == STATUS_SUCCESS) + { + if (save_xjt_image (param[3].data.d_string, + param[1].data.d_int32, + param[2].data.d_int32) <0) + { + status = STATUS_EXECUTION_ERROR; + } + else + { + /* Store mvals data */ + gimp_set_data ("file_xjt_save", &jsvals, sizeof (t_JpegSaveVals)); + } + } + } + else + { + status = STATUS_CALLING_ERROR; + } - values[0].data.d_status = STATUS_SUCCESS; - } - } -} /* end run */ + values[0].data.d_status = status; +} /* -- type transformer routines XJT -- GIMP internal enums ----------------- */ @@ -618,116 +624,89 @@ p_to_XJTLayerModeEffects(GimpLayerModeEffects intype) /* ---------------------- SAVE DIALOG procedures -------------------------- */ static gint -save_dialog () +save_dialog (void) { GtkWidget *dlg; - GtkWidget *label; - GtkWidget *hbbox; - GtkWidget *button; - GtkWidget *scale; GtkWidget *frame; GtkWidget *table; GtkWidget *toggle; GtkObject *scale_data; gchar **argv; - gint argc; + gint argc; - argc = 1; - argv = g_new (gchar *, 1); - argv[0] = g_strdup ("xjt save"); + argc = 1; + argv = g_new (gchar *, 1); + argv[0] = g_strdup ("xjt"); gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); - dlg = gtk_dialog_new (); - gtk_window_set_title (GTK_WINDOW (dlg), _("Save xjt")); - gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE); + dlg = gimp_dialog_new (_("Save as XJT"), "xjt", + gimp_plugin_help_func, "filters/xjt.html", + GTK_WIN_POS_MOUSE, + FALSE, TRUE, FALSE, + + _("OK"), save_ok_callback, + NULL, NULL, NULL, TRUE, FALSE, + _("Cancel"), gtk_widget_destroy, + NULL, 1, NULL, FALSE, TRUE, + + NULL); + gtk_signal_connect (GTK_OBJECT (dlg), "destroy", - (GtkSignalFunc) save_close_callback, + GTK_SIGNAL_FUNC (gtk_main_quit), NULL); - /* Action area */ - gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dlg)->action_area), 2); - gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dlg)->action_area), FALSE); - hbbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbbox), 4); - gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dlg)->action_area), hbbox, FALSE, FALSE, 0); - gtk_widget_show (hbbox); - - button = gtk_button_new_with_label (_("OK")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) save_ok_callback, - dlg); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Cancel")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - (GtkSignalFunc) gtk_widget_destroy, - GTK_OBJECT (dlg)); - gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0); - gtk_widget_show (button); - /* parameter settings */ frame = gtk_frame_new (_("Parameter Settings")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_container_set_border_width (GTK_CONTAINER (frame), 6); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); - table = gtk_table_new (3, 2, FALSE); - gtk_container_border_width (GTK_CONTAINER (table), 10); + + table = gtk_table_new (4, 3, FALSE); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); - label = gtk_label_new (_("Quality")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 0); - scale_data = gtk_adjustment_new (jsvals.quality, 0.0, 1.0, 0.01, 0.01, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 2); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + toggle = gtk_check_button_new_with_label (_("Optimize")); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); + gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 0, 1, + GTK_FILL, 0, 0, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &jsvals.optimize); + gtk_widget_show (toggle); + + toggle = gtk_check_button_new_with_label (_("Clear Transparent")); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), + jsvals.clr_transparent); + gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 1, 2, + GTK_FILL, 0, 0, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + GTK_SIGNAL_FUNC (gimp_toggle_button_update), + &jsvals.clr_transparent); + gtk_widget_show (toggle); + + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, + _("Quality:"), SCALE_WIDTH, 0, + jsvals.quality, 0.0, 1.0, 0.01, 0.11, 2, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) save_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &jsvals.quality); - gtk_widget_show (label); - gtk_widget_show (scale); - label = gtk_label_new (_("Smoothing")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 5, 0); - scale_data = gtk_adjustment_new (jsvals.smoothing, 0.0, 1.0, 0.01, 0.01, 0.0); - scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data)); - gtk_widget_set_usize (scale, SCALE_WIDTH, 0); - gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_TOP); - gtk_scale_set_digits (GTK_SCALE (scale), 2); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, + _("Smoothing:"), SCALE_WIDTH, 0, + jsvals.smoothing, 0.0, 1.0, 0.01, 0.1, 2, + NULL, NULL); gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", - (GtkSignalFunc) save_scale_update, + GTK_SIGNAL_FUNC (gimp_double_adjustment_update), &jsvals.smoothing); - gtk_widget_show (label); - gtk_widget_show (scale); - - toggle = gtk_check_button_new_with_label(_("Optimize")); - gtk_table_attach(GTK_TABLE(table), toggle, 0, 1, 2, 3, GTK_FILL, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - (GtkSignalFunc)save_optimize_update, NULL); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), jsvals.optimize); - gtk_widget_show(toggle); - - toggle = gtk_check_button_new_with_label(_("Clear_Transparent")); - gtk_table_attach(GTK_TABLE(table), toggle, 1, 2, 2, 3, GTK_FILL, 0, 0, 0); - gtk_signal_connect(GTK_OBJECT(toggle), "toggled", - (GtkSignalFunc)save_clr_transparent_update, NULL); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), jsvals.clr_transparent); - gtk_widget_show(toggle); gtk_widget_show (frame); gtk_widget_show (table); + gtk_widget_show (dlg); gtk_main (); @@ -736,46 +715,15 @@ save_dialog () return jsint.run; } - -/* Save interface functions */ - -static void -save_close_callback (GtkWidget *widget, - gpointer data) -{ - gtk_main_quit (); -} - static void save_ok_callback (GtkWidget *widget, gpointer data) { jsint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); } -static void -save_scale_update (GtkAdjustment *adjustment, - double *scale_val) -{ - *scale_val = adjustment->value; -} - -static void -save_optimize_update(GtkWidget *widget, - gpointer data) -{ - jsvals.optimize = GTK_TOGGLE_BUTTON(widget)->active; -} - -static void -save_clr_transparent_update(GtkWidget *widget, - gpointer data) -{ - jsvals.clr_transparent = GTK_TOGGLE_BUTTON(widget)->active; -} - - /* ---------------------- SAVE WORKER procedures -------------------------- */ /* ============================================================================ diff --git a/po-plug-ins/POTFILES.in b/po-plug-ins/POTFILES.in index 3a530dcd9a..ea2642d954 100644 --- a/po-plug-ins/POTFILES.in +++ b/po-plug-ins/POTFILES.in @@ -226,7 +226,6 @@ plug-ins/imagemap/imap_toolbar.c plug-ins/maze/algorithms.c plug-ins/maze/maze.c plug-ins/maze/maze_face.c -plug-ins/megawidget/megawidget.c plug-ins/mosaic/mosaic.c plug-ins/pagecurl/pagecurl.c plug-ins/print/print-escp2.c diff --git a/tools/pdbgen/enums.pl b/tools/pdbgen/enums.pl index ca89ffe04e..2a31e7677c 100644 --- a/tools/pdbgen/enums.pl +++ b/tools/pdbgen/enums.pl @@ -383,11 +383,12 @@ package Gimp::CodeGen::enums; { contig => 1, header => 'procedural_db.h', symbols => [ qw(PDB_EXECUTION_ERROR PDB_CALLING_ERROR - PDB_PASS_THROUGH PDB_SUCCESS) ], + PDB_PASS_THROUGH PDB_SUCCESS PDB_CANCEL) ], mapping => { PDB_EXECUTION_ERROR => '0', PDB_CALLING_ERROR => '1', PDB_PASS_THROUGH => '2', - PDB_SUCCESS => '3' } + PDB_SUCCESS => '3', + PDB_CANCEL => '4' } }, PDBProcType => { contig => 1,