2 * Copyright (C) 2004 John Ellis
3 * Copyright (C) 2008 - 2016 The Geeqie Team
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 #define TYPE_IMAGE_LOADER (image_loader_get_type())
27 using ImageLoaderBackendCbAreaPrepared = void (*)(gpointer, gpointer);
28 using ImageLoaderBackendCbSize = void (*)(gpointer, gint, gint, gpointer);
29 using ImageLoaderBackendCbAreaUpdated = void (*)(gpointer, guint, guint, guint, guint, gpointer);
31 using ImageLoaderBackendFuncLoaderNew = gpointer (*)(ImageLoaderBackendCbAreaUpdated, ImageLoaderBackendCbSize, ImageLoaderBackendCbAreaPrepared, gpointer);
32 using ImageLoaderBackendFuncSetSize = void (*)(gpointer, int, int);
33 using ImageLoaderBackendFuncLoad = gboolean (*)(gpointer, const guchar *, gsize, GError **); /* optional, load whole image at once */
34 using ImageLoaderBackendFuncWrite = gboolean (*)(gpointer, const guchar *, gsize, GError **);
35 using ImageLoaderBackendFuncGetPixbuf = GdkPixbuf *(*)(gpointer);
36 using ImageLoaderBackendFuncClose = gboolean (*)(gpointer, GError **);
37 using ImageLoaderBackendFuncAbort = void (*)(gpointer);
38 using ImageLoaderBackendFuncFree = void (*)(gpointer);
39 using ImageLoaderBackendFuncGetFormatName = gchar *(*)(gpointer);
40 using ImageLoaderBackendFuncGetFormatMimeTypes = gchar **(*)(gpointer);
41 using ImageLoaderBackendFuncSetPageNum = void (*)(gpointer, gint);
42 using ImageLoaderBackendFuncGetPageTotal = gint (*)(gpointer);
44 struct ImageLoaderBackend
46 ImageLoaderBackendFuncLoaderNew loader_new;
47 ImageLoaderBackendFuncSetSize set_size;
48 ImageLoaderBackendFuncLoad load;
49 ImageLoaderBackendFuncWrite write;
50 ImageLoaderBackendFuncGetPixbuf get_pixbuf;
51 ImageLoaderBackendFuncClose close;
52 ImageLoaderBackendFuncAbort abort;
53 ImageLoaderBackendFuncFree free;
54 ImageLoaderBackendFuncGetFormatName get_format_name;
55 ImageLoaderBackendFuncGetFormatMimeTypes get_format_mime_types;
56 ImageLoaderBackendFuncSetPageNum set_page_num;
57 ImageLoaderBackendFuncGetPageTotal get_page_total;
60 enum ImageLoaderPreview {
61 IMAGE_LOADER_PREVIEW_NONE = 0,
62 IMAGE_LOADER_PREVIEW_EXIF = 1,
63 IMAGE_LOADER_PREVIEW_LIBRAW = 2
79 ImageLoaderPreview preview;
82 gint requested_height;
90 guint idle_id; /**< event source id */
95 ImageLoaderBackend backend;
97 guint idle_done_id; /**< event source id */
98 GList *area_param_list;
99 GList *area_param_delayed_list;
101 gboolean delay_area_ready;
105 gboolean can_destroy;
106 GCond *can_destroy_cond;
110 gsize read_buffer_size;
111 guint idle_read_loop_count;
114 struct ImageLoaderClass {
118 void (*area_ready)(ImageLoader *, guint x, guint y, guint w, guint h, gpointer);
119 void (*error)(ImageLoader *, gpointer);
120 void (*done)(ImageLoader *, gpointer);
121 void (*percent)(ImageLoader *, gdouble, gpointer);
124 GType image_loader_get_type();
126 ImageLoader *image_loader_new(FileData *fd);
128 void image_loader_free(ImageLoader *il);
131 * @headerfile image_loader_delay_area_ready
132 * delay area_ready signals
134 void image_loader_delay_area_ready(ImageLoader *il, gboolean enable);
137 * @headerfile image_loader_set_requested_size
138 * Speed up loading when you only need at most width x height size image,
139 * only the jpeg GdkPixbuf loader benefits from it - so there is no
140 * guarantee that the image will scale down to the requested size..
142 void image_loader_set_requested_size(ImageLoader *il, gint width, gint height);
144 void image_loader_set_buffer_size(ImageLoader *il, guint count);
147 * @headerfile image_loader_set_priority
148 * this only has effect if used before image_loader_start()
149 * default is G_PRIORITY_DEFAULT_IDLE
151 void image_loader_set_priority(ImageLoader *il, gint priority);
153 gboolean image_loader_start(ImageLoader *il);
156 GdkPixbuf *image_loader_get_pixbuf(ImageLoader *il);
157 gdouble image_loader_get_percent(ImageLoader *il);
158 gboolean image_loader_get_is_done(ImageLoader *il);
159 FileData *image_loader_get_fd(ImageLoader *il);
160 gboolean image_loader_get_shrunk(ImageLoader *il);
161 const gchar *image_loader_get_error(ImageLoader *il);
163 gboolean image_load_dimensions(FileData *fd, gint *width, gint *height);
166 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */