added possibility to redraw only the parts of image that are already
[geeqie.git] / src / image-load.h
1 /*
2  * Geeqie
3  * (C) 2004 John Ellis
4  * Copyright (C) 2008 The Geeqie Team
5  *
6  * Author: John Ellis
7  *
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!
11  */
12
13
14 #ifndef IMAGE_LOAD_H
15 #define IMAGE_LOAD_H
16
17 #define TYPE_IMAGE_LOADER               (image_loader_get_type())
18
19 //typedef struct _ImageLoader ImageLoader;
20 typedef struct _ImageLoaderClass ImageLoaderClass;
21
22 struct _ImageLoader
23 {
24         GObject parent;
25         
26         /*< private >*/
27         GdkPixbuf *pixbuf;
28         FileData *fd;
29         gchar *path;
30
31         gint bytes_read;
32         gint bytes_total;
33
34         gint preview;
35
36         gint requested_width;
37         gint requested_height;
38         gint shrunk;
39
40         gint done;
41         gint idle_id;
42         gint idle_priority;
43
44         GdkPixbufLoader *loader;
45
46         gint idle_done_id;
47         GList *area_param_list;
48         GList *area_param_delayed_list;
49         
50         gint delay_area_ready;
51         
52         GMutex *data_mutex;
53         gint stopping;
54         gint can_destroy;
55         GCond *can_destroy_cond;
56         gboolean thread;
57
58         guchar *mapped_file;
59         gint read_buffer_size;
60         gint idle_read_loop_count;
61 };
62
63 struct _ImageLoaderClass {
64         GObjectClass parent;
65         
66         /* class members */
67         void (*area_ready)(ImageLoader *, guint x, guint y, guint w, guint h, gpointer);
68         void (*error)(ImageLoader *, gpointer);
69         void (*done)(ImageLoader *, gpointer);
70         void (*percent)(ImageLoader *, gdouble, gpointer);
71 };
72
73 GType image_loader_get_type(void);
74
75 ImageLoader *image_loader_new(FileData *fd);
76
77 void image_loader_free(ImageLoader *il);
78
79 /* delay area_ready signals */
80 void image_loader_delay_area_ready(ImageLoader *il, gint enable);
81
82 /* Speed up loading when you only need at most width x height size image,
83  * only the jpeg GdkPixbuf loader benefits from it - so there is no
84  * guarantee that the image will scale down to the requested size..
85  */
86 void image_loader_set_requested_size(ImageLoader *il, gint width, gint height);
87
88 void image_loader_set_buffer_size(ImageLoader *il, guint size);
89
90 /* this only has effect if used before image_loader_start()
91  * default is G_PRIORITY_DEFAULT_IDLE
92  */
93 void image_loader_set_priority(ImageLoader *il, gint priority);
94
95 gint image_loader_start(ImageLoader *il);
96
97
98 GdkPixbuf *image_loader_get_pixbuf(ImageLoader *il);
99 gchar *image_loader_get_format(ImageLoader *il);
100 gdouble image_loader_get_percent(ImageLoader *il);
101 gint image_loader_get_is_done(ImageLoader *il);
102 FileData *image_loader_get_fd(ImageLoader *il);
103 gint image_loader_get_shrunk(ImageLoader *il);
104
105 gint image_load_dimensions(FileData *fd, gint *width, gint *height);
106
107 #endif