4 * Copyright (C) 2008 - 2012 The Geeqie Team
8 * This software is released under the GNU General Public License (GNU GPL).
9 * Please read the included file COPYING for more information.
10 * This software comes with no warranty of any kind, use at your own risk!
17 #define TYPE_IMAGE_LOADER (image_loader_get_type())
19 typedef void (*ImageLoaderBackendCbAreaPrepared)(gpointer loader, gpointer data);
20 typedef void (*ImageLoaderBackendCbSize)(gpointer loader, gint width, gint height, gpointer data);
21 typedef void (*ImageLoaderBackendCbAreaUpdated)(gpointer loader, guint x, guint y, guint w, guint h, gpointer data);
23 typedef gpointer (*ImageLoaderBackendFuncLoaderNew)(ImageLoaderBackendCbAreaUpdated, ImageLoaderBackendCbSize, ImageLoaderBackendCbAreaPrepared, gpointer data);
24 typedef void (*ImageLoaderBackendFuncSetSize)(gpointer loader, int width, int height);
25 typedef gboolean (*ImageLoaderBackendFuncLoad)(gpointer loader, const guchar *buf, gsize count, GError **error); /* optional, load whole image at once */
26 typedef gboolean (*ImageLoaderBackendFuncWrite)(gpointer loader, const guchar *buf, gsize count, GError **error);
27 typedef GdkPixbuf* (*ImageLoaderBackendFuncGetPixbuf)(gpointer loader);
28 typedef gboolean (*ImageLoaderBackendFuncClose)(gpointer loader, GError **error);
29 typedef void (*ImageLoaderBackendFuncAbort)(gpointer loader);
30 typedef void (*ImageLoaderBackendFuncFree)(gpointer loader);
31 typedef gchar* (*ImageLoaderBackendFuncGetFormatName)(gpointer loader);
32 typedef gchar** (*ImageLoaderBackendFuncGetFormatMimeTypes)(gpointer loader);
34 typedef struct _ImageLoaderBackend ImageLoaderBackend;
35 struct _ImageLoaderBackend
37 ImageLoaderBackendFuncLoaderNew loader_new;
38 ImageLoaderBackendFuncSetSize set_size;
39 ImageLoaderBackendFuncLoad load;
40 ImageLoaderBackendFuncWrite write;
41 ImageLoaderBackendFuncGetPixbuf get_pixbuf;
42 ImageLoaderBackendFuncClose close;
43 ImageLoaderBackendFuncAbort abort;
44 ImageLoaderBackendFuncFree free;
45 ImageLoaderBackendFuncGetFormatName get_format_name;
46 ImageLoaderBackendFuncGetFormatMimeTypes get_format_mime_types;
50 //typedef struct _ImageLoader ImageLoader;
51 typedef struct _ImageLoaderClass ImageLoaderClass;
68 gint requested_height;
76 guint idle_id; /* event source id */
81 ImageLoaderBackend backend;
83 guint idle_done_id; /* event source id */
84 GList *area_param_list;
85 GList *area_param_delayed_list;
87 gboolean delay_area_ready;
92 GCond *can_destroy_cond;
96 gsize read_buffer_size;
97 guint idle_read_loop_count;
100 struct _ImageLoaderClass {
104 void (*area_ready)(ImageLoader *, guint x, guint y, guint w, guint h, gpointer);
105 void (*error)(ImageLoader *, gpointer);
106 void (*done)(ImageLoader *, gpointer);
107 void (*percent)(ImageLoader *, gdouble, gpointer);
110 GType image_loader_get_type(void);
112 ImageLoader *image_loader_new(FileData *fd);
114 void image_loader_free(ImageLoader *il);
116 /* delay area_ready signals */
117 void image_loader_delay_area_ready(ImageLoader *il, gboolean enable);
119 /* Speed up loading when you only need at most width x height size image,
120 * only the jpeg GdkPixbuf loader benefits from it - so there is no
121 * guarantee that the image will scale down to the requested size..
123 void image_loader_set_requested_size(ImageLoader *il, gint width, gint height);
125 void image_loader_set_buffer_size(ImageLoader *il, guint size);
127 /* this only has effect if used before image_loader_start()
128 * default is G_PRIORITY_DEFAULT_IDLE
130 void image_loader_set_priority(ImageLoader *il, gint priority);
132 gboolean image_loader_start(ImageLoader *il);
135 GdkPixbuf *image_loader_get_pixbuf(ImageLoader *il);
136 gchar *image_loader_get_format(ImageLoader *il);
137 gdouble image_loader_get_percent(ImageLoader *il);
138 gboolean image_loader_get_is_done(ImageLoader *il);
139 FileData *image_loader_get_fd(ImageLoader *il);
140 gboolean image_loader_get_shrunk(ImageLoader *il);
141 const gchar *image_loader_get_error(ImageLoader *il);
143 gboolean image_load_dimensions(FileData *fd, gint *width, gint *height);
146 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */