wanted to fix the "loading/saving jpeg causes SEGV" bugs but ended up with

2000-02-08  Michael Natterer  <mitch@gimp.org>

	* plug-ins/common/jpeg.c: wanted to fix the "loading/saving jpeg
	causes SEGV" bugs but ended up with just some more callbacks
	removed (works fine on my system anyway).
This commit is contained in:
Michael Natterer
2000-02-08 17:37:36 +00:00
committed by Michael Natterer
parent 074eb27563
commit a56c872b6a
8 changed files with 475 additions and 637 deletions

View File

@ -1,3 +1,9 @@
2000-02-08 Michael Natterer <mitch@gimp.org>
* plug-ins/common/jpeg.c: wanted to fix the "loading/saving jpeg
causes SEGV" bugs but ended up with just some more callbacks
removed (works fine on my system anyway).
Tue Feb 8 14:59:43 CET 2000 Sven Neumann <sven@gimp.org> Tue Feb 8 14:59:43 CET 2000 Sven Neumann <sven@gimp.org>
* libgimp/gimpexport.c: Be more intelligent when dealing with invisible * libgimp/gimpexport.c: Be more intelligent when dealing with invisible

View File

@ -164,7 +164,10 @@
#define DEFAULT_COMMENT "Created with The GIMP" #define DEFAULT_COMMENT "Created with The GIMP"
/* sg - these should not be global... */ /* sg - these should not be global... */
static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; static gint32 volatile image_ID_global = -1;
static gint32 orig_image_ID_global;
static gint32 drawable_ID_global = -1;
static gint32 layer_ID_global = -1;
static GtkWidget *preview_size = NULL; static GtkWidget *preview_size = NULL;
static GDrawable *drawable_global = NULL; static GDrawable *drawable_global = NULL;
@ -233,21 +236,10 @@ static void save_close_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_ok_callback (GtkWidget *widget, static void save_ok_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void save_restart_toggle_update (GtkWidget *toggle, static void save_restart_toggle_update (GtkWidget *toggle,
GtkAdjustment *adjustment); GtkAdjustment *adjustment);
static void save_restart_update (GtkAdjustment *adjustment, static void save_restart_update (GtkAdjustment *adjustment,
GtkWidget *toggle); GtkWidget *toggle);
static void save_optimize_update (GtkWidget *widget,
gpointer data);
static void save_progressive_toggle (GtkWidget *widget,
gpointer data);
static void save_baseline_toggle (GtkWidget *widget,
gpointer data);
static void save_preview_toggle (GtkWidget *widget,
gpointer data);
static void make_preview (void); static void make_preview (void);
static void destroy_preview (void); static void destroy_preview (void);
@ -283,7 +275,7 @@ static JpegSaveInterface jsint =
FALSE /* run */ FALSE /* run */
}; };
char *image_comment=NULL; static gchar *image_comment = NULL;
static GtkWidget *restart_markers_scale = NULL; static GtkWidget *restart_markers_scale = NULL;
static GtkWidget *restart_markers_label = NULL; static GtkWidget *restart_markers_label = NULL;
@ -687,10 +679,11 @@ COM_handler (j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
typedef struct my_error_mgr { typedef struct my_error_mgr
struct jpeg_error_mgr pub; /* "public" fields */ {
struct jpeg_error_mgr pub; /* "public" fields */
jmp_buf setjmp_buffer; /* for return to caller */ jmp_buf setjmp_buffer; /* for return to caller */
} *my_error_ptr; } *my_error_ptr;
/* /*
@ -712,9 +705,9 @@ my_error_exit (j_common_ptr cinfo)
} }
static gint32 static gint32
load_image (char *filename, load_image (gchar *filename,
GRunModeType runmode, GRunModeType runmode,
int preview) gint preview)
{ {
GPixelRgn pixel_rgn; GPixelRgn pixel_rgn;
GDrawable *drawable; GDrawable *drawable;
@ -726,12 +719,12 @@ load_image (char *filename,
guchar *buf; guchar *buf;
guchar * volatile padded_buf = NULL; guchar * volatile padded_buf = NULL;
guchar **rowbuf; guchar **rowbuf;
char *name; gchar *name;
int image_type; gint image_type;
int layer_type; gint layer_type;
int tile_height; gint tile_height;
int scanlines; gint scanlines;
int i, start, end; gint i, start, end;
#ifdef GIMP_HAVE_PARASITES #ifdef GIMP_HAVE_PARASITES
JpegSaveVals local_save_vals; JpegSaveVals local_save_vals;
@ -1086,8 +1079,8 @@ background_jpeg_save (gpointer *ptr)
preview_persistent *pp = (preview_persistent *)ptr; preview_persistent *pp = (preview_persistent *)ptr;
guchar *t; guchar *t;
guchar *s; guchar *s;
int i, j; gint i, j;
int yend; gint yend;
if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height)) if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height))
{ {
@ -1186,14 +1179,15 @@ save_image (char *filename,
guchar *temp, *t; guchar *temp, *t;
guchar *data; guchar *data;
guchar *src, *s; guchar *src, *s;
char *name; gchar *name;
int has_alpha; gint has_alpha;
int rowstride, yend; gint rowstride, yend;
int i, j; gint i, j;
drawable = gimp_drawable_get (drawable_ID); drawable = gimp_drawable_get (drawable_ID);
drawable_type = gimp_drawable_type (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);
if (!preview) if (!preview)
{ {
@ -1500,16 +1494,17 @@ save_image (char *filename,
} }
static void static void
make_preview () make_preview (void)
{ {
char *tn; gchar *tn;
destroy_preview (); destroy_preview ();
if (jsvals.preview) if (jsvals.preview)
{ {
tn = tempnam(NULL, "gimp"); /* user temp dir? */ tn = tempnam(NULL, "gimp"); /* user temp dir? */
save_image (tn, image_ID_global, drawable_ID_global, orig_image_ID_global, TRUE); save_image (tn, image_ID_global,
drawable_ID_global, orig_image_ID_global, TRUE);
} }
else else
{ {
@ -1523,7 +1518,7 @@ make_preview ()
} }
static void static void
destroy_preview () destroy_preview (void)
{ {
if (abort_me) if (abort_me)
{ {
@ -1545,11 +1540,12 @@ destroy_preview ()
static void static void
add_menu_item (GtkWidget *menu, add_menu_item (GtkWidget *menu,
char *label, gchar *label,
guint op_no, guint op_no,
GtkSignalFunc callback) GtkSignalFunc callback)
{ {
GtkWidget *menu_item = gtk_menu_item_new_with_label (label); GtkWidget *menu_item = gtk_menu_item_new_with_label (label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate", gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
(GtkSignalFunc) callback, &op_no); (GtkSignalFunc) callback, &op_no);
@ -1557,13 +1553,13 @@ add_menu_item (GtkWidget *menu,
} }
static void static void
init_gtk () init_gtk (void)
{ {
gchar **argv; gchar **argv;
gint argc; gint argc;
argc = 1; argc = 1;
argv = g_new (gchar *, 1); argv = g_new (gchar *, 1);
argv[0] = g_strdup ("jpeg"); argv[0] = g_strdup ("jpeg");
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
@ -1638,7 +1634,10 @@ save_dialog (void)
preview = gtk_check_button_new_with_label (_("Preview (in Image Window)")); preview = gtk_check_button_new_with_label (_("Preview (in Image Window)"));
gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (preview), "toggled", gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (save_preview_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.preview);
gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview);
gtk_widget_show (preview); gtk_widget_show (preview);
@ -1678,8 +1677,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.quality); &jsvals.quality);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
label = gtk_label_new (_("Smoothing:")); label = gtk_label_new (_("Smoothing:"));
@ -1697,8 +1699,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.smoothing); &jsvals.smoothing);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
/* sg - have to init scale here */ /* sg - have to init scale here */
@ -1747,7 +1752,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled", gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (save_optimize_update), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.optimize);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -1756,7 +1764,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6, gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled", gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (save_progressive_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.progressive);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive),
jsvals.progressive); jsvals.progressive);
@ -1770,7 +1781,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7, gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled", gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (save_baseline_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.baseline);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline),
jsvals.baseline); jsvals.baseline);
@ -1902,14 +1916,6 @@ save_ok_callback (GtkWidget *widget,
gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_destroy (GTK_WIDGET (data));
} }
static void
save_scale_update (GtkAdjustment *adjustment,
double *scale_val)
{
*scale_val = adjustment->value;
make_preview ();
}
static void static void
save_restart_toggle_update (GtkWidget *widget, save_restart_toggle_update (GtkWidget *widget,
GtkAdjustment *adjustment) GtkAdjustment *adjustment)
@ -1923,49 +1929,19 @@ save_restart_update (GtkAdjustment *adjustment,
{ {
jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0; jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0;
gtk_widget_set_sensitive (restart_markers_label, (jsvals.restart ? TRUE : FALSE)); gtk_widget_set_sensitive (restart_markers_label,
gtk_widget_set_sensitive (restart_markers_scale, (jsvals.restart ? TRUE : FALSE)); (jsvals.restart ? TRUE : FALSE));
gtk_widget_set_sensitive (restart_markers_scale,
(jsvals.restart ? TRUE : FALSE));
make_preview (); make_preview ();
} }
static void
save_optimize_update (GtkWidget *widget,
gpointer data)
{
jsvals.optimize = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_progressive_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.progressive = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_baseline_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.baseline = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_preview_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.preview = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void static void
subsmp_callback (GtkWidget *widget, subsmp_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.subsmp = *((guchar *)data); jsvals.subsmp = *((guchar *) data);
make_preview (); make_preview ();
} }
@ -1973,6 +1949,6 @@ static void
dct_callback (GtkWidget *widget, dct_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.dct = *((guchar *)data); jsvals.dct = *((guchar *) data);
make_preview (); make_preview ();
} }

View File

@ -164,7 +164,10 @@
#define DEFAULT_COMMENT "Created with The GIMP" #define DEFAULT_COMMENT "Created with The GIMP"
/* sg - these should not be global... */ /* sg - these should not be global... */
static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; static gint32 volatile image_ID_global = -1;
static gint32 orig_image_ID_global;
static gint32 drawable_ID_global = -1;
static gint32 layer_ID_global = -1;
static GtkWidget *preview_size = NULL; static GtkWidget *preview_size = NULL;
static GDrawable *drawable_global = NULL; static GDrawable *drawable_global = NULL;
@ -233,21 +236,10 @@ static void save_close_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_ok_callback (GtkWidget *widget, static void save_ok_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void save_restart_toggle_update (GtkWidget *toggle, static void save_restart_toggle_update (GtkWidget *toggle,
GtkAdjustment *adjustment); GtkAdjustment *adjustment);
static void save_restart_update (GtkAdjustment *adjustment, static void save_restart_update (GtkAdjustment *adjustment,
GtkWidget *toggle); GtkWidget *toggle);
static void save_optimize_update (GtkWidget *widget,
gpointer data);
static void save_progressive_toggle (GtkWidget *widget,
gpointer data);
static void save_baseline_toggle (GtkWidget *widget,
gpointer data);
static void save_preview_toggle (GtkWidget *widget,
gpointer data);
static void make_preview (void); static void make_preview (void);
static void destroy_preview (void); static void destroy_preview (void);
@ -283,7 +275,7 @@ static JpegSaveInterface jsint =
FALSE /* run */ FALSE /* run */
}; };
char *image_comment=NULL; static gchar *image_comment = NULL;
static GtkWidget *restart_markers_scale = NULL; static GtkWidget *restart_markers_scale = NULL;
static GtkWidget *restart_markers_label = NULL; static GtkWidget *restart_markers_label = NULL;
@ -687,10 +679,11 @@ COM_handler (j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
typedef struct my_error_mgr { typedef struct my_error_mgr
struct jpeg_error_mgr pub; /* "public" fields */ {
struct jpeg_error_mgr pub; /* "public" fields */
jmp_buf setjmp_buffer; /* for return to caller */ jmp_buf setjmp_buffer; /* for return to caller */
} *my_error_ptr; } *my_error_ptr;
/* /*
@ -712,9 +705,9 @@ my_error_exit (j_common_ptr cinfo)
} }
static gint32 static gint32
load_image (char *filename, load_image (gchar *filename,
GRunModeType runmode, GRunModeType runmode,
int preview) gint preview)
{ {
GPixelRgn pixel_rgn; GPixelRgn pixel_rgn;
GDrawable *drawable; GDrawable *drawable;
@ -726,12 +719,12 @@ load_image (char *filename,
guchar *buf; guchar *buf;
guchar * volatile padded_buf = NULL; guchar * volatile padded_buf = NULL;
guchar **rowbuf; guchar **rowbuf;
char *name; gchar *name;
int image_type; gint image_type;
int layer_type; gint layer_type;
int tile_height; gint tile_height;
int scanlines; gint scanlines;
int i, start, end; gint i, start, end;
#ifdef GIMP_HAVE_PARASITES #ifdef GIMP_HAVE_PARASITES
JpegSaveVals local_save_vals; JpegSaveVals local_save_vals;
@ -1086,8 +1079,8 @@ background_jpeg_save (gpointer *ptr)
preview_persistent *pp = (preview_persistent *)ptr; preview_persistent *pp = (preview_persistent *)ptr;
guchar *t; guchar *t;
guchar *s; guchar *s;
int i, j; gint i, j;
int yend; gint yend;
if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height)) if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height))
{ {
@ -1186,14 +1179,15 @@ save_image (char *filename,
guchar *temp, *t; guchar *temp, *t;
guchar *data; guchar *data;
guchar *src, *s; guchar *src, *s;
char *name; gchar *name;
int has_alpha; gint has_alpha;
int rowstride, yend; gint rowstride, yend;
int i, j; gint i, j;
drawable = gimp_drawable_get (drawable_ID); drawable = gimp_drawable_get (drawable_ID);
drawable_type = gimp_drawable_type (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);
if (!preview) if (!preview)
{ {
@ -1500,16 +1494,17 @@ save_image (char *filename,
} }
static void static void
make_preview () make_preview (void)
{ {
char *tn; gchar *tn;
destroy_preview (); destroy_preview ();
if (jsvals.preview) if (jsvals.preview)
{ {
tn = tempnam(NULL, "gimp"); /* user temp dir? */ tn = tempnam(NULL, "gimp"); /* user temp dir? */
save_image (tn, image_ID_global, drawable_ID_global, orig_image_ID_global, TRUE); save_image (tn, image_ID_global,
drawable_ID_global, orig_image_ID_global, TRUE);
} }
else else
{ {
@ -1523,7 +1518,7 @@ make_preview ()
} }
static void static void
destroy_preview () destroy_preview (void)
{ {
if (abort_me) if (abort_me)
{ {
@ -1545,11 +1540,12 @@ destroy_preview ()
static void static void
add_menu_item (GtkWidget *menu, add_menu_item (GtkWidget *menu,
char *label, gchar *label,
guint op_no, guint op_no,
GtkSignalFunc callback) GtkSignalFunc callback)
{ {
GtkWidget *menu_item = gtk_menu_item_new_with_label (label); GtkWidget *menu_item = gtk_menu_item_new_with_label (label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate", gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
(GtkSignalFunc) callback, &op_no); (GtkSignalFunc) callback, &op_no);
@ -1557,13 +1553,13 @@ add_menu_item (GtkWidget *menu,
} }
static void static void
init_gtk () init_gtk (void)
{ {
gchar **argv; gchar **argv;
gint argc; gint argc;
argc = 1; argc = 1;
argv = g_new (gchar *, 1); argv = g_new (gchar *, 1);
argv[0] = g_strdup ("jpeg"); argv[0] = g_strdup ("jpeg");
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
@ -1638,7 +1634,10 @@ save_dialog (void)
preview = gtk_check_button_new_with_label (_("Preview (in Image Window)")); preview = gtk_check_button_new_with_label (_("Preview (in Image Window)"));
gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (preview), "toggled", gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (save_preview_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.preview);
gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview);
gtk_widget_show (preview); gtk_widget_show (preview);
@ -1678,8 +1677,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.quality); &jsvals.quality);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
label = gtk_label_new (_("Smoothing:")); label = gtk_label_new (_("Smoothing:"));
@ -1697,8 +1699,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.smoothing); &jsvals.smoothing);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
/* sg - have to init scale here */ /* sg - have to init scale here */
@ -1747,7 +1752,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled", gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (save_optimize_update), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.optimize);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -1756,7 +1764,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6, gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled", gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (save_progressive_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.progressive);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive),
jsvals.progressive); jsvals.progressive);
@ -1770,7 +1781,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7, gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled", gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (save_baseline_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.baseline);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline),
jsvals.baseline); jsvals.baseline);
@ -1902,14 +1916,6 @@ save_ok_callback (GtkWidget *widget,
gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_destroy (GTK_WIDGET (data));
} }
static void
save_scale_update (GtkAdjustment *adjustment,
double *scale_val)
{
*scale_val = adjustment->value;
make_preview ();
}
static void static void
save_restart_toggle_update (GtkWidget *widget, save_restart_toggle_update (GtkWidget *widget,
GtkAdjustment *adjustment) GtkAdjustment *adjustment)
@ -1923,49 +1929,19 @@ save_restart_update (GtkAdjustment *adjustment,
{ {
jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0; jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0;
gtk_widget_set_sensitive (restart_markers_label, (jsvals.restart ? TRUE : FALSE)); gtk_widget_set_sensitive (restart_markers_label,
gtk_widget_set_sensitive (restart_markers_scale, (jsvals.restart ? TRUE : FALSE)); (jsvals.restart ? TRUE : FALSE));
gtk_widget_set_sensitive (restart_markers_scale,
(jsvals.restart ? TRUE : FALSE));
make_preview (); make_preview ();
} }
static void
save_optimize_update (GtkWidget *widget,
gpointer data)
{
jsvals.optimize = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_progressive_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.progressive = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_baseline_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.baseline = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_preview_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.preview = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void static void
subsmp_callback (GtkWidget *widget, subsmp_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.subsmp = *((guchar *)data); jsvals.subsmp = *((guchar *) data);
make_preview (); make_preview ();
} }
@ -1973,6 +1949,6 @@ static void
dct_callback (GtkWidget *widget, dct_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.dct = *((guchar *)data); jsvals.dct = *((guchar *) data);
make_preview (); make_preview ();
} }

View File

@ -164,7 +164,10 @@
#define DEFAULT_COMMENT "Created with The GIMP" #define DEFAULT_COMMENT "Created with The GIMP"
/* sg - these should not be global... */ /* sg - these should not be global... */
static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; static gint32 volatile image_ID_global = -1;
static gint32 orig_image_ID_global;
static gint32 drawable_ID_global = -1;
static gint32 layer_ID_global = -1;
static GtkWidget *preview_size = NULL; static GtkWidget *preview_size = NULL;
static GDrawable *drawable_global = NULL; static GDrawable *drawable_global = NULL;
@ -233,21 +236,10 @@ static void save_close_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_ok_callback (GtkWidget *widget, static void save_ok_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void save_restart_toggle_update (GtkWidget *toggle, static void save_restart_toggle_update (GtkWidget *toggle,
GtkAdjustment *adjustment); GtkAdjustment *adjustment);
static void save_restart_update (GtkAdjustment *adjustment, static void save_restart_update (GtkAdjustment *adjustment,
GtkWidget *toggle); GtkWidget *toggle);
static void save_optimize_update (GtkWidget *widget,
gpointer data);
static void save_progressive_toggle (GtkWidget *widget,
gpointer data);
static void save_baseline_toggle (GtkWidget *widget,
gpointer data);
static void save_preview_toggle (GtkWidget *widget,
gpointer data);
static void make_preview (void); static void make_preview (void);
static void destroy_preview (void); static void destroy_preview (void);
@ -283,7 +275,7 @@ static JpegSaveInterface jsint =
FALSE /* run */ FALSE /* run */
}; };
char *image_comment=NULL; static gchar *image_comment = NULL;
static GtkWidget *restart_markers_scale = NULL; static GtkWidget *restart_markers_scale = NULL;
static GtkWidget *restart_markers_label = NULL; static GtkWidget *restart_markers_label = NULL;
@ -687,10 +679,11 @@ COM_handler (j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
typedef struct my_error_mgr { typedef struct my_error_mgr
struct jpeg_error_mgr pub; /* "public" fields */ {
struct jpeg_error_mgr pub; /* "public" fields */
jmp_buf setjmp_buffer; /* for return to caller */ jmp_buf setjmp_buffer; /* for return to caller */
} *my_error_ptr; } *my_error_ptr;
/* /*
@ -712,9 +705,9 @@ my_error_exit (j_common_ptr cinfo)
} }
static gint32 static gint32
load_image (char *filename, load_image (gchar *filename,
GRunModeType runmode, GRunModeType runmode,
int preview) gint preview)
{ {
GPixelRgn pixel_rgn; GPixelRgn pixel_rgn;
GDrawable *drawable; GDrawable *drawable;
@ -726,12 +719,12 @@ load_image (char *filename,
guchar *buf; guchar *buf;
guchar * volatile padded_buf = NULL; guchar * volatile padded_buf = NULL;
guchar **rowbuf; guchar **rowbuf;
char *name; gchar *name;
int image_type; gint image_type;
int layer_type; gint layer_type;
int tile_height; gint tile_height;
int scanlines; gint scanlines;
int i, start, end; gint i, start, end;
#ifdef GIMP_HAVE_PARASITES #ifdef GIMP_HAVE_PARASITES
JpegSaveVals local_save_vals; JpegSaveVals local_save_vals;
@ -1086,8 +1079,8 @@ background_jpeg_save (gpointer *ptr)
preview_persistent *pp = (preview_persistent *)ptr; preview_persistent *pp = (preview_persistent *)ptr;
guchar *t; guchar *t;
guchar *s; guchar *s;
int i, j; gint i, j;
int yend; gint yend;
if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height)) if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height))
{ {
@ -1186,14 +1179,15 @@ save_image (char *filename,
guchar *temp, *t; guchar *temp, *t;
guchar *data; guchar *data;
guchar *src, *s; guchar *src, *s;
char *name; gchar *name;
int has_alpha; gint has_alpha;
int rowstride, yend; gint rowstride, yend;
int i, j; gint i, j;
drawable = gimp_drawable_get (drawable_ID); drawable = gimp_drawable_get (drawable_ID);
drawable_type = gimp_drawable_type (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);
if (!preview) if (!preview)
{ {
@ -1500,16 +1494,17 @@ save_image (char *filename,
} }
static void static void
make_preview () make_preview (void)
{ {
char *tn; gchar *tn;
destroy_preview (); destroy_preview ();
if (jsvals.preview) if (jsvals.preview)
{ {
tn = tempnam(NULL, "gimp"); /* user temp dir? */ tn = tempnam(NULL, "gimp"); /* user temp dir? */
save_image (tn, image_ID_global, drawable_ID_global, orig_image_ID_global, TRUE); save_image (tn, image_ID_global,
drawable_ID_global, orig_image_ID_global, TRUE);
} }
else else
{ {
@ -1523,7 +1518,7 @@ make_preview ()
} }
static void static void
destroy_preview () destroy_preview (void)
{ {
if (abort_me) if (abort_me)
{ {
@ -1545,11 +1540,12 @@ destroy_preview ()
static void static void
add_menu_item (GtkWidget *menu, add_menu_item (GtkWidget *menu,
char *label, gchar *label,
guint op_no, guint op_no,
GtkSignalFunc callback) GtkSignalFunc callback)
{ {
GtkWidget *menu_item = gtk_menu_item_new_with_label (label); GtkWidget *menu_item = gtk_menu_item_new_with_label (label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate", gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
(GtkSignalFunc) callback, &op_no); (GtkSignalFunc) callback, &op_no);
@ -1557,13 +1553,13 @@ add_menu_item (GtkWidget *menu,
} }
static void static void
init_gtk () init_gtk (void)
{ {
gchar **argv; gchar **argv;
gint argc; gint argc;
argc = 1; argc = 1;
argv = g_new (gchar *, 1); argv = g_new (gchar *, 1);
argv[0] = g_strdup ("jpeg"); argv[0] = g_strdup ("jpeg");
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
@ -1638,7 +1634,10 @@ save_dialog (void)
preview = gtk_check_button_new_with_label (_("Preview (in Image Window)")); preview = gtk_check_button_new_with_label (_("Preview (in Image Window)"));
gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (preview), "toggled", gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (save_preview_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.preview);
gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview);
gtk_widget_show (preview); gtk_widget_show (preview);
@ -1678,8 +1677,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.quality); &jsvals.quality);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
label = gtk_label_new (_("Smoothing:")); label = gtk_label_new (_("Smoothing:"));
@ -1697,8 +1699,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.smoothing); &jsvals.smoothing);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
/* sg - have to init scale here */ /* sg - have to init scale here */
@ -1747,7 +1752,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled", gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (save_optimize_update), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.optimize);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -1756,7 +1764,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6, gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled", gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (save_progressive_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.progressive);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive),
jsvals.progressive); jsvals.progressive);
@ -1770,7 +1781,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7, gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled", gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (save_baseline_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.baseline);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline),
jsvals.baseline); jsvals.baseline);
@ -1902,14 +1916,6 @@ save_ok_callback (GtkWidget *widget,
gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_destroy (GTK_WIDGET (data));
} }
static void
save_scale_update (GtkAdjustment *adjustment,
double *scale_val)
{
*scale_val = adjustment->value;
make_preview ();
}
static void static void
save_restart_toggle_update (GtkWidget *widget, save_restart_toggle_update (GtkWidget *widget,
GtkAdjustment *adjustment) GtkAdjustment *adjustment)
@ -1923,49 +1929,19 @@ save_restart_update (GtkAdjustment *adjustment,
{ {
jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0; jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0;
gtk_widget_set_sensitive (restart_markers_label, (jsvals.restart ? TRUE : FALSE)); gtk_widget_set_sensitive (restart_markers_label,
gtk_widget_set_sensitive (restart_markers_scale, (jsvals.restart ? TRUE : FALSE)); (jsvals.restart ? TRUE : FALSE));
gtk_widget_set_sensitive (restart_markers_scale,
(jsvals.restart ? TRUE : FALSE));
make_preview (); make_preview ();
} }
static void
save_optimize_update (GtkWidget *widget,
gpointer data)
{
jsvals.optimize = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_progressive_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.progressive = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_baseline_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.baseline = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_preview_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.preview = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void static void
subsmp_callback (GtkWidget *widget, subsmp_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.subsmp = *((guchar *)data); jsvals.subsmp = *((guchar *) data);
make_preview (); make_preview ();
} }
@ -1973,6 +1949,6 @@ static void
dct_callback (GtkWidget *widget, dct_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.dct = *((guchar *)data); jsvals.dct = *((guchar *) data);
make_preview (); make_preview ();
} }

View File

@ -164,7 +164,10 @@
#define DEFAULT_COMMENT "Created with The GIMP" #define DEFAULT_COMMENT "Created with The GIMP"
/* sg - these should not be global... */ /* sg - these should not be global... */
static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; static gint32 volatile image_ID_global = -1;
static gint32 orig_image_ID_global;
static gint32 drawable_ID_global = -1;
static gint32 layer_ID_global = -1;
static GtkWidget *preview_size = NULL; static GtkWidget *preview_size = NULL;
static GDrawable *drawable_global = NULL; static GDrawable *drawable_global = NULL;
@ -233,21 +236,10 @@ static void save_close_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_ok_callback (GtkWidget *widget, static void save_ok_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void save_restart_toggle_update (GtkWidget *toggle, static void save_restart_toggle_update (GtkWidget *toggle,
GtkAdjustment *adjustment); GtkAdjustment *adjustment);
static void save_restart_update (GtkAdjustment *adjustment, static void save_restart_update (GtkAdjustment *adjustment,
GtkWidget *toggle); GtkWidget *toggle);
static void save_optimize_update (GtkWidget *widget,
gpointer data);
static void save_progressive_toggle (GtkWidget *widget,
gpointer data);
static void save_baseline_toggle (GtkWidget *widget,
gpointer data);
static void save_preview_toggle (GtkWidget *widget,
gpointer data);
static void make_preview (void); static void make_preview (void);
static void destroy_preview (void); static void destroy_preview (void);
@ -283,7 +275,7 @@ static JpegSaveInterface jsint =
FALSE /* run */ FALSE /* run */
}; };
char *image_comment=NULL; static gchar *image_comment = NULL;
static GtkWidget *restart_markers_scale = NULL; static GtkWidget *restart_markers_scale = NULL;
static GtkWidget *restart_markers_label = NULL; static GtkWidget *restart_markers_label = NULL;
@ -687,10 +679,11 @@ COM_handler (j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
typedef struct my_error_mgr { typedef struct my_error_mgr
struct jpeg_error_mgr pub; /* "public" fields */ {
struct jpeg_error_mgr pub; /* "public" fields */
jmp_buf setjmp_buffer; /* for return to caller */ jmp_buf setjmp_buffer; /* for return to caller */
} *my_error_ptr; } *my_error_ptr;
/* /*
@ -712,9 +705,9 @@ my_error_exit (j_common_ptr cinfo)
} }
static gint32 static gint32
load_image (char *filename, load_image (gchar *filename,
GRunModeType runmode, GRunModeType runmode,
int preview) gint preview)
{ {
GPixelRgn pixel_rgn; GPixelRgn pixel_rgn;
GDrawable *drawable; GDrawable *drawable;
@ -726,12 +719,12 @@ load_image (char *filename,
guchar *buf; guchar *buf;
guchar * volatile padded_buf = NULL; guchar * volatile padded_buf = NULL;
guchar **rowbuf; guchar **rowbuf;
char *name; gchar *name;
int image_type; gint image_type;
int layer_type; gint layer_type;
int tile_height; gint tile_height;
int scanlines; gint scanlines;
int i, start, end; gint i, start, end;
#ifdef GIMP_HAVE_PARASITES #ifdef GIMP_HAVE_PARASITES
JpegSaveVals local_save_vals; JpegSaveVals local_save_vals;
@ -1086,8 +1079,8 @@ background_jpeg_save (gpointer *ptr)
preview_persistent *pp = (preview_persistent *)ptr; preview_persistent *pp = (preview_persistent *)ptr;
guchar *t; guchar *t;
guchar *s; guchar *s;
int i, j; gint i, j;
int yend; gint yend;
if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height)) if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height))
{ {
@ -1186,14 +1179,15 @@ save_image (char *filename,
guchar *temp, *t; guchar *temp, *t;
guchar *data; guchar *data;
guchar *src, *s; guchar *src, *s;
char *name; gchar *name;
int has_alpha; gint has_alpha;
int rowstride, yend; gint rowstride, yend;
int i, j; gint i, j;
drawable = gimp_drawable_get (drawable_ID); drawable = gimp_drawable_get (drawable_ID);
drawable_type = gimp_drawable_type (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);
if (!preview) if (!preview)
{ {
@ -1500,16 +1494,17 @@ save_image (char *filename,
} }
static void static void
make_preview () make_preview (void)
{ {
char *tn; gchar *tn;
destroy_preview (); destroy_preview ();
if (jsvals.preview) if (jsvals.preview)
{ {
tn = tempnam(NULL, "gimp"); /* user temp dir? */ tn = tempnam(NULL, "gimp"); /* user temp dir? */
save_image (tn, image_ID_global, drawable_ID_global, orig_image_ID_global, TRUE); save_image (tn, image_ID_global,
drawable_ID_global, orig_image_ID_global, TRUE);
} }
else else
{ {
@ -1523,7 +1518,7 @@ make_preview ()
} }
static void static void
destroy_preview () destroy_preview (void)
{ {
if (abort_me) if (abort_me)
{ {
@ -1545,11 +1540,12 @@ destroy_preview ()
static void static void
add_menu_item (GtkWidget *menu, add_menu_item (GtkWidget *menu,
char *label, gchar *label,
guint op_no, guint op_no,
GtkSignalFunc callback) GtkSignalFunc callback)
{ {
GtkWidget *menu_item = gtk_menu_item_new_with_label (label); GtkWidget *menu_item = gtk_menu_item_new_with_label (label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate", gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
(GtkSignalFunc) callback, &op_no); (GtkSignalFunc) callback, &op_no);
@ -1557,13 +1553,13 @@ add_menu_item (GtkWidget *menu,
} }
static void static void
init_gtk () init_gtk (void)
{ {
gchar **argv; gchar **argv;
gint argc; gint argc;
argc = 1; argc = 1;
argv = g_new (gchar *, 1); argv = g_new (gchar *, 1);
argv[0] = g_strdup ("jpeg"); argv[0] = g_strdup ("jpeg");
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
@ -1638,7 +1634,10 @@ save_dialog (void)
preview = gtk_check_button_new_with_label (_("Preview (in Image Window)")); preview = gtk_check_button_new_with_label (_("Preview (in Image Window)"));
gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (preview), "toggled", gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (save_preview_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.preview);
gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview);
gtk_widget_show (preview); gtk_widget_show (preview);
@ -1678,8 +1677,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.quality); &jsvals.quality);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
label = gtk_label_new (_("Smoothing:")); label = gtk_label_new (_("Smoothing:"));
@ -1697,8 +1699,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.smoothing); &jsvals.smoothing);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
/* sg - have to init scale here */ /* sg - have to init scale here */
@ -1747,7 +1752,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled", gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (save_optimize_update), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.optimize);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -1756,7 +1764,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6, gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled", gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (save_progressive_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.progressive);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive),
jsvals.progressive); jsvals.progressive);
@ -1770,7 +1781,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7, gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled", gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (save_baseline_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.baseline);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline),
jsvals.baseline); jsvals.baseline);
@ -1902,14 +1916,6 @@ save_ok_callback (GtkWidget *widget,
gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_destroy (GTK_WIDGET (data));
} }
static void
save_scale_update (GtkAdjustment *adjustment,
double *scale_val)
{
*scale_val = adjustment->value;
make_preview ();
}
static void static void
save_restart_toggle_update (GtkWidget *widget, save_restart_toggle_update (GtkWidget *widget,
GtkAdjustment *adjustment) GtkAdjustment *adjustment)
@ -1923,49 +1929,19 @@ save_restart_update (GtkAdjustment *adjustment,
{ {
jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0; jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0;
gtk_widget_set_sensitive (restart_markers_label, (jsvals.restart ? TRUE : FALSE)); gtk_widget_set_sensitive (restart_markers_label,
gtk_widget_set_sensitive (restart_markers_scale, (jsvals.restart ? TRUE : FALSE)); (jsvals.restart ? TRUE : FALSE));
gtk_widget_set_sensitive (restart_markers_scale,
(jsvals.restart ? TRUE : FALSE));
make_preview (); make_preview ();
} }
static void
save_optimize_update (GtkWidget *widget,
gpointer data)
{
jsvals.optimize = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_progressive_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.progressive = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_baseline_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.baseline = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_preview_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.preview = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void static void
subsmp_callback (GtkWidget *widget, subsmp_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.subsmp = *((guchar *)data); jsvals.subsmp = *((guchar *) data);
make_preview (); make_preview ();
} }
@ -1973,6 +1949,6 @@ static void
dct_callback (GtkWidget *widget, dct_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.dct = *((guchar *)data); jsvals.dct = *((guchar *) data);
make_preview (); make_preview ();
} }

View File

@ -164,7 +164,10 @@
#define DEFAULT_COMMENT "Created with The GIMP" #define DEFAULT_COMMENT "Created with The GIMP"
/* sg - these should not be global... */ /* sg - these should not be global... */
static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; static gint32 volatile image_ID_global = -1;
static gint32 orig_image_ID_global;
static gint32 drawable_ID_global = -1;
static gint32 layer_ID_global = -1;
static GtkWidget *preview_size = NULL; static GtkWidget *preview_size = NULL;
static GDrawable *drawable_global = NULL; static GDrawable *drawable_global = NULL;
@ -233,21 +236,10 @@ static void save_close_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_ok_callback (GtkWidget *widget, static void save_ok_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void save_restart_toggle_update (GtkWidget *toggle, static void save_restart_toggle_update (GtkWidget *toggle,
GtkAdjustment *adjustment); GtkAdjustment *adjustment);
static void save_restart_update (GtkAdjustment *adjustment, static void save_restart_update (GtkAdjustment *adjustment,
GtkWidget *toggle); GtkWidget *toggle);
static void save_optimize_update (GtkWidget *widget,
gpointer data);
static void save_progressive_toggle (GtkWidget *widget,
gpointer data);
static void save_baseline_toggle (GtkWidget *widget,
gpointer data);
static void save_preview_toggle (GtkWidget *widget,
gpointer data);
static void make_preview (void); static void make_preview (void);
static void destroy_preview (void); static void destroy_preview (void);
@ -283,7 +275,7 @@ static JpegSaveInterface jsint =
FALSE /* run */ FALSE /* run */
}; };
char *image_comment=NULL; static gchar *image_comment = NULL;
static GtkWidget *restart_markers_scale = NULL; static GtkWidget *restart_markers_scale = NULL;
static GtkWidget *restart_markers_label = NULL; static GtkWidget *restart_markers_label = NULL;
@ -687,10 +679,11 @@ COM_handler (j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
typedef struct my_error_mgr { typedef struct my_error_mgr
struct jpeg_error_mgr pub; /* "public" fields */ {
struct jpeg_error_mgr pub; /* "public" fields */
jmp_buf setjmp_buffer; /* for return to caller */ jmp_buf setjmp_buffer; /* for return to caller */
} *my_error_ptr; } *my_error_ptr;
/* /*
@ -712,9 +705,9 @@ my_error_exit (j_common_ptr cinfo)
} }
static gint32 static gint32
load_image (char *filename, load_image (gchar *filename,
GRunModeType runmode, GRunModeType runmode,
int preview) gint preview)
{ {
GPixelRgn pixel_rgn; GPixelRgn pixel_rgn;
GDrawable *drawable; GDrawable *drawable;
@ -726,12 +719,12 @@ load_image (char *filename,
guchar *buf; guchar *buf;
guchar * volatile padded_buf = NULL; guchar * volatile padded_buf = NULL;
guchar **rowbuf; guchar **rowbuf;
char *name; gchar *name;
int image_type; gint image_type;
int layer_type; gint layer_type;
int tile_height; gint tile_height;
int scanlines; gint scanlines;
int i, start, end; gint i, start, end;
#ifdef GIMP_HAVE_PARASITES #ifdef GIMP_HAVE_PARASITES
JpegSaveVals local_save_vals; JpegSaveVals local_save_vals;
@ -1086,8 +1079,8 @@ background_jpeg_save (gpointer *ptr)
preview_persistent *pp = (preview_persistent *)ptr; preview_persistent *pp = (preview_persistent *)ptr;
guchar *t; guchar *t;
guchar *s; guchar *s;
int i, j; gint i, j;
int yend; gint yend;
if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height)) if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height))
{ {
@ -1186,14 +1179,15 @@ save_image (char *filename,
guchar *temp, *t; guchar *temp, *t;
guchar *data; guchar *data;
guchar *src, *s; guchar *src, *s;
char *name; gchar *name;
int has_alpha; gint has_alpha;
int rowstride, yend; gint rowstride, yend;
int i, j; gint i, j;
drawable = gimp_drawable_get (drawable_ID); drawable = gimp_drawable_get (drawable_ID);
drawable_type = gimp_drawable_type (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);
if (!preview) if (!preview)
{ {
@ -1500,16 +1494,17 @@ save_image (char *filename,
} }
static void static void
make_preview () make_preview (void)
{ {
char *tn; gchar *tn;
destroy_preview (); destroy_preview ();
if (jsvals.preview) if (jsvals.preview)
{ {
tn = tempnam(NULL, "gimp"); /* user temp dir? */ tn = tempnam(NULL, "gimp"); /* user temp dir? */
save_image (tn, image_ID_global, drawable_ID_global, orig_image_ID_global, TRUE); save_image (tn, image_ID_global,
drawable_ID_global, orig_image_ID_global, TRUE);
} }
else else
{ {
@ -1523,7 +1518,7 @@ make_preview ()
} }
static void static void
destroy_preview () destroy_preview (void)
{ {
if (abort_me) if (abort_me)
{ {
@ -1545,11 +1540,12 @@ destroy_preview ()
static void static void
add_menu_item (GtkWidget *menu, add_menu_item (GtkWidget *menu,
char *label, gchar *label,
guint op_no, guint op_no,
GtkSignalFunc callback) GtkSignalFunc callback)
{ {
GtkWidget *menu_item = gtk_menu_item_new_with_label (label); GtkWidget *menu_item = gtk_menu_item_new_with_label (label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate", gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
(GtkSignalFunc) callback, &op_no); (GtkSignalFunc) callback, &op_no);
@ -1557,13 +1553,13 @@ add_menu_item (GtkWidget *menu,
} }
static void static void
init_gtk () init_gtk (void)
{ {
gchar **argv; gchar **argv;
gint argc; gint argc;
argc = 1; argc = 1;
argv = g_new (gchar *, 1); argv = g_new (gchar *, 1);
argv[0] = g_strdup ("jpeg"); argv[0] = g_strdup ("jpeg");
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
@ -1638,7 +1634,10 @@ save_dialog (void)
preview = gtk_check_button_new_with_label (_("Preview (in Image Window)")); preview = gtk_check_button_new_with_label (_("Preview (in Image Window)"));
gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (preview), "toggled", gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (save_preview_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.preview);
gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview);
gtk_widget_show (preview); gtk_widget_show (preview);
@ -1678,8 +1677,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.quality); &jsvals.quality);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
label = gtk_label_new (_("Smoothing:")); label = gtk_label_new (_("Smoothing:"));
@ -1697,8 +1699,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.smoothing); &jsvals.smoothing);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
/* sg - have to init scale here */ /* sg - have to init scale here */
@ -1747,7 +1752,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled", gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (save_optimize_update), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.optimize);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -1756,7 +1764,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6, gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled", gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (save_progressive_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.progressive);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive),
jsvals.progressive); jsvals.progressive);
@ -1770,7 +1781,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7, gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled", gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (save_baseline_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.baseline);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline),
jsvals.baseline); jsvals.baseline);
@ -1902,14 +1916,6 @@ save_ok_callback (GtkWidget *widget,
gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_destroy (GTK_WIDGET (data));
} }
static void
save_scale_update (GtkAdjustment *adjustment,
double *scale_val)
{
*scale_val = adjustment->value;
make_preview ();
}
static void static void
save_restart_toggle_update (GtkWidget *widget, save_restart_toggle_update (GtkWidget *widget,
GtkAdjustment *adjustment) GtkAdjustment *adjustment)
@ -1923,49 +1929,19 @@ save_restart_update (GtkAdjustment *adjustment,
{ {
jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0; jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0;
gtk_widget_set_sensitive (restart_markers_label, (jsvals.restart ? TRUE : FALSE)); gtk_widget_set_sensitive (restart_markers_label,
gtk_widget_set_sensitive (restart_markers_scale, (jsvals.restart ? TRUE : FALSE)); (jsvals.restart ? TRUE : FALSE));
gtk_widget_set_sensitive (restart_markers_scale,
(jsvals.restart ? TRUE : FALSE));
make_preview (); make_preview ();
} }
static void
save_optimize_update (GtkWidget *widget,
gpointer data)
{
jsvals.optimize = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_progressive_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.progressive = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_baseline_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.baseline = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_preview_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.preview = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void static void
subsmp_callback (GtkWidget *widget, subsmp_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.subsmp = *((guchar *)data); jsvals.subsmp = *((guchar *) data);
make_preview (); make_preview ();
} }
@ -1973,6 +1949,6 @@ static void
dct_callback (GtkWidget *widget, dct_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.dct = *((guchar *)data); jsvals.dct = *((guchar *) data);
make_preview (); make_preview ();
} }

View File

@ -164,7 +164,10 @@
#define DEFAULT_COMMENT "Created with The GIMP" #define DEFAULT_COMMENT "Created with The GIMP"
/* sg - these should not be global... */ /* sg - these should not be global... */
static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; static gint32 volatile image_ID_global = -1;
static gint32 orig_image_ID_global;
static gint32 drawable_ID_global = -1;
static gint32 layer_ID_global = -1;
static GtkWidget *preview_size = NULL; static GtkWidget *preview_size = NULL;
static GDrawable *drawable_global = NULL; static GDrawable *drawable_global = NULL;
@ -233,21 +236,10 @@ static void save_close_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_ok_callback (GtkWidget *widget, static void save_ok_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void save_restart_toggle_update (GtkWidget *toggle, static void save_restart_toggle_update (GtkWidget *toggle,
GtkAdjustment *adjustment); GtkAdjustment *adjustment);
static void save_restart_update (GtkAdjustment *adjustment, static void save_restart_update (GtkAdjustment *adjustment,
GtkWidget *toggle); GtkWidget *toggle);
static void save_optimize_update (GtkWidget *widget,
gpointer data);
static void save_progressive_toggle (GtkWidget *widget,
gpointer data);
static void save_baseline_toggle (GtkWidget *widget,
gpointer data);
static void save_preview_toggle (GtkWidget *widget,
gpointer data);
static void make_preview (void); static void make_preview (void);
static void destroy_preview (void); static void destroy_preview (void);
@ -283,7 +275,7 @@ static JpegSaveInterface jsint =
FALSE /* run */ FALSE /* run */
}; };
char *image_comment=NULL; static gchar *image_comment = NULL;
static GtkWidget *restart_markers_scale = NULL; static GtkWidget *restart_markers_scale = NULL;
static GtkWidget *restart_markers_label = NULL; static GtkWidget *restart_markers_label = NULL;
@ -687,10 +679,11 @@ COM_handler (j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
typedef struct my_error_mgr { typedef struct my_error_mgr
struct jpeg_error_mgr pub; /* "public" fields */ {
struct jpeg_error_mgr pub; /* "public" fields */
jmp_buf setjmp_buffer; /* for return to caller */ jmp_buf setjmp_buffer; /* for return to caller */
} *my_error_ptr; } *my_error_ptr;
/* /*
@ -712,9 +705,9 @@ my_error_exit (j_common_ptr cinfo)
} }
static gint32 static gint32
load_image (char *filename, load_image (gchar *filename,
GRunModeType runmode, GRunModeType runmode,
int preview) gint preview)
{ {
GPixelRgn pixel_rgn; GPixelRgn pixel_rgn;
GDrawable *drawable; GDrawable *drawable;
@ -726,12 +719,12 @@ load_image (char *filename,
guchar *buf; guchar *buf;
guchar * volatile padded_buf = NULL; guchar * volatile padded_buf = NULL;
guchar **rowbuf; guchar **rowbuf;
char *name; gchar *name;
int image_type; gint image_type;
int layer_type; gint layer_type;
int tile_height; gint tile_height;
int scanlines; gint scanlines;
int i, start, end; gint i, start, end;
#ifdef GIMP_HAVE_PARASITES #ifdef GIMP_HAVE_PARASITES
JpegSaveVals local_save_vals; JpegSaveVals local_save_vals;
@ -1086,8 +1079,8 @@ background_jpeg_save (gpointer *ptr)
preview_persistent *pp = (preview_persistent *)ptr; preview_persistent *pp = (preview_persistent *)ptr;
guchar *t; guchar *t;
guchar *s; guchar *s;
int i, j; gint i, j;
int yend; gint yend;
if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height)) if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height))
{ {
@ -1186,14 +1179,15 @@ save_image (char *filename,
guchar *temp, *t; guchar *temp, *t;
guchar *data; guchar *data;
guchar *src, *s; guchar *src, *s;
char *name; gchar *name;
int has_alpha; gint has_alpha;
int rowstride, yend; gint rowstride, yend;
int i, j; gint i, j;
drawable = gimp_drawable_get (drawable_ID); drawable = gimp_drawable_get (drawable_ID);
drawable_type = gimp_drawable_type (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);
if (!preview) if (!preview)
{ {
@ -1500,16 +1494,17 @@ save_image (char *filename,
} }
static void static void
make_preview () make_preview (void)
{ {
char *tn; gchar *tn;
destroy_preview (); destroy_preview ();
if (jsvals.preview) if (jsvals.preview)
{ {
tn = tempnam(NULL, "gimp"); /* user temp dir? */ tn = tempnam(NULL, "gimp"); /* user temp dir? */
save_image (tn, image_ID_global, drawable_ID_global, orig_image_ID_global, TRUE); save_image (tn, image_ID_global,
drawable_ID_global, orig_image_ID_global, TRUE);
} }
else else
{ {
@ -1523,7 +1518,7 @@ make_preview ()
} }
static void static void
destroy_preview () destroy_preview (void)
{ {
if (abort_me) if (abort_me)
{ {
@ -1545,11 +1540,12 @@ destroy_preview ()
static void static void
add_menu_item (GtkWidget *menu, add_menu_item (GtkWidget *menu,
char *label, gchar *label,
guint op_no, guint op_no,
GtkSignalFunc callback) GtkSignalFunc callback)
{ {
GtkWidget *menu_item = gtk_menu_item_new_with_label (label); GtkWidget *menu_item = gtk_menu_item_new_with_label (label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate", gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
(GtkSignalFunc) callback, &op_no); (GtkSignalFunc) callback, &op_no);
@ -1557,13 +1553,13 @@ add_menu_item (GtkWidget *menu,
} }
static void static void
init_gtk () init_gtk (void)
{ {
gchar **argv; gchar **argv;
gint argc; gint argc;
argc = 1; argc = 1;
argv = g_new (gchar *, 1); argv = g_new (gchar *, 1);
argv[0] = g_strdup ("jpeg"); argv[0] = g_strdup ("jpeg");
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
@ -1638,7 +1634,10 @@ save_dialog (void)
preview = gtk_check_button_new_with_label (_("Preview (in Image Window)")); preview = gtk_check_button_new_with_label (_("Preview (in Image Window)"));
gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (preview), "toggled", gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (save_preview_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.preview);
gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview);
gtk_widget_show (preview); gtk_widget_show (preview);
@ -1678,8 +1677,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.quality); &jsvals.quality);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
label = gtk_label_new (_("Smoothing:")); label = gtk_label_new (_("Smoothing:"));
@ -1697,8 +1699,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.smoothing); &jsvals.smoothing);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
/* sg - have to init scale here */ /* sg - have to init scale here */
@ -1747,7 +1752,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled", gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (save_optimize_update), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.optimize);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -1756,7 +1764,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6, gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled", gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (save_progressive_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.progressive);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive),
jsvals.progressive); jsvals.progressive);
@ -1770,7 +1781,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7, gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled", gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (save_baseline_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.baseline);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline),
jsvals.baseline); jsvals.baseline);
@ -1902,14 +1916,6 @@ save_ok_callback (GtkWidget *widget,
gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_destroy (GTK_WIDGET (data));
} }
static void
save_scale_update (GtkAdjustment *adjustment,
double *scale_val)
{
*scale_val = adjustment->value;
make_preview ();
}
static void static void
save_restart_toggle_update (GtkWidget *widget, save_restart_toggle_update (GtkWidget *widget,
GtkAdjustment *adjustment) GtkAdjustment *adjustment)
@ -1923,49 +1929,19 @@ save_restart_update (GtkAdjustment *adjustment,
{ {
jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0; jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0;
gtk_widget_set_sensitive (restart_markers_label, (jsvals.restart ? TRUE : FALSE)); gtk_widget_set_sensitive (restart_markers_label,
gtk_widget_set_sensitive (restart_markers_scale, (jsvals.restart ? TRUE : FALSE)); (jsvals.restart ? TRUE : FALSE));
gtk_widget_set_sensitive (restart_markers_scale,
(jsvals.restart ? TRUE : FALSE));
make_preview (); make_preview ();
} }
static void
save_optimize_update (GtkWidget *widget,
gpointer data)
{
jsvals.optimize = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_progressive_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.progressive = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_baseline_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.baseline = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_preview_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.preview = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void static void
subsmp_callback (GtkWidget *widget, subsmp_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.subsmp = *((guchar *)data); jsvals.subsmp = *((guchar *) data);
make_preview (); make_preview ();
} }
@ -1973,6 +1949,6 @@ static void
dct_callback (GtkWidget *widget, dct_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.dct = *((guchar *)data); jsvals.dct = *((guchar *) data);
make_preview (); make_preview ();
} }

View File

@ -164,7 +164,10 @@
#define DEFAULT_COMMENT "Created with The GIMP" #define DEFAULT_COMMENT "Created with The GIMP"
/* sg - these should not be global... */ /* sg - these should not be global... */
static gint32 volatile image_ID_global = -1, orig_image_ID_global, drawable_ID_global = -1, layer_ID_global = -1; static gint32 volatile image_ID_global = -1;
static gint32 orig_image_ID_global;
static gint32 drawable_ID_global = -1;
static gint32 layer_ID_global = -1;
static GtkWidget *preview_size = NULL; static GtkWidget *preview_size = NULL;
static GDrawable *drawable_global = NULL; static GDrawable *drawable_global = NULL;
@ -233,21 +236,10 @@ static void save_close_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_ok_callback (GtkWidget *widget, static void save_ok_callback (GtkWidget *widget,
gpointer data); gpointer data);
static void save_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void save_restart_toggle_update (GtkWidget *toggle, static void save_restart_toggle_update (GtkWidget *toggle,
GtkAdjustment *adjustment); GtkAdjustment *adjustment);
static void save_restart_update (GtkAdjustment *adjustment, static void save_restart_update (GtkAdjustment *adjustment,
GtkWidget *toggle); GtkWidget *toggle);
static void save_optimize_update (GtkWidget *widget,
gpointer data);
static void save_progressive_toggle (GtkWidget *widget,
gpointer data);
static void save_baseline_toggle (GtkWidget *widget,
gpointer data);
static void save_preview_toggle (GtkWidget *widget,
gpointer data);
static void make_preview (void); static void make_preview (void);
static void destroy_preview (void); static void destroy_preview (void);
@ -283,7 +275,7 @@ static JpegSaveInterface jsint =
FALSE /* run */ FALSE /* run */
}; };
char *image_comment=NULL; static gchar *image_comment = NULL;
static GtkWidget *restart_markers_scale = NULL; static GtkWidget *restart_markers_scale = NULL;
static GtkWidget *restart_markers_label = NULL; static GtkWidget *restart_markers_label = NULL;
@ -687,10 +679,11 @@ COM_handler (j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
typedef struct my_error_mgr { typedef struct my_error_mgr
struct jpeg_error_mgr pub; /* "public" fields */ {
struct jpeg_error_mgr pub; /* "public" fields */
jmp_buf setjmp_buffer; /* for return to caller */ jmp_buf setjmp_buffer; /* for return to caller */
} *my_error_ptr; } *my_error_ptr;
/* /*
@ -712,9 +705,9 @@ my_error_exit (j_common_ptr cinfo)
} }
static gint32 static gint32
load_image (char *filename, load_image (gchar *filename,
GRunModeType runmode, GRunModeType runmode,
int preview) gint preview)
{ {
GPixelRgn pixel_rgn; GPixelRgn pixel_rgn;
GDrawable *drawable; GDrawable *drawable;
@ -726,12 +719,12 @@ load_image (char *filename,
guchar *buf; guchar *buf;
guchar * volatile padded_buf = NULL; guchar * volatile padded_buf = NULL;
guchar **rowbuf; guchar **rowbuf;
char *name; gchar *name;
int image_type; gint image_type;
int layer_type; gint layer_type;
int tile_height; gint tile_height;
int scanlines; gint scanlines;
int i, start, end; gint i, start, end;
#ifdef GIMP_HAVE_PARASITES #ifdef GIMP_HAVE_PARASITES
JpegSaveVals local_save_vals; JpegSaveVals local_save_vals;
@ -1086,8 +1079,8 @@ background_jpeg_save (gpointer *ptr)
preview_persistent *pp = (preview_persistent *)ptr; preview_persistent *pp = (preview_persistent *)ptr;
guchar *t; guchar *t;
guchar *s; guchar *s;
int i, j; gint i, j;
int yend; gint yend;
if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height)) if (pp->abort_me || (pp->cinfo.next_scanline >= pp->cinfo.image_height))
{ {
@ -1186,14 +1179,15 @@ save_image (char *filename,
guchar *temp, *t; guchar *temp, *t;
guchar *data; guchar *data;
guchar *src, *s; guchar *src, *s;
char *name; gchar *name;
int has_alpha; gint has_alpha;
int rowstride, yend; gint rowstride, yend;
int i, j; gint i, j;
drawable = gimp_drawable_get (drawable_ID); drawable = gimp_drawable_get (drawable_ID);
drawable_type = gimp_drawable_type (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);
if (!preview) if (!preview)
{ {
@ -1500,16 +1494,17 @@ save_image (char *filename,
} }
static void static void
make_preview () make_preview (void)
{ {
char *tn; gchar *tn;
destroy_preview (); destroy_preview ();
if (jsvals.preview) if (jsvals.preview)
{ {
tn = tempnam(NULL, "gimp"); /* user temp dir? */ tn = tempnam(NULL, "gimp"); /* user temp dir? */
save_image (tn, image_ID_global, drawable_ID_global, orig_image_ID_global, TRUE); save_image (tn, image_ID_global,
drawable_ID_global, orig_image_ID_global, TRUE);
} }
else else
{ {
@ -1523,7 +1518,7 @@ make_preview ()
} }
static void static void
destroy_preview () destroy_preview (void)
{ {
if (abort_me) if (abort_me)
{ {
@ -1545,11 +1540,12 @@ destroy_preview ()
static void static void
add_menu_item (GtkWidget *menu, add_menu_item (GtkWidget *menu,
char *label, gchar *label,
guint op_no, guint op_no,
GtkSignalFunc callback) GtkSignalFunc callback)
{ {
GtkWidget *menu_item = gtk_menu_item_new_with_label (label); GtkWidget *menu_item = gtk_menu_item_new_with_label (label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
gtk_signal_connect (GTK_OBJECT (menu_item), "activate", gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
(GtkSignalFunc) callback, &op_no); (GtkSignalFunc) callback, &op_no);
@ -1557,13 +1553,13 @@ add_menu_item (GtkWidget *menu,
} }
static void static void
init_gtk () init_gtk (void)
{ {
gchar **argv; gchar **argv;
gint argc; gint argc;
argc = 1; argc = 1;
argv = g_new (gchar *, 1); argv = g_new (gchar *, 1);
argv[0] = g_strdup ("jpeg"); argv[0] = g_strdup ("jpeg");
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
@ -1638,7 +1634,10 @@ save_dialog (void)
preview = gtk_check_button_new_with_label (_("Preview (in Image Window)")); preview = gtk_check_button_new_with_label (_("Preview (in Image Window)"));
gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), preview, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (preview), "toggled", gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (save_preview_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.preview);
gtk_signal_connect (GTK_OBJECT (preview), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (preview), jsvals.preview);
gtk_widget_show (preview); gtk_widget_show (preview);
@ -1678,8 +1677,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.quality); &jsvals.quality);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
label = gtk_label_new (_("Smoothing:")); label = gtk_label_new (_("Smoothing:"));
@ -1697,8 +1699,11 @@ save_dialog (void)
gtk_scale_set_digits (GTK_SCALE (scale), 2); gtk_scale_set_digits (GTK_SCALE (scale), 2);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed", gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (save_scale_update), GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&jsvals.smoothing); &jsvals.smoothing);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
GTK_SIGNAL_FUNC (make_preview),
NULL);
gtk_widget_show (scale); gtk_widget_show (scale);
/* sg - have to init scale here */ /* sg - have to init scale here */
@ -1747,7 +1752,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled", gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (save_optimize_update), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.optimize);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -1756,7 +1764,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6, gtk_table_attach (GTK_TABLE (table), progressive, 0, 3, 5, 6,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled", gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (save_progressive_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.progressive);
gtk_signal_connect (GTK_OBJECT (progressive), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (progressive),
jsvals.progressive); jsvals.progressive);
@ -1770,7 +1781,10 @@ save_dialog (void)
gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7, gtk_table_attach (GTK_TABLE (table), baseline, 0, 3, 6, 7,
GTK_FILL, 0, 0, 0); GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled", gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (save_baseline_toggle), GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&jsvals.baseline);
gtk_signal_connect (GTK_OBJECT (baseline), "toggled",
GTK_SIGNAL_FUNC (make_preview),
NULL); NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline), gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (baseline),
jsvals.baseline); jsvals.baseline);
@ -1902,14 +1916,6 @@ save_ok_callback (GtkWidget *widget,
gtk_widget_destroy (GTK_WIDGET (data)); gtk_widget_destroy (GTK_WIDGET (data));
} }
static void
save_scale_update (GtkAdjustment *adjustment,
double *scale_val)
{
*scale_val = adjustment->value;
make_preview ();
}
static void static void
save_restart_toggle_update (GtkWidget *widget, save_restart_toggle_update (GtkWidget *widget,
GtkAdjustment *adjustment) GtkAdjustment *adjustment)
@ -1923,49 +1929,19 @@ save_restart_update (GtkAdjustment *adjustment,
{ {
jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0; jsvals.restart = GTK_TOGGLE_BUTTON (toggle)->active ? adjustment->value : 0;
gtk_widget_set_sensitive (restart_markers_label, (jsvals.restart ? TRUE : FALSE)); gtk_widget_set_sensitive (restart_markers_label,
gtk_widget_set_sensitive (restart_markers_scale, (jsvals.restart ? TRUE : FALSE)); (jsvals.restart ? TRUE : FALSE));
gtk_widget_set_sensitive (restart_markers_scale,
(jsvals.restart ? TRUE : FALSE));
make_preview (); make_preview ();
} }
static void
save_optimize_update (GtkWidget *widget,
gpointer data)
{
jsvals.optimize = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_progressive_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.progressive = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_baseline_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.baseline = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void
save_preview_toggle (GtkWidget *widget,
gpointer data)
{
jsvals.preview = GTK_TOGGLE_BUTTON (widget)->active;
make_preview ();
}
static void static void
subsmp_callback (GtkWidget *widget, subsmp_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.subsmp = *((guchar *)data); jsvals.subsmp = *((guchar *) data);
make_preview (); make_preview ();
} }
@ -1973,6 +1949,6 @@ static void
dct_callback (GtkWidget *widget, dct_callback (GtkWidget *widget,
gpointer data) gpointer data)
{ {
jsvals.dct = *((guchar *)data); jsvals.dct = *((guchar *) data);
make_preview (); make_preview ();
} }