summaryrefslogtreecommitdiff
path: root/gdk-pixbuf/io-jpeg.c
diff options
context:
space:
mode:
authorMichael Fulbright <drmike@redhat.com>1999-11-04 20:02:37 +0000
committerMichael Fulbright <drmike@src.gnome.org>1999-11-04 20:02:37 +0000
commit4107506f6520b3c5d2fb681a155f6686d979d2ab (patch)
treec11085123f51af22cbdfeae4c758e742458e3834 /gdk-pixbuf/io-jpeg.c
parent5d0e9b4a2e5e62f51ae3528cd49cd31a35c4b1d8 (diff)
downloadgtk+-4107506f6520b3c5d2fb681a155f6686d979d2ab.tar.gz
Add update_func callback. Call updated callback when new graphic data
1999-11-04 Michael Fulbright <drmike@redhat.com> * src/io-jpeg.c (image_begin_load): Add update_func callback. * src/io-jpeg.c (image_load_increment): Call updated callback when new graphic data decoded.
Diffstat (limited to 'gdk-pixbuf/io-jpeg.c')
-rw-r--r--gdk-pixbuf/io-jpeg.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/gdk-pixbuf/io-jpeg.c b/gdk-pixbuf/io-jpeg.c
index 9d3ea3b437..cdc162fe93 100644
--- a/gdk-pixbuf/io-jpeg.c
+++ b/gdk-pixbuf/io-jpeg.c
@@ -73,9 +73,10 @@ struct error_handler_data {
/* progressive loader context */
typedef struct {
- ModulePreparedNotifyFunc notify_func;
- gpointer notify_user_data;
-
+ ModuleUpdatedNotifyFunc updated_func;
+ ModulePreparedNotifyFunc prepared_func;
+ gpointer user_data;
+
GdkPixbuf *pixbuf;
guchar *dptr; /* current position in pixbuf */
@@ -87,7 +88,8 @@ typedef struct {
} JpegProgContext;
GdkPixbuf *image_load (FILE *f);
-gpointer image_begin_load (ModulePreparedNotifyFunc func, gpointer user_data);
+gpointer image_begin_load (ModulePreparedNotifyFunc func,
+ ModuleUpdatedNotifyFunc func2, gpointer user_data);
void image_stop_load (gpointer context);
gboolean image_load_increment(gpointer context, guchar *buf, guint size);
@@ -151,8 +153,10 @@ image_load (FILE *f)
int w, h, i;
guchar *pixels = NULL;
guchar *dptr;
- guchar *lines[4]; /* Used to expand rows, via rec_outbuf_height, from the header file:
- * "* Usually rec_outbuf_height will be 1 or 2, at most 4."
+ guchar *lines[4]; /* Used to expand rows, via rec_outbuf_height,
+ * from the header file:
+ * " Usually rec_outbuf_height will be 1 or 2,
+ * at most 4."
*/
guchar **lptr;
struct jpeg_decompress_struct cinfo;
@@ -271,14 +275,17 @@ skip_input_data (j_decompress_ptr cinfo, long num_bytes)
*/
gpointer
-image_begin_load (ModulePreparedNotifyFunc func, gpointer user_data)
+image_begin_load (ModulePreparedNotifyFunc prepared_func,
+ ModuleUpdatedNotifyFunc updated_func,
+ gpointer user_data)
{
JpegProgContext *context;
my_source_mgr *src;
context = g_new0 (JpegProgContext, 1);
- context->notify_func = func;
- context->notify_user_data = user_data;
+ context->prepared_func = prepared_func;
+ context->updated_func = updated_func;
+ context->user_data = user_data;
context->pixbuf = NULL;
context->got_header = FALSE;
context->did_prescan = FALSE;
@@ -451,10 +458,8 @@ image_load_increment (gpointer data, guchar *buf, guint size)
context->dptr = context->pixbuf->art_pixbuf->pixels;
/* Notify the client that we are ready to go */
-
- if (context->notify_func)
- (* context->notify_func) (context->pixbuf,
- context->notify_user_data);
+ (* context->prepared_func) (context->pixbuf,
+ context->user_data);
} else if (!context->did_prescan) {
int rc;
@@ -502,6 +507,14 @@ image_load_increment (gpointer data, guchar *buf, guint size)
context->dptr += nlines * context->pixbuf->art_pixbuf->rowstride;
+ /* send updated signal */
+ (* context->updated_func) (context->pixbuf,
+ context->user_data,
+ 0,
+ cinfo->output_scanline-1,
+ cinfo->image_width,
+ nlines);
+
#undef DEBUG_JPEG_PROGRESSIVE
#ifdef DEBUG_JPEG_PROGRESSIVE