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 typedef void (*ImageLoaderBackendCbAreaPrepared)(gpointer loader, gpointer data);
28 typedef void (*ImageLoaderBackendCbSize)(gpointer loader, gint width, gint height, gpointer data);
29 typedef void (*ImageLoaderBackendCbAreaUpdated)(gpointer loader, guint x, guint y, guint w, guint h, gpointer data);
31 typedef gpointer (*ImageLoaderBackendFuncLoaderNew)(ImageLoaderBackendCbAreaUpdated, ImageLoaderBackendCbSize, ImageLoaderBackendCbAreaPrepared, gpointer data);
32 typedef void (*ImageLoaderBackendFuncSetSize)(gpointer loader, int width, int height);
33 typedef gboolean (*ImageLoaderBackendFuncLoad)(gpointer loader, const guchar *buf, gsize count, GError **error); /* optional, load whole image at once */
34 typedef gboolean (*ImageLoaderBackendFuncWrite)(gpointer loader, const guchar *buf, gsize count, GError **error);
35 typedef GdkPixbuf* (*ImageLoaderBackendFuncGetPixbuf)(gpointer loader);
36 typedef gboolean (*ImageLoaderBackendFuncClose)(gpointer loader, GError **error);
37 typedef void (*ImageLoaderBackendFuncAbort)(gpointer loader);
38 typedef void (*ImageLoaderBackendFuncFree)(gpointer loader);
39 typedef gchar* (*ImageLoaderBackendFuncGetFormatName)(gpointer loader);
40 typedef gchar** (*ImageLoaderBackendFuncGetFormatMimeTypes)(gpointer loader);
41 typedef void (*ImageLoaderBackendFuncSetPageNum)(gpointer loader, gint page_num);
42 typedef gint (*ImageLoaderBackendFuncGetPageTotal)(gpointer loader);
44 typedef struct _ImageLoaderBackend ImageLoaderBackend;
45 struct _ImageLoaderBackend
47 ImageLoaderBackendFuncLoaderNew loader_new;
48 ImageLoaderBackendFuncSetSize set_size;
49 ImageLoaderBackendFuncLoad load;
50 ImageLoaderBackendFuncWrite write;
51 ImageLoaderBackendFuncGetPixbuf get_pixbuf;
52 ImageLoaderBackendFuncClose close;
53 ImageLoaderBackendFuncAbort abort;
54 ImageLoaderBackendFuncFree free;
55 ImageLoaderBackendFuncGetFormatName get_format_name;
56 ImageLoaderBackendFuncGetFormatMimeTypes get_format_mime_types;
57 ImageLoaderBackendFuncSetPageNum set_page_num;
58 ImageLoaderBackendFuncGetPageTotal get_page_total;
62 IMAGE_LOADER_PREVIEW_NONE = 0,
63 IMAGE_LOADER_PREVIEW_EXIF = 1,
64 IMAGE_LOADER_PREVIEW_LIBRAW = 2
68 //typedef struct _ImageLoader ImageLoader;
69 typedef struct _ImageLoaderClass ImageLoaderClass;
83 ImageLoaderPreview preview;
86 gint requested_height;
94 guint idle_id; /**< event source id */
99 ImageLoaderBackend backend;
101 guint idle_done_id; /**< event source id */
102 GList *area_param_list;
103 GList *area_param_delayed_list;
105 gboolean delay_area_ready;
109 gboolean can_destroy;
110 GCond *can_destroy_cond;
114 gsize read_buffer_size;
115 guint idle_read_loop_count;
118 struct _ImageLoaderClass {
122 void (*area_ready)(ImageLoader *, guint x, guint y, guint w, guint h, gpointer);
123 void (*error)(ImageLoader *, gpointer);
124 void (*done)(ImageLoader *, gpointer);
125 void (*percent)(ImageLoader *, gdouble, gpointer);
128 GType image_loader_get_type(void);
130 ImageLoader *image_loader_new(FileData *fd);
132 void image_loader_free(ImageLoader *il);
135 * @headerfile image_loader_delay_area_ready
136 * delay area_ready signals
138 void image_loader_delay_area_ready(ImageLoader *il, gboolean enable);
141 * @headerfile image_loader_set_requested_size
142 * Speed up loading when you only need at most width x height size image,
143 * only the jpeg GdkPixbuf loader benefits from it - so there is no
144 * guarantee that the image will scale down to the requested size..
146 void image_loader_set_requested_size(ImageLoader *il, gint width, gint height);
148 void image_loader_set_buffer_size(ImageLoader *il, guint size);
151 * @headerfile image_loader_set_priority
152 * this only has effect if used before image_loader_start()
153 * default is G_PRIORITY_DEFAULT_IDLE
155 void image_loader_set_priority(ImageLoader *il, gint priority);
157 gboolean image_loader_start(ImageLoader *il);
160 GdkPixbuf *image_loader_get_pixbuf(ImageLoader *il);
161 gdouble image_loader_get_percent(ImageLoader *il);
162 gboolean image_loader_get_is_done(ImageLoader *il);
163 FileData *image_loader_get_fd(ImageLoader *il);
164 gboolean image_loader_get_shrunk(ImageLoader *il);
165 const gchar *image_loader_get_error(ImageLoader *il);
167 gboolean image_load_dimensions(FileData *fd, gint *width, gint *height);
170 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */