Mercurial > geeqie.yaz
annotate src/image.c @ 1678:c029adbabb70
do not try to reload deleted image
deleted image is replaced by the next one from the list, keep
the old image displayed until the new one is set
author | nadvornik |
---|---|
date | Fri, 24 Jul 2009 12:56:54 +0000 |
parents | 56115e934133 |
children | 1b790ab146ab |
rev | line source |
---|---|
1 | 1 /* |
196 | 2 * Geeqie |
115
53b2bfdcff69
Tue Nov 28 11:54:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
114
diff
changeset
|
3 * (C) 2006 John Ellis |
1284 | 4 * Copyright (C) 2008 - 2009 The Geeqie Team |
1 | 5 * |
6 * Author: John Ellis | |
7 * | |
9 | 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! | |
1 | 11 */ |
12 | |
9 | 13 |
281 | 14 #include "main.h" |
1 | 15 #include "image.h" |
9 | 16 |
17 | |
18 #include "collect.h" | |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
19 #include "color-man.h" |
9 | 20 #include "exif.h" |
1288 | 21 #include "metadata.h" |
480
805c3258d228
Make histogram depends on image window not layout window.
zas_
parents:
475
diff
changeset
|
22 #include "histogram.h" |
507 | 23 #include "image-load.h" |
415 | 24 #include "image-overlay.h" |
284 | 25 #include "layout.h" |
26 #include "layout_image.h" | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
27 #include "pixbuf-renderer.h" |
9 | 28 #include "pixbuf_util.h" |
29 #include "ui_fileops.h" | |
30 | |
586 | 31 #include "filedata.h" |
846 | 32 #include "filecache.h" |
138 | 33 |
9 | 34 #include <math.h> |
35 | |
26
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
36 static GList *image_list = NULL; |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
37 |
61
0c912a2d94f1
Mon Jun 13 20:22:58 2005 John Ellis <johne@verizon.net>
gqview
parents:
42
diff
changeset
|
38 static void image_update_title(ImageWindow *imd); |
115
53b2bfdcff69
Tue Nov 28 11:54:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
114
diff
changeset
|
39 static void image_read_ahead_start(ImageWindow *imd); |
846 | 40 static void image_cache_set(ImageWindow *imd, FileData *fd); |
61
0c912a2d94f1
Mon Jun 13 20:22:58 2005 John Ellis <johne@verizon.net>
gqview
parents:
42
diff
changeset
|
41 |
1 | 42 /* |
9 | 43 *------------------------------------------------------------------- |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
44 * 'signals' |
9 | 45 *------------------------------------------------------------------- |
46 */ | |
47 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
48 static void image_click_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data) |
9 | 49 { |
50 ImageWindow *imd = data; | |
51 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
52 if (imd->func_button) |
9 | 53 { |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
54 imd->func_button(imd, event, imd->data_button); |
9 | 55 } |
56 } | |
57 | |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
58 static void image_drag_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data) |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
59 { |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
60 ImageWindow *imd = data; |
129 | 61 gint width, height; |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
62 |
129 | 63 pixbuf_renderer_get_scaled_size(pr, &width, &height); |
442 | 64 |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
65 if (imd->func_drag) |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
66 { |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
67 imd->func_drag(imd, event, |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
68 (gfloat)(pr->drag_last_x - event->x) / width, |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
69 (gfloat)(pr->drag_last_y - event->y) / height, |
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
70 imd->data_button); |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
71 } |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
72 } |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
73 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
74 static void image_scroll_notify_cb(PixbufRenderer *pr, gpointer data) |
9 | 75 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
76 ImageWindow *imd = data; |
9 | 77 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
78 if (imd->func_scroll_notify && pr->scale) |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
79 { |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
80 imd->func_scroll_notify(imd, |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
81 (gint)((gdouble)pr->x_scroll / pr->scale), |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
82 (gint)((gdouble)pr->y_scroll / pr->scale), |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
83 (gint)((gdouble)pr->image_width - pr->vis_width / pr->scale), |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
84 (gint)((gdouble)pr->image_height - pr->vis_height / pr->scale), |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
85 imd->data_scroll_notify); |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
86 } |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
87 } |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
88 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
89 static void image_update_util(ImageWindow *imd) |
1 | 90 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
91 if (imd->func_update) imd->func_update(imd, imd->data_update); |
9 | 92 } |
93 | |
25
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
94 static void image_zoom_cb(PixbufRenderer *pr, gdouble zoom, gpointer data) |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
95 { |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
96 ImageWindow *imd = data; |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
97 |
61
0c912a2d94f1
Mon Jun 13 20:22:58 2005 John Ellis <johne@verizon.net>
gqview
parents:
42
diff
changeset
|
98 if (imd->title_show_zoom) image_update_title(imd); |
415 | 99 if (imd->overlay_show_zoom) image_osd_update(imd); |
100 | |
25
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
101 image_update_util(imd); |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
102 } |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
103 |
1431 | 104 static void image_complete_util(ImageWindow *imd, gboolean preload) |
9 | 105 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
106 if (imd->il && image_get_pixbuf(imd) != image_loader_get_pixbuf(imd->il)) return; |
9 | 107 |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
108 DEBUG_1("%s image load completed \"%s\" (%s)", get_exec_time(), |
442 | 109 (preload) ? (imd->read_ahead_fd ? imd->read_ahead_fd->path : "null") : |
110 (imd->image_fd ? imd->image_fd->path : "null"), | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
111 (preload) ? "preload" : "current"); |
9 | 112 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
113 if (!preload) imd->completed = TRUE; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
114 if (imd->func_complete) imd->func_complete(imd, preload, imd->data_complete); |
1 | 115 } |
116 | |
25
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
117 static void image_render_complete_cb(PixbufRenderer *pr, gpointer data) |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
118 { |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
119 ImageWindow *imd = data; |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
120 |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
121 image_complete_util(imd, FALSE); |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
122 } |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
123 |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
124 static void image_state_set(ImageWindow *imd, ImageState state) |
9 | 125 { |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
126 if (state == IMAGE_STATE_NONE) |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
127 { |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
128 imd->state = state; |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
129 } |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
130 else |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
131 { |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
132 imd->state |= state; |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
133 } |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
134 if (imd->func_state) imd->func_state(imd, state, imd->data_state); |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
135 } |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
136 |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
137 static void image_state_unset(ImageWindow *imd, ImageState state) |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
138 { |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
139 imd->state &= ~state; |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
140 if (imd->func_state) imd->func_state(imd, state, imd->data_state); |
1 | 141 } |
142 | |
143 /* | |
9 | 144 *------------------------------------------------------------------- |
145 * misc | |
146 *------------------------------------------------------------------- | |
147 */ | |
148 | |
149 static void image_update_title(ImageWindow *imd) | |
1 | 150 { |
9 | 151 gchar *title = NULL; |
152 gchar *zoom = NULL; | |
153 gchar *collection = NULL; | |
154 | |
155 if (!imd->top_window) return; | |
156 | |
157 if (imd->collection && collection_to_number(imd->collection) >= 0) | |
158 { | |
987 | 159 const gchar *name = imd->collection->name; |
9 | 160 if (!name) name = _("Untitled"); |
987 | 161 collection = g_strdup_printf(_(" (Collection %s)"), name); |
9 | 162 } |
163 | |
164 if (imd->title_show_zoom) | |
1 | 165 { |
9 | 166 gchar *buf = image_zoom_get_as_text(imd); |
167 zoom = g_strconcat(" [", buf, "]", NULL); | |
168 g_free(buf); | |
1 | 169 } |
170 | |
9 | 171 title = g_strdup_printf("%s%s%s%s%s%s", |
172 imd->title ? imd->title : "", | |
138 | 173 imd->image_fd ? imd->image_fd->name : "", |
9 | 174 zoom ? zoom : "", |
175 collection ? collection : "", | |
138 | 176 imd->image_fd ? " - " : "", |
9 | 177 imd->title_right ? imd->title_right : ""); |
178 | |
179 gtk_window_set_title(GTK_WINDOW(imd->top_window), title); | |
180 | |
181 g_free(title); | |
182 g_free(zoom); | |
183 g_free(collection); | |
184 } | |
185 | |
186 /* | |
187 *------------------------------------------------------------------- | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
188 * rotation, flip, etc. |
9 | 189 *------------------------------------------------------------------- |
190 */ | |
191 | |
1431 | 192 static gboolean image_post_process_color(ImageWindow *imd, gint start_row, gboolean run_in_bg) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
193 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
194 ColorMan *cm; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
195 ColorManProfileType input_type; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
196 ColorManProfileType screen_type; |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
197 const gchar *input_file; |
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
198 const gchar *screen_file; |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
995
diff
changeset
|
199 guchar *profile = NULL; |
449 | 200 guint profile_len; |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
201 ExifData *exif; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
202 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
203 if (imd->cm) return FALSE; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
204 |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
205 if (imd->color_profile_input >= COLOR_PROFILE_FILE && |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
206 imd->color_profile_input < COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
207 { |
1356
681e79dd0820
Slightly modify access_file() and use it to test profile files existence and read access.
zas_
parents:
1346
diff
changeset
|
208 const gchar *file = options->color_profile.input_file[imd->color_profile_input - COLOR_PROFILE_FILE]; |
681e79dd0820
Slightly modify access_file() and use it to test profile files existence and read access.
zas_
parents:
1346
diff
changeset
|
209 |
1362 | 210 if (!is_readable_file(file)) return FALSE; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
211 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
212 input_type = COLOR_PROFILE_FILE; |
1356
681e79dd0820
Slightly modify access_file() and use it to test profile files existence and read access.
zas_
parents:
1346
diff
changeset
|
213 input_file = file; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
214 } |
442 | 215 else if (imd->color_profile_input >= COLOR_PROFILE_SRGB && |
216 imd->color_profile_input < COLOR_PROFILE_FILE) | |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
217 { |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
218 input_type = imd->color_profile_input; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
219 input_file = NULL; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
220 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
221 else |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
222 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
223 return FALSE; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
224 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
225 |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
226 if (imd->color_profile_screen == 1 && |
1362 | 227 is_readable_file(options->color_profile.screen_file)) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
228 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
229 screen_type = COLOR_PROFILE_FILE; |
327 | 230 screen_file = options->color_profile.screen_file; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
231 } |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
232 else if (imd->color_profile_screen == 0) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
233 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
234 screen_type = COLOR_PROFILE_SRGB; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
235 screen_file = NULL; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
236 } |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
237 else |
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
238 { |
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
239 return FALSE; |
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
240 } |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
241 |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
242 |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
243 imd->color_profile_from_image = COLOR_PROFILE_NONE; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
244 |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
245 exif = exif_read_fd(imd->image_fd); |
1357
4ca837d74999
image_post_process_color(): remove exif parameter, just extract it when needed.
zas_
parents:
1356
diff
changeset
|
246 |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
247 if (exif) |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
248 { |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
249 profile = exif_get_color_profile(exif, &profile_len); |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
250 if (profile) |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
251 { |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
252 if (!imd->color_profile_use_image) |
424 | 253 { |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
254 g_free(profile); |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
255 profile = NULL; |
424 | 256 } |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
257 DEBUG_1("Found embedded color profile"); |
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
258 imd->color_profile_from_image = COLOR_PROFILE_MEM; |
115
53b2bfdcff69
Tue Nov 28 11:54:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
114
diff
changeset
|
259 } |
1364 | 260 else |
261 { | |
262 gchar *interop_index = exif_get_data_as_text(exif, "Exif.Iop.InteroperabilityIndex"); | |
263 | |
264 if (interop_index) | |
265 { | |
266 /* Exif 2.21 specification */ | |
267 if (!strcmp(interop_index, "R98")) | |
268 { | |
269 imd->color_profile_from_image = COLOR_PROFILE_SRGB; | |
270 DEBUG_1("Found EXIF 2.21 ColorSpace of sRGB"); | |
271 } | |
272 else if (!strcmp(interop_index, "R03")) | |
273 { | |
274 imd->color_profile_from_image = COLOR_PROFILE_ADOBERGB; | |
275 DEBUG_1("Found EXIF 2.21 ColorSpace of AdobeRGB"); | |
276 } | |
277 g_free(interop_index); | |
278 } | |
279 else | |
280 { | |
281 gint cs; | |
282 | |
283 /* ColorSpace == 1 specifies sRGB per EXIF 2.2 */ | |
284 if (!exif_get_integer(exif, "Exif.Photo.ColorSpace", &cs)) cs = 0; | |
285 if (cs == 1) | |
286 { | |
287 imd->color_profile_from_image = COLOR_PROFILE_SRGB; | |
288 DEBUG_1("Found EXIF 2.2 ColorSpace of sRGB"); | |
289 } | |
290 else if (cs == 2) | |
291 { | |
292 /* non-standard way of specifying AdobeRGB (used by some software) */ | |
293 imd->color_profile_from_image = COLOR_PROFILE_ADOBERGB; | |
294 DEBUG_1("Found EXIF 2.2 ColorSpace of AdobeRGB"); | |
295 } | |
296 } | |
297 | |
298 if (imd->color_profile_use_image && imd->color_profile_from_image != COLOR_PROFILE_NONE) | |
299 { | |
300 input_type = imd->color_profile_from_image; | |
301 input_file = NULL; | |
302 } | |
303 } | |
304 | |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
305 exif_free_fd(imd->image_fd, exif); |
114
50fc73e08550
Mon Nov 27 01:23:23 2006 John Ellis <johne@verizon.net>
gqview
parents:
113
diff
changeset
|
306 } |
1363
d87deb05d59f
Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
zas_
parents:
1362
diff
changeset
|
307 |
176
695e1ad3b169
simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents:
175
diff
changeset
|
308 |
449 | 309 if (profile) |
114
50fc73e08550
Mon Nov 27 01:23:23 2006 John Ellis <johne@verizon.net>
gqview
parents:
113
diff
changeset
|
310 { |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
311 cm = color_man_new_embedded(run_in_bg ? imd : NULL, NULL, |
449 | 312 profile, profile_len, |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
313 screen_type, screen_file); |
449 | 314 g_free(profile); |
114
50fc73e08550
Mon Nov 27 01:23:23 2006 John Ellis <johne@verizon.net>
gqview
parents:
113
diff
changeset
|
315 } |
442 | 316 else |
114
50fc73e08550
Mon Nov 27 01:23:23 2006 John Ellis <johne@verizon.net>
gqview
parents:
113
diff
changeset
|
317 { |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
318 cm = color_man_new(run_in_bg ? imd : NULL, NULL, |
114
50fc73e08550
Mon Nov 27 01:23:23 2006 John Ellis <johne@verizon.net>
gqview
parents:
113
diff
changeset
|
319 input_type, input_file, |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
320 screen_type, screen_file); |
114
50fc73e08550
Mon Nov 27 01:23:23 2006 John Ellis <johne@verizon.net>
gqview
parents:
113
diff
changeset
|
321 } |
50fc73e08550
Mon Nov 27 01:23:23 2006 John Ellis <johne@verizon.net>
gqview
parents:
113
diff
changeset
|
322 |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
323 if (cm) |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
324 { |
116
1bd40943dc2a
Tue Nov 28 13:17:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
115
diff
changeset
|
325 if (start_row > 0) |
1bd40943dc2a
Tue Nov 28 13:17:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
115
diff
changeset
|
326 { |
1bd40943dc2a
Tue Nov 28 13:17:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
115
diff
changeset
|
327 cm->row = start_row; |
1bd40943dc2a
Tue Nov 28 13:17:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
115
diff
changeset
|
328 cm->incremental_sync = TRUE; |
1bd40943dc2a
Tue Nov 28 13:17:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
115
diff
changeset
|
329 } |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
330 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
331 imd->cm = (gpointer)cm; |
442 | 332 #if 0 |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
333 if (run_in_bg) color_man_start_bg(imd->cm, image_post_process_color_cb, imd); |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
334 #endif |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
335 } |
1590
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
336 image_update_util(imd); |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
337 return !!cm; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
338 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
339 |
9 | 340 |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
341 static void image_post_process_tile_color_cb(PixbufRenderer *pr, GdkPixbuf **pixbuf, gint x, gint y, gint w, gint h, gpointer data) |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
342 { |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
343 ImageWindow *imd = (ImageWindow *)data; |
442 | 344 if (imd->cm) color_man_correct_region(imd->cm, *pixbuf, x, y, w, h); |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
345 if (imd->desaturate) pixbuf_desaturate_rect(*pixbuf, x, y, w, h); |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
346 |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
347 } |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
348 |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
349 void image_alter(ImageWindow *imd, AlterType type) |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
350 { |
691 | 351 static const gint rotate_90[] = {1, 6, 7, 8, 5, 2, 3, 4, 1}; |
352 static const gint rotate_90_cc[] = {1, 8, 5, 6, 7, 4, 1, 2, 3}; | |
353 static const gint rotate_180[] = {1, 3, 4, 1, 2, 7, 8, 5, 6}; | |
354 static const gint mirror[] = {1, 2, 1, 4, 3, 6, 5, 8, 7}; | |
355 static const gint flip[] = {1, 4, 3, 2, 1, 8, 7, 6, 5}; | |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
356 |
442 | 357 |
994
c879a4c14f33
Fixed segfaulting when alter image in directory without images.
bruclik
parents:
987
diff
changeset
|
358 if (!imd || !imd->pr || !imd->image_fd) return; |
442 | 359 |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
360 if (imd->orientation < 1 || imd->orientation > 8) imd->orientation = 1; |
442 | 361 |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
362 switch (type) |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
363 { |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
364 case ALTER_ROTATE_90: |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
365 imd->orientation = rotate_90[imd->orientation]; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
366 break; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
367 case ALTER_ROTATE_90_CC: |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
368 imd->orientation = rotate_90_cc[imd->orientation]; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
369 break; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
370 case ALTER_ROTATE_180: |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
371 imd->orientation = rotate_180[imd->orientation]; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
372 break; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
373 case ALTER_MIRROR: |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
374 imd->orientation = mirror[imd->orientation]; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
375 break; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
376 case ALTER_FLIP: |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
377 imd->orientation = flip[imd->orientation]; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
378 break; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
379 case ALTER_DESATURATE: |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
380 imd->desaturate = !imd->desaturate; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
381 break; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
382 case ALTER_NONE: |
439 | 383 imd->orientation = imd->image_fd->exif_orientation ? imd->image_fd->exif_orientation : 1; |
384 imd->desaturate = FALSE; | |
385 break; | |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
386 default: |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
387 return; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
388 break; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
389 } |
434
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
390 |
1567
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
391 if (imd->orientation != imd->image_fd->exif_orientation ? imd->image_fd->exif_orientation : 1) |
434
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
392 { |
1567
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
393 if (!options->metadata.write_orientation) |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
394 { |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
395 /* user_orientation does not work together with options->metadata.write_orientation, |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
396 use either one or the other. |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
397 we must however handle switching metadata.write_orientation on and off, therefore |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
398 we just disable referencing new fd's, not unreferencing the old ones |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
399 */ |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
400 if (imd->image_fd->user_orientation == 0) file_data_ref(imd->image_fd); |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
401 imd->image_fd->user_orientation = imd->orientation; |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
402 } |
434
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
403 } |
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
404 else |
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
405 { |
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
406 if (imd->image_fd->user_orientation != 0) file_data_unref(imd->image_fd); |
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
407 imd->image_fd->user_orientation = 0; |
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
408 } |
1b0aee2b162e
Keep image orientation set by the user during the session.
zas_
parents:
432
diff
changeset
|
409 |
1567
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
410 if (options->metadata.write_orientation) |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
411 { |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
412 if (type == ALTER_NONE) |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
413 { |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
414 metadata_write_revert(imd->image_fd, ORIENTATION_KEY); |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
415 } |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
416 else |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
417 { |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
418 metadata_write_int(imd->image_fd, ORIENTATION_KEY, imd->orientation); |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
419 } |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
420 } |
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
421 |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
422 pixbuf_renderer_set_orientation((PixbufRenderer *)imd->pr, imd->orientation); |
442 | 423 if (imd->cm || imd->desaturate) |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
424 pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, image_post_process_tile_color_cb, (gpointer) imd, (imd->cm != NULL) ); |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
425 else |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
426 pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, NULL, NULL, TRUE); |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
427 } |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
428 |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
429 |
9 | 430 /* |
431 *------------------------------------------------------------------- | |
432 * read ahead (prebuffer) | |
433 *------------------------------------------------------------------- | |
434 */ | |
435 | |
436 static void image_read_ahead_cancel(ImageWindow *imd) | |
437 { | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
438 DEBUG_1("%s read ahead cancelled for :%s", get_exec_time(), imd->read_ahead_fd ? imd->read_ahead_fd->path : "null"); |
9 | 439 |
440 image_loader_free(imd->read_ahead_il); | |
441 imd->read_ahead_il = NULL; | |
442 | |
138 | 443 file_data_unref(imd->read_ahead_fd); |
444 imd->read_ahead_fd = NULL; | |
9 | 445 } |
446 | |
447 static void image_read_ahead_done_cb(ImageLoader *il, gpointer data) | |
448 { | |
449 ImageWindow *imd = data; | |
450 | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
451 DEBUG_1("%s read ahead done for :%s", get_exec_time(), imd->read_ahead_fd->path); |
9 | 452 |
846 | 453 if (!imd->read_ahead_fd->pixbuf) |
9 | 454 { |
846 | 455 imd->read_ahead_fd->pixbuf = image_loader_get_pixbuf(imd->read_ahead_il); |
456 if (imd->read_ahead_fd->pixbuf) | |
457 { | |
458 g_object_ref(imd->read_ahead_fd->pixbuf); | |
459 image_cache_set(imd, imd->read_ahead_fd); | |
460 } | |
9 | 461 } |
462 image_loader_free(imd->read_ahead_il); | |
463 imd->read_ahead_il = NULL; | |
464 | |
465 image_complete_util(imd, TRUE); | |
466 } | |
467 | |
468 static void image_read_ahead_error_cb(ImageLoader *il, gpointer data) | |
469 { | |
470 /* we even treat errors as success, maybe at least some of the file was ok */ | |
471 image_read_ahead_done_cb(il, data); | |
472 } | |
473 | |
474 static void image_read_ahead_start(ImageWindow *imd) | |
475 { | |
476 /* already started ? */ | |
846 | 477 if (!imd->read_ahead_fd || imd->read_ahead_il || imd->read_ahead_fd->pixbuf) return; |
9 | 478 |
479 /* still loading ?, do later */ | |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
480 if (imd->il /*|| imd->cm*/) return; |
9 | 481 |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
482 DEBUG_1("%s read ahead started for :%s", get_exec_time(), imd->read_ahead_fd->path); |
9 | 483 |
138 | 484 imd->read_ahead_il = image_loader_new(imd->read_ahead_fd); |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
485 |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
486 image_loader_delay_area_ready(imd->read_ahead_il, TRUE); /* we will need the area_ready signals later */ |
9 | 487 |
1346
c9949c19a6d0
No space between function name and first parenthesis, it eases greping (see CODING).
zas_
parents:
1338
diff
changeset
|
488 g_signal_connect(G_OBJECT(imd->read_ahead_il), "error", (GCallback)image_read_ahead_error_cb, imd); |
c9949c19a6d0
No space between function name and first parenthesis, it eases greping (see CODING).
zas_
parents:
1338
diff
changeset
|
489 g_signal_connect(G_OBJECT(imd->read_ahead_il), "done", (GCallback)image_read_ahead_done_cb, imd); |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
490 |
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
491 if (!image_loader_start(imd->read_ahead_il)) |
9 | 492 { |
493 image_read_ahead_cancel(imd); | |
494 image_complete_util(imd, TRUE); | |
495 } | |
496 } | |
497 | |
138 | 498 static void image_read_ahead_set(ImageWindow *imd, FileData *fd) |
9 | 499 { |
138 | 500 if (imd->read_ahead_fd && fd && imd->read_ahead_fd == fd) return; |
9 | 501 |
502 image_read_ahead_cancel(imd); | |
503 | |
138 | 504 imd->read_ahead_fd = file_data_ref(fd); |
9 | 505 |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
506 DEBUG_1("read ahead set to :%s", imd->read_ahead_fd->path); |
9 | 507 |
508 image_read_ahead_start(imd); | |
509 } | |
510 | |
511 /* | |
512 *------------------------------------------------------------------- | |
513 * post buffering | |
514 *------------------------------------------------------------------- | |
515 */ | |
516 | |
846 | 517 static void image_cache_release_cb(FileData *fd) |
9 | 518 { |
846 | 519 g_object_unref(fd->pixbuf); |
520 fd->pixbuf = NULL; | |
9 | 521 } |
522 | |
1182
6ae6d77a1f15
Fix up deprecated function and not a prototype warnings.
zas_
parents:
1055
diff
changeset
|
523 static FileCacheData *image_get_cache(void) |
846 | 524 { |
525 static FileCacheData *cache = NULL; | |
848 | 526 if (!cache) cache = file_cache_new(image_cache_release_cb, 1); |
527 file_cache_set_max_size(cache, (gulong)options->image.image_cache_max * 1048576); /* update from options */ | |
846 | 528 return cache; |
529 } | |
530 | |
531 static void image_cache_set(ImageWindow *imd, FileData *fd) | |
532 { | |
847 | 533 g_assert(fd->pixbuf); |
846 | 534 |
847 | 535 file_cache_put(image_get_cache(), fd, (gulong)gdk_pixbuf_get_rowstride(fd->pixbuf) * (gulong)gdk_pixbuf_get_height(fd->pixbuf)); |
1432 | 536 file_data_send_notification(fd, NOTIFY_PIXBUF); /* to update histogram */ |
846 | 537 } |
538 | |
539 static gint image_cache_get(ImageWindow *imd) | |
9 | 540 { |
541 gint success; | |
542 | |
846 | 543 success = file_cache_get(image_get_cache(), imd->image_fd); |
544 if (success) | |
9 | 545 { |
846 | 546 g_assert(imd->image_fd->pixbuf); |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
547 image_change_pixbuf(imd, imd->image_fd->pixbuf, image_zoom_get(imd), FALSE); |
9 | 548 } |
846 | 549 |
1498 | 550 // file_cache_dump(image_get_cache()); |
9 | 551 return success; |
552 } | |
553 | |
554 /* | |
555 *------------------------------------------------------------------- | |
556 * loading | |
557 *------------------------------------------------------------------- | |
558 */ | |
559 | |
560 static void image_load_pixbuf_ready(ImageWindow *imd) | |
561 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
562 if (image_get_pixbuf(imd) || !imd->il) return; |
9 | 563 |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
564 image_change_pixbuf(imd, image_loader_get_pixbuf(imd->il), image_zoom_get(imd), FALSE); |
9 | 565 } |
566 | |
567 static void image_load_area_cb(ImageLoader *il, guint x, guint y, guint w, guint h, gpointer data) | |
568 { | |
569 ImageWindow *imd = data; | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
570 PixbufRenderer *pr; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
571 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
572 pr = (PixbufRenderer *)imd->pr; |
9 | 573 |
574 if (imd->delay_flip && | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
575 pr->pixbuf != image_loader_get_pixbuf(il)) |
9 | 576 { |
577 return; | |
578 } | |
579 | |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
580 if (!pr->pixbuf) image_change_pixbuf(imd, image_loader_get_pixbuf(imd->il), image_zoom_get(imd), TRUE); |
9 | 581 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
582 pixbuf_renderer_area_changed(pr, x, y, w, h); |
9 | 583 } |
584 | |
585 static void image_load_done_cb(ImageLoader *il, gpointer data) | |
1 | 586 { |
587 ImageWindow *imd = data; | |
9 | 588 |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
589 DEBUG_1("%s image done", get_exec_time()); |
9 | 590 |
846 | 591 if (options->image.enable_read_ahead && imd->image_fd && !imd->image_fd->pixbuf && image_loader_get_pixbuf(imd->il)) |
592 { | |
1043 | 593 imd->image_fd->pixbuf = g_object_ref(image_loader_get_pixbuf(imd->il)); |
846 | 594 image_cache_set(imd, imd->image_fd); |
595 } | |
1294 | 596 /* call the callback triggered by image_state after fd->pixbuf is set */ |
597 g_object_set(G_OBJECT(imd->pr), "loading", FALSE, NULL); | |
598 image_state_unset(imd, IMAGE_STATE_LOADING); | |
846 | 599 |
1031 | 600 if (!image_loader_get_pixbuf(imd->il)) |
601 { | |
602 GdkPixbuf *pixbuf; | |
603 | |
604 pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); | |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
605 image_change_pixbuf(imd, pixbuf, image_zoom_get(imd), FALSE); |
1031 | 606 g_object_unref(pixbuf); |
607 | |
608 imd->unknown = TRUE; | |
609 } | |
610 else if (imd->delay_flip && | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
611 image_get_pixbuf(imd) != image_loader_get_pixbuf(imd->il)) |
9 | 612 { |
42
606fcf461a68
Sat May 14 13:04:23 2005 John Ellis <johne@verizon.net>
gqview
parents:
29
diff
changeset
|
613 g_object_set(G_OBJECT(imd->pr), "complete", FALSE, NULL); |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
614 image_change_pixbuf(imd, image_loader_get_pixbuf(imd->il), image_zoom_get(imd), FALSE); |
9 | 615 } |
616 | |
617 image_loader_free(imd->il); | |
618 imd->il = NULL; | |
619 | |
846 | 620 // image_post_process(imd, TRUE); |
9 | 621 |
622 image_read_ahead_start(imd); | |
623 } | |
624 | |
625 static void image_load_error_cb(ImageLoader *il, gpointer data) | |
626 { | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
627 DEBUG_1("%s image error", get_exec_time()); |
9 | 628 |
629 /* even on error handle it like it was done, | |
630 * since we have a pixbuf with _something_ */ | |
631 | |
632 image_load_done_cb(il, data); | |
633 } | |
634 | |
1338 | 635 static void image_load_set_signals(ImageWindow *imd, gboolean override_old_signals) |
636 { | |
637 g_assert(imd->il); | |
638 if (override_old_signals) | |
639 { | |
640 /* override the old signals */ | |
641 g_signal_handlers_disconnect_matched(G_OBJECT(imd->il), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, imd); | |
642 } | |
643 | |
644 g_signal_connect(G_OBJECT(imd->il), "area_ready", (GCallback)image_load_area_cb, imd); | |
645 g_signal_connect(G_OBJECT(imd->il), "error", (GCallback)image_load_error_cb, imd); | |
646 g_signal_connect(G_OBJECT(imd->il), "done", (GCallback)image_load_done_cb, imd); | |
647 } | |
648 | |
9 | 649 /* this read ahead is located here merely for the callbacks, above */ |
650 | |
1431 | 651 static gboolean image_read_ahead_check(ImageWindow *imd) |
9 | 652 { |
138 | 653 if (!imd->read_ahead_fd) return FALSE; |
9 | 654 if (imd->il) return FALSE; |
655 | |
138 | 656 if (!imd->image_fd || imd->read_ahead_fd != imd->image_fd) |
9 | 657 { |
658 image_read_ahead_cancel(imd); | |
659 return FALSE; | |
660 } | |
661 | |
662 if (imd->read_ahead_il) | |
663 { | |
664 imd->il = imd->read_ahead_il; | |
665 imd->read_ahead_il = NULL; | |
666 | |
1338 | 667 image_load_set_signals(imd, TRUE); |
9 | 668 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
669 g_object_set(G_OBJECT(imd->pr), "loading", TRUE, NULL); |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
670 image_state_set(imd, IMAGE_STATE_LOADING); |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
671 |
9 | 672 if (!imd->delay_flip) |
673 { | |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
674 image_change_pixbuf(imd, image_loader_get_pixbuf(imd->il), image_zoom_get(imd), TRUE); |
9 | 675 } |
676 | |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
677 image_loader_delay_area_ready(imd->il, FALSE); /* send the delayed area_ready signals */ |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
678 |
846 | 679 file_data_unref(imd->read_ahead_fd); |
680 imd->read_ahead_fd = NULL; | |
9 | 681 return TRUE; |
682 } | |
846 | 683 else if (imd->read_ahead_fd->pixbuf) |
9 | 684 { |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
685 image_change_pixbuf(imd, imd->read_ahead_fd->pixbuf, image_zoom_get(imd), FALSE); |
9 | 686 |
846 | 687 file_data_unref(imd->read_ahead_fd); |
688 imd->read_ahead_fd = NULL; | |
9 | 689 |
846 | 690 // image_post_process(imd, FALSE); |
9 | 691 return TRUE; |
692 } | |
693 | |
694 image_read_ahead_cancel(imd); | |
695 return FALSE; | |
696 } | |
697 | |
1431 | 698 static gboolean image_load_begin(ImageWindow *imd, FileData *fd) |
9 | 699 { |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
700 DEBUG_1("%s image begin", get_exec_time()); |
9 | 701 |
702 if (imd->il) return FALSE; | |
703 | |
704 imd->completed = FALSE; | |
25
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
705 g_object_set(G_OBJECT(imd->pr), "complete", FALSE, NULL); |
9 | 706 |
846 | 707 if (image_cache_get(imd)) |
9 | 708 { |
847 | 709 DEBUG_1("from cache: %s", imd->image_fd->path); |
9 | 710 return TRUE; |
711 } | |
712 | |
713 if (image_read_ahead_check(imd)) | |
714 { | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
715 DEBUG_1("from read ahead buffer: %s", imd->image_fd->path); |
9 | 716 return TRUE; |
717 } | |
718 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
719 if (!imd->delay_flip && image_get_pixbuf(imd)) |
9 | 720 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
721 PixbufRenderer *pr; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
722 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
723 pr = PIXBUF_RENDERER(imd->pr); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
724 if (pr->pixbuf) g_object_unref(pr->pixbuf); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
725 pr->pixbuf = NULL; |
9 | 726 } |
727 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
728 g_object_set(G_OBJECT(imd->pr), "loading", TRUE, NULL); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
729 |
138 | 730 imd->il = image_loader_new(fd); |
9 | 731 |
1338 | 732 image_load_set_signals(imd, FALSE); |
9 | 733 |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
734 if (!image_loader_start(imd->il)) |
9 | 735 { |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
736 DEBUG_1("image start error"); |
9 | 737 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
738 g_object_set(G_OBJECT(imd->pr), "loading", FALSE, NULL); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
739 |
9 | 740 image_loader_free(imd->il); |
741 imd->il = NULL; | |
742 | |
743 image_complete_util(imd, FALSE); | |
744 | |
745 return FALSE; | |
746 } | |
747 | |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
748 image_state_set(imd, IMAGE_STATE_LOADING); |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
749 |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
750 /* |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
751 if (!imd->delay_flip && !image_get_pixbuf(imd) && image_loader_get_pixbuf(imd->il)) |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
752 { |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
753 image_change_pixbuf(imd, image_loader_get_pixbuf(imd->il), image_zoom_get(imd), TRUE); |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
754 } |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
755 */ |
9 | 756 return TRUE; |
757 } | |
758 | |
759 static void image_reset(ImageWindow *imd) | |
760 { | |
761 /* stops anything currently being done */ | |
762 | |
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
763 DEBUG_1("%s image reset", get_exec_time()); |
9 | 764 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
765 g_object_set(G_OBJECT(imd->pr), "loading", FALSE, NULL); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
766 |
9 | 767 image_loader_free(imd->il); |
768 imd->il = NULL; | |
769 | |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
770 color_man_free((ColorMan *)imd->cm); |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
771 imd->cm = NULL; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
772 |
9 | 773 imd->delay_alter_type = ALTER_NONE; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
774 |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
775 image_state_set(imd, IMAGE_STATE_NONE); |
9 | 776 } |
777 | |
778 /* | |
779 *------------------------------------------------------------------- | |
780 * image changer | |
781 *------------------------------------------------------------------- | |
782 */ | |
783 | |
1431 | 784 static void image_change_complete(ImageWindow *imd, gdouble zoom) |
9 | 785 { |
786 image_reset(imd); | |
1337
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
787 imd->unknown = TRUE; |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
788 |
1337
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
789 if (!imd->image_fd) |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
790 { |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
791 image_change_pixbuf(imd, NULL, zoom, FALSE); |
9 | 792 } |
793 else | |
794 { | |
1337
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
795 |
1362 | 796 if (is_readable_file(imd->image_fd->path)) |
1337
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
797 { |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
798 PixbufRenderer *pr; |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
799 |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
800 pr = PIXBUF_RENDERER(imd->pr); |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
801 pr->zoom = zoom; /* store the zoom, needed by the loader */ |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
802 |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
803 if (image_load_begin(imd, imd->image_fd)) |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
804 { |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
805 imd->unknown = FALSE; |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
806 } |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
807 } |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
808 |
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
809 if (imd->unknown == TRUE) |
9 | 810 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
811 GdkPixbuf *pixbuf; |
1337
091ba3e6aedb
image_change_complete(): reduce code redundancy and implify.
zas_
parents:
1333
diff
changeset
|
812 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
813 pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
814 image_change_pixbuf(imd, pixbuf, zoom, FALSE); |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
815 g_object_unref(pixbuf); |
9 | 816 } |
817 } | |
818 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
819 image_update_util(imd); |
9 | 820 } |
821 | |
138 | 822 static void image_change_real(ImageWindow *imd, FileData *fd, |
9 | 823 CollectionData *cd, CollectInfo *info, gdouble zoom) |
824 { | |
825 | |
826 imd->collection = cd; | |
827 imd->collection_info = info; | |
828 | |
888 | 829 if (imd->auto_refresh && imd->image_fd) |
830 file_data_unregister_real_time_monitor(imd->image_fd); | |
831 | |
138 | 832 file_data_unref(imd->image_fd); |
833 imd->image_fd = file_data_ref(fd); | |
9 | 834 |
888 | 835 |
1431 | 836 image_change_complete(imd, zoom); |
9 | 837 |
838 image_update_title(imd); | |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
839 image_state_set(imd, IMAGE_STATE_IMAGE); |
888 | 840 |
841 if (imd->auto_refresh && imd->image_fd) | |
842 file_data_register_real_time_monitor(imd->image_fd); | |
9 | 843 } |
844 | |
845 /* | |
846 *------------------------------------------------------------------- | |
847 * focus stuff | |
848 *------------------------------------------------------------------- | |
849 */ | |
850 | |
1431 | 851 static void image_focus_paint(ImageWindow *imd, gboolean has_focus, GdkRectangle *area) |
9 | 852 { |
853 GtkWidget *widget; | |
854 | |
855 widget = imd->widget; | |
856 if (!widget->window) return; | |
857 | |
858 if (has_focus) | |
859 { | |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
860 gtk_paint_focus(widget->style, widget->window, GTK_STATE_ACTIVE, |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
861 area, widget, "image_window", |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
862 widget->allocation.x, widget->allocation.y, |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
863 widget->allocation.width - 1, widget->allocation.height - 1); |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
864 } |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
865 else |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
866 { |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
867 gtk_paint_shadow(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN, |
9 | 868 area, widget, "image_window", |
869 widget->allocation.x, widget->allocation.y, | |
442 | 870 widget->allocation.width - 1, widget->allocation.height - 1); |
9 | 871 } |
872 } | |
873 | |
1431 | 874 static gboolean image_focus_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data) |
9 | 875 { |
876 ImageWindow *imd = data; | |
877 | |
878 image_focus_paint(imd, GTK_WIDGET_HAS_FOCUS(widget), &event->area); | |
879 return TRUE; | |
880 } | |
881 | |
1431 | 882 static gboolean image_focus_in_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data) |
9 | 883 { |
884 ImageWindow *imd = data; | |
885 | |
886 GTK_WIDGET_SET_FLAGS(imd->widget, GTK_HAS_FOCUS); | |
887 image_focus_paint(imd, TRUE, NULL); | |
888 | |
1481 | 889 if (imd->func_focus_in) |
890 { | |
891 imd->func_focus_in(imd, imd->data_focus_in); | |
892 } | |
893 | |
9 | 894 return TRUE; |
895 } | |
896 | |
1431 | 897 static gboolean image_focus_out_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data) |
9 | 898 { |
899 ImageWindow *imd = data; | |
900 | |
901 GTK_WIDGET_UNSET_FLAGS(imd->widget, GTK_HAS_FOCUS); | |
902 image_focus_paint(imd, FALSE, NULL); | |
903 | |
904 return TRUE; | |
905 } | |
906 | |
1431 | 907 static gboolean image_scroll_cb(GtkWidget *widget, GdkEventScroll *event, gpointer data) |
9 | 908 { |
909 ImageWindow *imd = data; | |
910 | |
911 if (imd->func_scroll && | |
912 event && event->type == GDK_SCROLL) | |
442 | 913 { |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
914 imd->func_scroll(imd, event, imd->data_scroll); |
9 | 915 return TRUE; |
916 } | |
917 | |
918 return FALSE; | |
919 } | |
920 | |
921 /* | |
922 *------------------------------------------------------------------- | |
923 * public interface | |
924 *------------------------------------------------------------------- | |
925 */ | |
926 | |
927 void image_attach_window(ImageWindow *imd, GtkWidget *window, | |
1431 | 928 const gchar *title, const gchar *title_right, gboolean show_zoom) |
1 | 929 { |
930 imd->top_window = window; | |
931 g_free(imd->title); | |
9 | 932 imd->title = g_strdup(title); |
933 g_free(imd->title_right); | |
934 imd->title_right = g_strdup(title_right); | |
935 imd->title_show_zoom = show_zoom; | |
936 | |
334 | 937 if (!options->image.fit_window_to_image) window = NULL; |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
938 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
939 pixbuf_renderer_set_parent((PixbufRenderer *)imd->pr, (GtkWindow *)window); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
940 |
9 | 941 image_update_title(imd); |
942 } | |
943 | |
944 void image_set_update_func(ImageWindow *imd, | |
945 void (*func)(ImageWindow *imd, gpointer data), | |
946 gpointer data) | |
947 { | |
948 imd->func_update = func; | |
949 imd->data_update = data; | |
1 | 950 } |
951 | |
9 | 952 void image_set_complete_func(ImageWindow *imd, |
1431 | 953 void (*func)(ImageWindow *imd, gboolean preload, gpointer data), |
9 | 954 gpointer data) |
1 | 955 { |
9 | 956 imd->func_complete = func; |
957 imd->data_complete = data; | |
1 | 958 } |
959 | |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
960 void image_set_state_func(ImageWindow *imd, |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
961 void (*func)(ImageWindow *imd, ImageState state, gpointer data), |
9 | 962 gpointer data) |
1 | 963 { |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
964 imd->func_state = func; |
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
965 imd->data_state = data; |
9 | 966 } |
967 | |
968 | |
969 void image_set_button_func(ImageWindow *imd, | |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
970 void (*func)(ImageWindow *, GdkEventButton *event, gpointer), |
9 | 971 gpointer data) |
972 { | |
973 imd->func_button = func; | |
974 imd->data_button = data; | |
975 } | |
976 | |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
977 void image_set_drag_func(ImageWindow *imd, |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
978 void (*func)(ImageWindow *, GdkEventButton *event, gdouble dx, gdouble dy, gpointer), |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
979 gpointer data) |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
980 { |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
981 imd->func_drag = func; |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
982 imd->data_drag = data; |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
983 } |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
984 |
9 | 985 void image_set_scroll_func(ImageWindow *imd, |
868
db6977f8b0f1
Reduce number of parameters (mostly unused), just pass the event pointer.
zas_
parents:
863
diff
changeset
|
986 void (*func)(ImageWindow *, GdkEventScroll *event, gpointer), |
9 | 987 gpointer data) |
1 | 988 { |
9 | 989 imd->func_scroll = func; |
990 imd->data_scroll = data; | |
1 | 991 } |
992 | |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
993 void image_set_scroll_notify_func(ImageWindow *imd, |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
994 void (*func)(ImageWindow *imd, gint x, gint y, gint width, gint height, gpointer data), |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
995 gpointer data) |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
996 { |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
997 imd->func_scroll_notify = func; |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
998 imd->data_scroll_notify = data; |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
999 } |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1000 |
1481 | 1001 void image_set_focus_in_func(ImageWindow *imd, |
1002 void (*func)(ImageWindow *, gpointer), | |
1003 gpointer data) | |
1004 { | |
1005 imd->func_focus_in = func; | |
1006 imd->data_focus_in = data; | |
1007 } | |
1008 | |
9 | 1009 /* path, name */ |
1010 | |
1011 const gchar *image_get_path(ImageWindow *imd) | |
1012 { | |
138 | 1013 if (imd->image_fd == NULL) return NULL; |
1014 return imd->image_fd->path; | |
9 | 1015 } |
1016 | |
1017 const gchar *image_get_name(ImageWindow *imd) | |
1018 { | |
138 | 1019 if (imd->image_fd == NULL) return NULL; |
1020 return imd->image_fd->name; | |
1021 } | |
1022 | |
1023 FileData *image_get_fd(ImageWindow *imd) | |
1024 { | |
1025 return imd->image_fd; | |
9 | 1026 } |
1027 | |
1028 /* merely changes path string, does not change the image! */ | |
138 | 1029 void image_set_fd(ImageWindow *imd, FileData *fd) |
1 | 1030 { |
888 | 1031 if (imd->auto_refresh && imd->image_fd) |
1032 file_data_unregister_real_time_monitor(imd->image_fd); | |
1033 | |
138 | 1034 file_data_unref(imd->image_fd); |
1035 imd->image_fd = file_data_ref(fd); | |
9 | 1036 |
1037 image_update_title(imd); | |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
1038 image_state_set(imd, IMAGE_STATE_IMAGE); |
888 | 1039 |
1040 if (imd->auto_refresh && imd->image_fd) | |
1041 file_data_register_real_time_monitor(imd->image_fd); | |
9 | 1042 } |
1043 | |
1044 /* load a new image */ | |
1045 | |
138 | 1046 void image_change_fd(ImageWindow *imd, FileData *fd, gdouble zoom) |
9 | 1047 { |
138 | 1048 if (imd->image_fd == fd) return; |
9 | 1049 |
138 | 1050 image_change_real(imd, fd, NULL, NULL, zoom); |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1051 } |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1052 |
1431 | 1053 gboolean image_get_image_size(ImageWindow *imd, gint *width, gint *height) |
530
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
513
diff
changeset
|
1054 { |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
513
diff
changeset
|
1055 return pixbuf_renderer_get_image_size(PIXBUF_RENDERER(imd->pr), width, height); |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
513
diff
changeset
|
1056 } |
1d67ef911fa8
fixed connected zoom and scroll that didn't work in some cases
nadvornik
parents:
513
diff
changeset
|
1057 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1058 GdkPixbuf *image_get_pixbuf(ImageWindow *imd) |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1059 { |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1060 return pixbuf_renderer_get_pixbuf((PixbufRenderer *)imd->pr); |
9 | 1061 } |
1062 | |
1431 | 1063 void image_change_pixbuf(ImageWindow *imd, GdkPixbuf *pixbuf, gdouble zoom, gboolean lazy) |
9 | 1064 { |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1065 |
1635 | 1066 /* read_exif and similar functions can actually notice that the file has changed and trigger |
1067 a notification that removes the pixbuf from cache and unrefs it. Therefore we must ref it | |
1068 here before it is taken over by the renderer. */ | |
1251 | 1069 if (pixbuf) g_object_ref(pixbuf); |
1247 | 1070 |
1288 | 1071 if (imd->image_fd) |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1072 { |
1288 | 1073 if (imd->image_fd->user_orientation) |
437
f707aa712b1f
Fix the case "orientation from FileData, color profile from exif".
zas_
parents:
434
diff
changeset
|
1074 { |
1288 | 1075 imd->orientation = imd->image_fd->user_orientation; |
1076 } | |
1077 else if (options->image.exif_rotate_enable) | |
1078 { | |
1567
c776b1310ca6
added an option to write image orientation to the metadata
nadvornik
parents:
1566
diff
changeset
|
1079 imd->orientation = metadata_read_int(imd->image_fd, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT); |
439 | 1080 imd->image_fd->exif_orientation = imd->orientation; |
437
f707aa712b1f
Fix the case "orientation from FileData, color profile from exif".
zas_
parents:
434
diff
changeset
|
1081 } |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1082 } |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1083 |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1084 pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, NULL, NULL, FALSE); |
442 | 1085 if (imd->cm) |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1086 { |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1087 color_man_free(imd->cm); |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1088 imd->cm = NULL; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1089 } |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1090 |
1045
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1091 if (lazy) |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1092 { |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1093 pixbuf_renderer_set_pixbuf_lazy((PixbufRenderer *)imd->pr, pixbuf, zoom, imd->orientation); |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1094 } |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1095 else |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1096 { |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1097 pixbuf_renderer_set_pixbuf((PixbufRenderer *)imd->pr, pixbuf, zoom); |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1098 pixbuf_renderer_set_orientation((PixbufRenderer *)imd->pr, imd->orientation); |
0ab0deb0cfcc
added possibility to redraw only the parts of image that are already
nadvornik
parents:
1043
diff
changeset
|
1099 } |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1100 |
1251 | 1101 if (pixbuf) g_object_unref(pixbuf); |
1247 | 1102 |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1103 if (imd->color_profile_enable) |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1104 { |
1357
4ca837d74999
image_post_process_color(): remove exif parameter, just extract it when needed.
zas_
parents:
1356
diff
changeset
|
1105 image_post_process_color(imd, 0, FALSE); /* TODO: error handling */ |
1288 | 1106 } |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1107 |
442 | 1108 if (imd->cm || imd->desaturate) |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1109 pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, image_post_process_tile_color_cb, (gpointer) imd, (imd->cm != NULL) ); |
442 | 1110 |
117
0c2e1f0a001b
Wed Nov 29 14:28:30 2006 John Ellis <johne@verizon.net>
gqview
parents:
116
diff
changeset
|
1111 image_state_set(imd, IMAGE_STATE_IMAGE); |
9 | 1112 } |
1113 | |
1114 void image_change_from_collection(ImageWindow *imd, CollectionData *cd, CollectInfo *info, gdouble zoom) | |
1115 { | |
1116 if (!cd || !info || !g_list_find(cd->list, info)) return; | |
1117 | |
138 | 1118 image_change_real(imd, info->fd, cd, info, zoom); |
9 | 1119 } |
1120 | |
1121 CollectionData *image_get_collection(ImageWindow *imd, CollectInfo **info) | |
1122 { | |
1123 if (collection_to_number(imd->collection) >= 0) | |
1124 { | |
1125 if (g_list_find(imd->collection->list, imd->collection_info) != NULL) | |
1126 { | |
1127 if (info) *info = imd->collection_info; | |
1128 } | |
1129 else | |
1130 { | |
1131 if (info) *info = NULL; | |
1132 } | |
1133 return imd->collection; | |
1134 } | |
1135 | |
1136 if (info) *info = NULL; | |
1137 return NULL; | |
1138 } | |
1139 | |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1140 static void image_loader_sync_read_ahead_data(ImageLoader *il, gpointer old_data, gpointer data) |
9 | 1141 { |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1142 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_read_ahead_error_cb, old_data)) |
1338 | 1143 g_signal_connect(G_OBJECT(il), "error", (GCallback)image_read_ahead_error_cb, data); |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1144 |
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1145 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_read_ahead_done_cb, old_data)) |
1338 | 1146 g_signal_connect(G_OBJECT(il), "done", (GCallback)image_read_ahead_done_cb, data); |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1147 } |
9 | 1148 |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1149 static void image_loader_sync_data(ImageLoader *il, gpointer old_data, gpointer data) |
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1150 { |
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1151 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_area_cb, old_data)) |
1338 | 1152 g_signal_connect(G_OBJECT(il), "area_ready", (GCallback)image_load_area_cb, data); |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1153 |
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1154 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_error_cb, old_data)) |
1338 | 1155 g_signal_connect(G_OBJECT(il), "error", (GCallback)image_load_error_cb, data); |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1156 |
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1157 if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_done_cb, old_data)) |
1338 | 1158 g_signal_connect(G_OBJECT(il), "done", (GCallback)image_load_done_cb, data); |
1 | 1159 } |
1160 | |
9 | 1161 /* this is more like a move function |
24
104e34f9ab1f
Wed Mar 23 00:22:28 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1162 * it moves most data from source to imd |
9 | 1163 */ |
1164 void image_change_from_image(ImageWindow *imd, ImageWindow *source) | |
1165 { | |
1166 if (imd == source) return; | |
1167 | |
1168 imd->unknown = source->unknown; | |
1169 | |
1170 imd->collection = source->collection; | |
1171 imd->collection_info = source->collection_info; | |
1172 | |
1173 image_loader_free(imd->il); | |
1174 imd->il = NULL; | |
1175 | |
846 | 1176 image_set_fd(imd, image_get_fd(source)); |
1177 | |
1178 | |
24
104e34f9ab1f
Wed Mar 23 00:22:28 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1179 if (source->il) |
9 | 1180 { |
863
8ddd00cc8b69
fixed crash in entering fullscreen during loading
nadvornik
parents:
848
diff
changeset
|
1181 imd->il = source->il; |
8ddd00cc8b69
fixed crash in entering fullscreen during loading
nadvornik
parents:
848
diff
changeset
|
1182 source->il = NULL; |
9 | 1183 |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1184 image_loader_sync_data(imd->il, source, imd); |
9 | 1185 |
1186 imd->delay_alter_type = source->delay_alter_type; | |
1187 source->delay_alter_type = ALTER_NONE; | |
1188 } | |
1189 | |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1190 imd->color_profile_enable = source->color_profile_enable; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1191 imd->color_profile_input = source->color_profile_input; |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
1192 imd->color_profile_screen = source->color_profile_screen; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1193 imd->color_profile_use_image = source->color_profile_use_image; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1194 color_man_free((ColorMan *)imd->cm); |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1195 imd->cm = NULL; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1196 if (source->cm) |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1197 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1198 ColorMan *cm; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1199 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1200 imd->cm = source->cm; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1201 source->cm = NULL; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1202 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1203 cm = (ColorMan *)imd->cm; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1204 cm->imd = imd; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1205 cm->func_done_data = imd; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1206 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1207 |
9 | 1208 image_loader_free(imd->read_ahead_il); |
1209 imd->read_ahead_il = source->read_ahead_il; | |
1210 source->read_ahead_il = NULL; | |
1012
fe82830ab8fd
converted image loader to a GObject and use signals for notification
nadvornik
parents:
1000
diff
changeset
|
1211 if (imd->read_ahead_il) image_loader_sync_read_ahead_data(imd->read_ahead_il, source, imd); |
9 | 1212 |
138 | 1213 file_data_unref(imd->read_ahead_fd); |
1214 imd->read_ahead_fd = source->read_ahead_fd; | |
1215 source->read_ahead_fd = NULL; | |
9 | 1216 |
1217 imd->completed = source->completed; | |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1218 imd->state = source->state; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1219 source->state = IMAGE_STATE_NONE; |
442 | 1220 |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1221 imd->orientation = source->orientation; |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1222 imd->desaturate = source->desaturate; |
9 | 1223 |
24
104e34f9ab1f
Wed Mar 23 00:22:28 2005 John Ellis <johne@verizon.net>
gqview
parents:
23
diff
changeset
|
1224 pixbuf_renderer_move(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr)); |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1225 |
442 | 1226 if (imd->cm || imd->desaturate) |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1227 pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, image_post_process_tile_color_cb, (gpointer) imd, (imd->cm != NULL) ); |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1228 else |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1229 pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, NULL, NULL, TRUE); |
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1230 |
9 | 1231 } |
1232 | |
1233 /* manipulation */ | |
1234 | |
1235 void image_area_changed(ImageWindow *imd, gint x, gint y, gint width, gint height) | |
1236 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1237 pixbuf_renderer_area_changed((PixbufRenderer *)imd->pr, x, y, width, height); |
9 | 1238 } |
1239 | |
1240 void image_reload(ImageWindow *imd) | |
1241 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1242 if (pixbuf_renderer_get_tiles((PixbufRenderer *)imd->pr)) return; |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1243 |
1431 | 1244 image_change_complete(imd, image_zoom_get(imd)); |
9 | 1245 } |
1246 | |
1247 void image_scroll(ImageWindow *imd, gint x, gint y) | |
1248 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1249 pixbuf_renderer_scroll((PixbufRenderer *)imd->pr, x, y); |
9 | 1250 } |
1251 | |
13
ef790149ae21
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
12
diff
changeset
|
1252 void image_scroll_to_point(ImageWindow *imd, gint x, gint y, |
ef790149ae21
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
12
diff
changeset
|
1253 gdouble x_align, gdouble y_align) |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1254 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1255 pixbuf_renderer_scroll_to_point((PixbufRenderer *)imd->pr, x, y, x_align, y_align); |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1256 } |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1257 |
131 | 1258 void image_get_scroll_center(ImageWindow *imd, gdouble *x, gdouble *y) |
1259 { | |
1260 pixbuf_renderer_get_scroll_center(PIXBUF_RENDERER(imd->pr), x, y); | |
1261 } | |
1262 | |
1263 void image_set_scroll_center(ImageWindow *imd, gdouble x, gdouble y) | |
1264 { | |
1265 pixbuf_renderer_set_scroll_center(PIXBUF_RENDERER(imd->pr), x, y); | |
1266 } | |
1267 | |
9 | 1268 void image_zoom_adjust(ImageWindow *imd, gdouble increment) |
1269 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1270 pixbuf_renderer_zoom_adjust((PixbufRenderer *)imd->pr, increment); |
9 | 1271 } |
1272 | |
1273 void image_zoom_adjust_at_point(ImageWindow *imd, gdouble increment, gint x, gint y) | |
1274 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1275 pixbuf_renderer_zoom_adjust_at_point((PixbufRenderer *)imd->pr, increment, x, y); |
9 | 1276 } |
1277 | |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1278 void image_zoom_set_limits(ImageWindow *imd, gdouble min, gdouble max) |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1279 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1280 pixbuf_renderer_zoom_set_limits((PixbufRenderer *)imd->pr, min, max); |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1281 } |
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1282 |
9 | 1283 void image_zoom_set(ImageWindow *imd, gdouble zoom) |
1284 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1285 pixbuf_renderer_zoom_set((PixbufRenderer *)imd->pr, zoom); |
9 | 1286 } |
1287 | |
1269 | 1288 void image_zoom_set_fill_geometry(ImageWindow *imd, gboolean vertical) |
9 | 1289 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1290 PixbufRenderer *pr; |
9 | 1291 gdouble zoom; |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1292 gint width, height; |
9 | 1293 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1294 pr = (PixbufRenderer *)imd->pr; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1295 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1296 if (!pixbuf_renderer_get_pixbuf(pr) || |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1297 !pixbuf_renderer_get_image_size(pr, &width, &height)) return; |
9 | 1298 |
1299 if (vertical) | |
1300 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1301 zoom = (gdouble)pr->window_height / height; |
9 | 1302 } |
1303 else | |
1304 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1305 zoom = (gdouble)pr->window_width / width; |
9 | 1306 } |
1307 | |
1308 if (zoom < 1.0) | |
1309 { | |
1310 zoom = 0.0 - 1.0 / zoom; | |
1 | 1311 } |
9 | 1312 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1313 pixbuf_renderer_zoom_set(pr, zoom); |
9 | 1314 } |
1315 | |
1316 gdouble image_zoom_get(ImageWindow *imd) | |
1317 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1318 return pixbuf_renderer_zoom_get((PixbufRenderer *)imd->pr); |
9 | 1319 } |
1320 | |
1321 gdouble image_zoom_get_real(ImageWindow *imd) | |
1322 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1323 return pixbuf_renderer_zoom_get_scale((PixbufRenderer *)imd->pr); |
9 | 1324 } |
1325 | |
1326 gchar *image_zoom_get_as_text(ImageWindow *imd) | |
1327 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1328 gdouble zoom; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1329 gdouble scale; |
9 | 1330 gdouble l = 1.0; |
1331 gdouble r = 1.0; | |
1332 gint pl = 0; | |
1333 gint pr = 0; | |
1334 gchar *approx = " "; | |
1335 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1336 zoom = image_zoom_get(imd); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1337 scale = image_zoom_get_real(imd); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1338 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1339 if (zoom > 0.0) |
1 | 1340 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1341 l = zoom; |
9 | 1342 } |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1343 else if (zoom < 0.0) |
9 | 1344 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1345 r = 0.0 - zoom; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1346 } |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1347 else if (zoom == 0.0 && scale != 0.0) |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1348 { |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1349 if (scale >= 1.0) |
9 | 1350 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1351 l = scale; |
9 | 1352 } |
1353 else | |
1354 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1355 r = 1.0 / scale; |
9 | 1356 } |
415 | 1357 approx = "~"; |
9 | 1358 } |
1359 | |
1360 if (rint(l) != l) pl = 1; | |
1361 if (rint(r) != r) pr = 1; | |
1362 | |
1363 return g_strdup_printf("%.*f :%s%.*f", pl, l, approx, pr, r); | |
1364 } | |
1365 | |
885
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1366 gdouble image_zoom_get_default(ImageWindow *imd) |
9 | 1367 { |
885
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1368 gdouble zoom = 1.0; |
9 | 1369 |
885
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1370 switch (options->image.zoom_mode) |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1371 { |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1372 case ZOOM_RESET_ORIGINAL: |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1373 break; |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1374 case ZOOM_RESET_FIT_WINDOW: |
9 | 1375 zoom = 0.0; |
885
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1376 break; |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1377 case ZOOM_RESET_NONE: |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1378 if (imd) zoom = image_zoom_get(imd); |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1379 break; |
ad420f2eb789
Use a specific enum for image.zoom_mode values (ZoomMode) and
zas_
parents:
868
diff
changeset
|
1380 } |
1 | 1381 |
1382 return zoom; | |
1383 } | |
1384 | |
9 | 1385 /* read ahead */ |
1386 | |
138 | 1387 void image_prebuffer_set(ImageWindow *imd, FileData *fd) |
9 | 1388 { |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1389 if (pixbuf_renderer_get_tiles((PixbufRenderer *)imd->pr)) return; |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1390 |
138 | 1391 if (fd) |
9 | 1392 { |
846 | 1393 if (!file_cache_get(image_get_cache(), fd)) |
1394 { | |
1395 image_read_ahead_set(imd, fd); | |
1396 } | |
9 | 1397 } |
1398 else | |
1399 { | |
1400 image_read_ahead_cancel(imd); | |
1401 } | |
1402 } | |
1403 | |
888 | 1404 static void image_notify_cb(FileData *fd, NotifyType type, gpointer data) |
9 | 1405 { |
1406 ImageWindow *imd = data; | |
442 | 1407 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1408 if (!imd || !image_get_pixbuf(imd) || |
995 | 1409 /* imd->il || */ /* loading in progress - do not check - it should start from the beginning anyway */ |
891 | 1410 !imd->image_fd || /* nothing to reload */ |
903
c93823609f15
periodic testing of changed files can be now disabled
nadvornik
parents:
891
diff
changeset
|
1411 imd->state == IMAGE_STATE_NONE /* loading not started, no need to reload */ |
c93823609f15
periodic testing of changed files can be now disabled
nadvornik
parents:
891
diff
changeset
|
1412 ) return; |
9 | 1413 |
1432 | 1414 if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE)) && fd == imd->image_fd) |
9 | 1415 { |
1678 | 1416 if ((type & NOTIFY_CHANGE) && fd->change && fd->change->type == FILEDATA_CHANGE_DELETE) |
1417 return; /* keep the image displayed, it will be replaced by the next image from the list soon */ | |
1498 | 1418 DEBUG_1("Notify image: %s %04x", fd->path, type); |
9 | 1419 image_reload(imd); |
1420 } | |
1421 } | |
1422 | |
888 | 1423 void image_auto_refresh_enable(ImageWindow *imd, gboolean enable) |
9 | 1424 { |
888 | 1425 if (!enable && imd->auto_refresh && imd->image_fd) |
1426 file_data_unregister_real_time_monitor(imd->image_fd); | |
9 | 1427 |
888 | 1428 if (enable && !imd->auto_refresh && imd->image_fd) |
1429 file_data_register_real_time_monitor(imd->image_fd); | |
9 | 1430 |
888 | 1431 imd->auto_refresh = enable; |
9 | 1432 } |
1433 | |
1431 | 1434 void image_top_window_set_sync(ImageWindow *imd, gboolean allow_sync) |
9 | 1435 { |
1436 imd->top_window_sync = allow_sync; | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1437 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1438 g_object_set(G_OBJECT(imd->pr), "window_fit", allow_sync, NULL); |
9 | 1439 } |
1440 | |
1441 void image_background_set_color(ImageWindow *imd, GdkColor *color) | |
1442 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1443 pixbuf_renderer_set_color((PixbufRenderer *)imd->pr, color); |
9 | 1444 } |
1445 | |
1622
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1446 void image_background_set_color_from_options(ImageWindow *imd, gboolean fullscreen) |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1447 { |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1448 GdkColor *color = NULL; |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1449 |
1639
56115e934133
the options for custom border color were made independent
nadvornik
parents:
1635
diff
changeset
|
1450 if ((options->image.use_custom_border_color && !fullscreen) || |
56115e934133
the options for custom border color were made independent
nadvornik
parents:
1635
diff
changeset
|
1451 (options->image.use_custom_border_color_in_fullscreen && fullscreen)) |
1622
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1452 { |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1453 color = &options->image.border_color; |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1454 } |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1455 |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1456 image_background_set_color(imd, color); |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1457 } |
fee96b7345e8
Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
zas_
parents:
1590
diff
changeset
|
1458 |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1459 void image_color_profile_set(ImageWindow *imd, |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
1460 gint input_type, gint screen_type, |
1431 | 1461 gboolean use_image) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1462 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1463 if (!imd) return; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1464 |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
1465 if (input_type < 0 || input_type >= COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS || |
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
1466 screen_type < 0 || screen_type > 1) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1467 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1468 return; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1469 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1470 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1471 imd->color_profile_input = input_type; |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
1472 imd->color_profile_screen = screen_type; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1473 imd->color_profile_use_image = use_image; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1474 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1475 |
1431 | 1476 gboolean image_color_profile_get(ImageWindow *imd, |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
1477 gint *input_type, gint *screen_type, |
1431 | 1478 gboolean *use_image) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1479 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1480 if (!imd) return FALSE; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1481 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1482 if (input_type) *input_type = imd->color_profile_input; |
1586
c3416996fd97
Backed out changeset b5608391f479
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1548
diff
changeset
|
1483 if (screen_type) *screen_type = imd->color_profile_screen; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1484 if (use_image) *use_image = imd->color_profile_use_image; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1485 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1486 return TRUE; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1487 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1488 |
1431 | 1489 void image_color_profile_set_use(ImageWindow *imd, gboolean enable) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1490 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1491 if (!imd) return; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1492 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1493 if (imd->color_profile_enable == enable) return; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1494 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1495 imd->color_profile_enable = enable; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1496 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1497 |
1431 | 1498 gboolean image_color_profile_get_use(ImageWindow *imd) |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1499 { |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1500 if (!imd) return FALSE; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1501 |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1502 return imd->color_profile_enable; |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1503 } |
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1504 |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
1505 gint image_color_profile_get_from_image(ImageWindow *imd) |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
1506 { |
1431 | 1507 if (!imd) return COLOR_PROFILE_NONE; |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
1508 |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
1509 return imd->color_profile_from_image; |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
1510 } |
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
1511 |
1590
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1512 gboolean image_color_profile_get_status(ImageWindow *imd, gchar **image_profile, gchar **screen_profile) |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1513 { |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1514 ColorMan *cm; |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1515 if (!imd) return FALSE; |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1516 |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1517 cm = imd->cm; |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1518 if (!cm) return FALSE; |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1519 return color_man_get_status(cm, image_profile, screen_profile); |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1520 } |
69f7270b3b27
improved color management button:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
1587
diff
changeset
|
1521 |
1431 | 1522 void image_set_delay_flip(ImageWindow *imd, gboolean delay) |
9 | 1523 { |
1524 if (!imd || | |
1525 imd->delay_flip == delay) return; | |
1526 | |
1527 imd->delay_flip = delay; | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1528 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1529 g_object_set(G_OBJECT(imd->pr), "delay_flip", delay, NULL); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1530 |
9 | 1531 if (!imd->delay_flip && imd->il) |
1532 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1533 PixbufRenderer *pr; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1534 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1535 pr = PIXBUF_RENDERER(imd->pr); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1536 if (pr->pixbuf) g_object_unref(pr->pixbuf); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1537 pr->pixbuf = NULL; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1538 |
9 | 1539 image_load_pixbuf_ready(imd); |
1540 } | |
1541 } | |
1542 | |
1431 | 1543 void image_to_root_window(ImageWindow *imd, gboolean scaled) |
9 | 1544 { |
1545 GdkScreen *screen; | |
3 | 1546 GdkWindow *rootwindow; |
1547 GdkPixmap *pixmap; | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1548 GdkPixbuf *pixbuf; |
9 | 1549 GdkPixbuf *pb; |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1550 gint width, height; |
9 | 1551 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1552 if (!imd) return; |
9 | 1553 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1554 pixbuf = image_get_pixbuf(imd); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1555 if (!pixbuf) return; |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1556 |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1557 screen = gtk_widget_get_screen(imd->widget); |
9 | 1558 rootwindow = gdk_screen_get_root_window(screen); |
1559 if (gdk_drawable_get_visual(rootwindow) != gdk_visual_get_system()) return; | |
3 | 1560 |
1561 if (scaled) | |
1562 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1563 width = gdk_screen_width(); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1564 height = gdk_screen_height(); |
3 | 1565 } |
1566 else | |
1567 { | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1568 pixbuf_renderer_get_scaled_size((PixbufRenderer *)imd->pr, &width, &height); |
3 | 1569 } |
1570 | |
334 | 1571 pb = gdk_pixbuf_scale_simple(pixbuf, width, height, (GdkInterpType)options->image.zoom_quality); |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1572 |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1573 gdk_pixbuf_render_pixmap_and_mask(pb, &pixmap, NULL, 128); |
3 | 1574 gdk_window_set_back_pixmap(rootwindow, pixmap, FALSE); |
1575 gdk_window_clear(rootwindow); | |
9 | 1576 g_object_unref(pb); |
1577 g_object_unref(pixmap); | |
3 | 1578 |
1579 gdk_flush(); | |
1580 } | |
1581 | |
127 | 1582 void image_select(ImageWindow *imd, gboolean select) |
1583 { | |
1359 | 1584 if (!imd->has_frame) return; |
1585 | |
1586 if (select) | |
127 | 1587 { |
1359 | 1588 gtk_widget_set_state(imd->widget, GTK_STATE_SELECTED); |
1589 gtk_widget_set_state(imd->pr, GTK_STATE_NORMAL); /* do not propagate */ | |
127 | 1590 } |
1359 | 1591 else |
1592 gtk_widget_set_state(imd->widget, GTK_STATE_NORMAL); | |
127 | 1593 } |
1594 | |
174 | 1595 void image_set_selectable(ImageWindow *imd, gboolean selectable) |
1596 { | |
1359 | 1597 if (!imd->has_frame) return; |
1598 | |
1599 gtk_frame_set_shadow_type(GTK_FRAME(imd->frame), GTK_SHADOW_NONE); | |
1600 gtk_container_set_border_width(GTK_CONTAINER(imd->frame), selectable ? 4 : 0); | |
174 | 1601 } |
1602 | |
1482 | 1603 void image_grab_focus(ImageWindow *imd) |
1604 { | |
1605 if (imd->has_frame) | |
1606 { | |
1607 gtk_widget_grab_focus(imd->frame); | |
1608 } | |
1609 else | |
1610 { | |
1611 gtk_widget_grab_focus(imd->widget); | |
1612 } | |
1613 } | |
1614 | |
1615 | |
9 | 1616 /* |
1617 *------------------------------------------------------------------- | |
26
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1618 * prefs sync |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1619 *------------------------------------------------------------------- |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1620 */ |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1621 |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1622 static void image_options_set(ImageWindow *imd) |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1623 { |
334 | 1624 g_object_set(G_OBJECT(imd->pr), "zoom_quality", options->image.zoom_quality, |
1625 "zoom_2pass", options->image.zoom_2pass, | |
1626 "zoom_expand", options->image.zoom_to_fit_allow_expand, | |
1627 "dither_quality", options->image.dither_quality, | |
1628 "scroll_reset", options->image.scroll_reset_method, | |
1629 "cache_display", options->image.tile_cache_max, | |
1630 "window_fit", (imd->top_window_sync && options->image.fit_window_to_image), | |
1631 "window_limit", options->image.limit_window_size, | |
1632 "window_limit_value", options->image.max_window_size, | |
1633 "autofit_limit", options->image.limit_autofit_size, | |
1634 "autofit_limit_value", options->image.max_autofit_size, | |
209
ad78ad18523a
configurable frame around image - geeqie_autofit_maxsize.patch by Laurent MONIN
nadvornik
parents:
208
diff
changeset
|
1635 |
26
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1636 NULL); |
27
9c24765c2d3a
Sat Apr 2 17:28:16 2005 John Ellis <johne@verizon.net>
gqview
parents:
26
diff
changeset
|
1637 |
9c24765c2d3a
Sat Apr 2 17:28:16 2005 John Ellis <johne@verizon.net>
gqview
parents:
26
diff
changeset
|
1638 pixbuf_renderer_set_parent((PixbufRenderer *)imd->pr, (GtkWindow *)imd->top_window); |
26
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1639 } |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1640 |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1641 void image_options_sync(void) |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1642 { |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1643 GList *work; |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1644 |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1645 work = image_list; |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1646 while (work) |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1647 { |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1648 ImageWindow *imd; |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1649 |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1650 imd = work->data; |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1651 work = work->next; |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1652 |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1653 image_options_set(imd); |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1654 } |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1655 } |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1656 |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1657 /* |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1658 *------------------------------------------------------------------- |
9 | 1659 * init / destroy |
1660 *------------------------------------------------------------------- | |
1661 */ | |
1662 | |
1663 static void image_free(ImageWindow *imd) | |
1664 { | |
26
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1665 image_list = g_list_remove(image_list, imd); |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1666 |
888 | 1667 if (imd->auto_refresh && imd->image_fd) |
1668 file_data_unregister_real_time_monitor(imd->image_fd); | |
1669 | |
1670 file_data_unregister_notify_func(image_notify_cb, imd); | |
1671 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1672 image_reset(imd); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1673 |
9 | 1674 image_read_ahead_cancel(imd); |
1675 | |
138 | 1676 file_data_unref(imd->image_fd); |
9 | 1677 g_free(imd->title); |
1678 g_free(imd->title_right); | |
1679 g_free(imd); | |
1680 } | |
1681 | |
1682 static void image_destroy_cb(GtkObject *widget, gpointer data) | |
1683 { | |
1684 ImageWindow *imd = data; | |
1685 image_free(imd); | |
1686 } | |
1687 | |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1688 gboolean selectable_frame_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data) |
151 | 1689 { |
1690 gtk_paint_flat_box(widget->style, | |
442 | 1691 widget->window, |
1692 widget->state, | |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1693 (GTK_FRAME(widget))->shadow_type, |
442 | 1694 NULL, |
1695 widget, | |
1696 NULL, | |
1697 widget->allocation.x + 3, widget->allocation.y + 3, | |
1698 widget->allocation.width - 6, widget->allocation.height - 6); | |
1699 | |
1700 | |
151 | 1701 return FALSE; |
1702 } | |
1703 | |
1704 | |
175 | 1705 void image_set_frame(ImageWindow *imd, gboolean frame) |
1706 { | |
1707 frame = !!frame; | |
442 | 1708 |
175 | 1709 if (frame == imd->has_frame) return; |
442 | 1710 |
175 | 1711 gtk_widget_hide(imd->pr); |
442 | 1712 |
175 | 1713 if (frame) |
1714 { | |
1715 imd->frame = gtk_frame_new(NULL); | |
1043 | 1716 #if GTK_CHECK_VERSION(2,12,0) |
1358 | 1717 g_object_ref(imd->pr); |
1043 | 1718 #else |
1358 | 1719 gtk_widget_ref(imd->pr); |
1043 | 1720 #endif |
175 | 1721 if (imd->has_frame != -1) gtk_container_remove(GTK_CONTAINER(imd->widget), imd->pr); |
1722 gtk_container_add(GTK_CONTAINER(imd->frame), imd->pr); | |
1043 | 1723 |
1724 #if GTK_CHECK_VERSION(2,12,0) | |
1358 | 1725 g_object_unref(imd->pr); |
1043 | 1726 #else |
1358 | 1727 gtk_widget_unref(imd->pr); |
1043 | 1728 #endif |
512
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1729 g_signal_connect(G_OBJECT(imd->frame), "expose_event", |
f9bf33be53ff
Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents:
507
diff
changeset
|
1730 G_CALLBACK(selectable_frame_expose_cb), NULL); |
175 | 1731 |
1732 GTK_WIDGET_SET_FLAGS(imd->frame, GTK_CAN_FOCUS); | |
1733 g_signal_connect(G_OBJECT(imd->frame), "focus_in_event", | |
1734 G_CALLBACK(image_focus_in_cb), imd); | |
1735 g_signal_connect(G_OBJECT(imd->frame), "focus_out_event", | |
1736 G_CALLBACK(image_focus_out_cb), imd); | |
1737 | |
1738 g_signal_connect_after(G_OBJECT(imd->frame), "expose_event", | |
1739 G_CALLBACK(image_focus_expose), imd); | |
1740 | |
1182
6ae6d77a1f15
Fix up deprecated function and not a prototype warnings.
zas_
parents:
1055
diff
changeset
|
1741 #if GTK_CHECK_VERSION(2,14,0) |
1358 | 1742 gtk_box_pack_start(GTK_BOX(imd->widget), imd->frame, TRUE, TRUE, 0); |
1182
6ae6d77a1f15
Fix up deprecated function and not a prototype warnings.
zas_
parents:
1055
diff
changeset
|
1743 #else |
1358 | 1744 gtk_box_pack_start_defaults(GTK_BOX(imd->widget), imd->frame); |
1182
6ae6d77a1f15
Fix up deprecated function and not a prototype warnings.
zas_
parents:
1055
diff
changeset
|
1745 #endif |
1358 | 1746 gtk_widget_show(imd->frame); |
175 | 1747 } |
1748 else | |
1749 { | |
1043 | 1750 #if GTK_CHECK_VERSION(2,12,0) |
1751 g_object_ref(imd->pr); | |
1752 #else | |
175 | 1753 gtk_widget_ref(imd->pr); |
1043 | 1754 #endif |
442 | 1755 if (imd->frame) |
175 | 1756 { |
1757 gtk_container_remove(GTK_CONTAINER(imd->frame), imd->pr); | |
1758 gtk_widget_destroy(imd->frame); | |
1759 imd->frame = NULL; | |
1760 } | |
1182
6ae6d77a1f15
Fix up deprecated function and not a prototype warnings.
zas_
parents:
1055
diff
changeset
|
1761 #if GTK_CHECK_VERSION(2,14,0) |
1358 | 1762 gtk_box_pack_start(GTK_BOX(imd->widget), imd->pr, TRUE, TRUE, 0); |
1182
6ae6d77a1f15
Fix up deprecated function and not a prototype warnings.
zas_
parents:
1055
diff
changeset
|
1763 #else |
175 | 1764 gtk_box_pack_start_defaults(GTK_BOX(imd->widget), imd->pr); |
1182
6ae6d77a1f15
Fix up deprecated function and not a prototype warnings.
zas_
parents:
1055
diff
changeset
|
1765 #endif |
1043 | 1766 |
1767 #if GTK_CHECK_VERSION(2,12,0) | |
1358 | 1768 g_object_unref(imd->pr); |
1043 | 1769 #else |
1358 | 1770 gtk_widget_unref(imd->pr); |
1043 | 1771 #endif |
175 | 1772 } |
1773 | |
1774 gtk_widget_show(imd->pr); | |
442 | 1775 |
175 | 1776 imd->has_frame = frame; |
1777 } | |
1778 | |
1431 | 1779 ImageWindow *image_new(gboolean frame) |
9 | 1780 { |
1781 ImageWindow *imd; | |
1782 | |
1783 imd = g_new0(ImageWindow, 1); | |
12
147f4c4b9025
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
9
diff
changeset
|
1784 |
9 | 1785 imd->unknown = TRUE; |
175 | 1786 imd->has_frame = -1; /* not initialized; for image_set_frame */ |
9 | 1787 imd->delay_alter_type = ALTER_NONE; |
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
109
diff
changeset
|
1788 imd->state = IMAGE_STATE_NONE; |
426
9fe0ca1b5263
show the AdobeRGB profile in the menu, indicate input profile from image
nadvornik
parents:
424
diff
changeset
|
1789 imd->color_profile_from_image = COLOR_PROFILE_NONE; |
398
c4080362d619
image post-processing (rotation and color management) moved to
nadvornik
parents:
386
diff
changeset
|
1790 imd->orientation = 1; |
9 | 1791 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1792 imd->pr = GTK_WIDGET(pixbuf_renderer_new()); |
9 | 1793 |
26
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1794 image_options_set(imd); |
9 | 1795 |
175 | 1796 imd->widget = gtk_vbox_new(0, 0); |
151 | 1797 |
175 | 1798 image_set_frame(imd, frame); |
9 | 1799 |
175 | 1800 image_set_selectable(imd, 0); |
9 | 1801 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1802 g_signal_connect(G_OBJECT(imd->pr), "clicked", |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1803 G_CALLBACK(image_click_cb), imd); |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1804 g_signal_connect(G_OBJECT(imd->pr), "scroll_notify", |
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1805 G_CALLBACK(image_scroll_notify_cb), imd); |
9 | 1806 |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1807 g_signal_connect(G_OBJECT(imd->pr), "scroll_event", |
9 | 1808 G_CALLBACK(image_scroll_cb), imd); |
1809 | |
23
17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
14
diff
changeset
|
1810 g_signal_connect(G_OBJECT(imd->pr), "destroy", |
9 | 1811 G_CALLBACK(image_destroy_cb), imd); |
1812 | |
25
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
1813 g_signal_connect(G_OBJECT(imd->pr), "zoom", |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
1814 G_CALLBACK(image_zoom_cb), imd); |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
1815 g_signal_connect(G_OBJECT(imd->pr), "render_complete", |
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
1816 G_CALLBACK(image_render_complete_cb), imd); |
128
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1817 g_signal_connect(G_OBJECT(imd->pr), "drag", |
98e2632b5d3d
improved connected scroll and active image switching
nadvornik
parents:
127
diff
changeset
|
1818 G_CALLBACK(image_drag_cb), imd); |
25
0c3b353b666e
Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net>
gqview
parents:
24
diff
changeset
|
1819 |
888 | 1820 file_data_register_notify_func(image_notify_cb, imd, NOTIFY_PRIORITY_LOW); |
1821 | |
26
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1822 image_list = g_list_append(image_list, imd); |
acd9885ebd78
Mon Mar 28 20:23:34 2005 John Ellis <johne@verizon.net>
gqview
parents:
25
diff
changeset
|
1823 |
9 | 1824 return imd; |
1825 } | |
1055
1646720364cf
Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents:
1045
diff
changeset
|
1826 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ |