annotate src/thumb.c @ 737:8a8873e7a552

Make shell command and its option rc file options instead of hardcoded strings. This allows users to modify the shell command that execute "editors". Two new options appear in rc file: - shell.path (default to "/bin/sh") - shell.options (default to "-c") These options can only be changed from the rc file, not at runtime. Tests are made to check that shell.path is not empty and lead to an executable file.
author zas_
date Thu, 22 May 2008 20:22:13 +0000
parents 179a7224dde1
children 9bd49e725ad3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1 /*
196
f6e307c7bad6 rename GQview -> Geeqie over the code
nadvornik
parents: 138
diff changeset
2 * Geeqie
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
3 * (C) 2004 John Ellis
475
48c8e49b571c updated copyright in source files
nadvornik
parents: 446
diff changeset
4 * Copyright (C) 2008 The Geeqie Team
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
5 *
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
6 * Author: John Ellis
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
7 *
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
8 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
9 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
10 * This software comes with no warranty of any kind, use at your own risk!
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
11 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
12
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
13
281
9995c5fb202a gqview.h -> main.h
zas_
parents: 213
diff changeset
14 #include "main.h"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
15 #include "thumb.h"
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
16
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
17 #include "cache.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
18 #include "image-load.h"
586
905688aa2317 split filelist.c to filefilter.c and filedata.c
nadvornik
parents: 517
diff changeset
19 #include "filedata.h"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
20 #include "pixbuf_util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
21 #include "thumb_standard.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
22 #include "ui_fileops.h"
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
23
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
24 #include <utime.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
25
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
26
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
27 static void thumb_loader_error_cb(ImageLoader *il, gpointer data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
28 static void thumb_loader_setup(ThumbLoader *tl, gchar *path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
29
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
30 static gint normalize_thumb(gint *width, gint *height, gint max_w, gint max_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
31 static GdkPixbuf *get_xv_thumbnail(gchar *thumb_filename, gint max_w, gint max_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
32
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
33
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
34 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
35 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
36 * thumbnail routines: creation, caching, and maintenance (public)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
37 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
38 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
39
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
40 static gint thumb_loader_save_to_cache(ThumbLoader *tl)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
41 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
42 gchar *cache_dir;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
43 gint success = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
44 mode_t mode = 0755;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
45
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
46 if (!tl || !tl->pixbuf) return FALSE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
47
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
48 cache_dir = cache_get_location(CACHE_TYPE_THUMB, tl->path, FALSE, &mode);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
49
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
50 if (cache_ensure_dir_exists(cache_dir, mode))
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
51 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
52 gchar *cache_path;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
53 gchar *pathl;
715
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
54 gchar *name = g_strconcat(filename_from_path(tl->path), GQ_CACHE_EXT_THUMB, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
55
715
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
56 cache_path = g_build_filename(cache_dir, name, NULL);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
57 g_free(name);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
58
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
59 DEBUG_1("Saving thumb: %s", cache_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
60
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
61 pathl = path_from_utf8(cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
62 success = pixbuf_to_file_as_png(tl->pixbuf, pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
63 if (success)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
64 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
65 struct utimbuf ut;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
66 /* set thumb time to that of source file */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
67
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
68 ut.actime = ut.modtime = filetime(tl->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
69 if (ut.modtime > 0)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
70 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
71 utime(pathl, &ut);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
72 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
73 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
74 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
75 {
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
76 DEBUG_1("Saving failed: %s", pathl);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
77 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
78
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
79 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
80 g_free(cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
81 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
82
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
83 g_free(cache_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
84
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
85 return success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
86 }
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
87
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
88 static gint thumb_loader_mark_failure(ThumbLoader *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
89 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
90 gchar *cache_dir;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
91 gint success = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
92 mode_t mode = 0755;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 333
diff changeset
93
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
94 if (!tl) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
95
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
96 cache_dir = cache_get_location(CACHE_TYPE_THUMB, tl->path, FALSE, &mode);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
97
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
98 if (cache_ensure_dir_exists(cache_dir, mode))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
99 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
100 gchar *cache_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
101 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
102 FILE *f;
715
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
103 gchar *name = g_strconcat(filename_from_path(tl->path), GQ_CACHE_EXT_THUMB, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
104
715
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
105 cache_path = g_build_filename(cache_dir, name, NULL);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
106 g_free(name);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
107
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
108 DEBUG_1("marking thumb failure: %s", cache_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
109
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
110 pathl = path_from_utf8(cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
111 f = fopen(pathl, "w");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
112 if (f)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
113 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
114 struct utimbuf ut;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
115
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 507
diff changeset
116 fclose(f);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
117
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
118 ut.actime = ut.modtime = filetime(tl->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
119 if (ut.modtime > 0)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
120 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
121 utime(pathl, &ut);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
122 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
123
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
124 success = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
125 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
126
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
127 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
128 g_free(cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
129 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
130
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
131 g_free(cache_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
132 return success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
133 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
134
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
135 static void thumb_loader_percent_cb(ImageLoader *il, gdouble percent, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
136 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
137 ThumbLoader *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
138
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
139 tl->percent_done = percent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
140
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
141 if (tl->func_progress) tl->func_progress(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
142 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
143
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
144 static void thumb_loader_done_cb(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
145 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
146 ThumbLoader *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
147 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
148 gint pw, ph;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
149 gint save;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
150
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
151 DEBUG_1("thumb done: %s", tl->path);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
152
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
153 pixbuf = image_loader_get_pixbuf(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
154 if (!pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
155 {
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
156 DEBUG_1("...but no pixbuf: %s", tl->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
157 thumb_loader_error_cb(tl->il, tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
158 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
159 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
160
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
161 pw = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
162 ph = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
163
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
164 if (tl->cache_hit && pw != tl->max_w && ph != tl->max_h)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
165 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
166 /* requested thumbnail size may have changed, load original */
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
167 DEBUG_1("thumbnail size mismatch, regenerating: %s", tl->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
168 tl->cache_hit = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
169
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
170 thumb_loader_setup(tl, tl->path);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
171
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
172 if (!image_loader_start(tl->il, thumb_loader_done_cb, tl))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
173 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
174 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
175 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
176
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
177 DEBUG_1("regeneration failure: %s", tl->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
178 thumb_loader_error_cb(tl->il, tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
179 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
180 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
181 }
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
182
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
183 /* scale ?? */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
184
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
185 if (pw > tl->max_w || ph > tl->max_h)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
186 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
187 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
188
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
189 if (((double)tl->max_w / pw) < ((double)tl->max_h / ph))
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
190 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
191 w = tl->max_w;
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
192 h = (double)w / pw * ph;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
193 if (h < 1) h = 1;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
194 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
195 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
196 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
197 h = tl->max_h;
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
198 w = (double)h / ph * pw;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
199 if (w < 1) w = 1;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
200 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
201
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
202 tl->pixbuf = gdk_pixbuf_scale_simple(pixbuf, w, h, (GdkInterpType)options->thumbnails.quality);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
203 save = TRUE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
204 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
205 else
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
206 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
207 tl->pixbuf = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
208 gdk_pixbuf_ref(tl->pixbuf);
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
209 save = il->shrunk;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
210 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
211
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
212 /* save it ? */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
213 if (tl->cache_enable && save)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
214 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
215 thumb_loader_save_to_cache(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
216 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
217
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
218 if (tl->func_done) tl->func_done(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
219 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
220
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
221 static void thumb_loader_error_cb(ImageLoader *il, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
222 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
223 ThumbLoader *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
224
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
225 /* if at least some of the image is available, go to done_cb */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
226 if (image_loader_get_pixbuf(tl->il) != NULL)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
227 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
228 thumb_loader_done_cb(il, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
229 return;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
230 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
231
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
232 DEBUG_1("thumb error: %s", tl->path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
233
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
234 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
235 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
236
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
237 if (tl->func_error) tl->func_error(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
238 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
239
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
240 static gint thumb_loader_done_delay_cb(gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
241 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
242 ThumbLoader *tl = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
243
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
244 tl->idle_done_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
245
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
246 if (tl->func_done) tl->func_done(tl, tl->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
247
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
248 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
249 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
250
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
251 static void thumb_loader_delay_done(ThumbLoader *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
252 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
253 if (tl->idle_done_id == -1) tl->idle_done_id = g_idle_add(thumb_loader_done_delay_cb, tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
254 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
255
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
256 static void thumb_loader_setup(ThumbLoader *tl, gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
257 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
258 image_loader_free(tl->il);
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 14
diff changeset
259 tl->il = image_loader_new(file_data_new_simple(path));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
260
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
261 if (options->thumbnails.fast)
14
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
262 {
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
263 /* this will speed up jpegs by up to 3x in some cases */
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
264 image_loader_set_requested_size(tl->il, tl->max_w, tl->max_h);
25335c62cd9b ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
265 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
266
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
267 image_loader_set_error_func(tl->il, thumb_loader_error_cb, tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
268 if (tl->func_progress) image_loader_set_percent_func(tl->il, thumb_loader_percent_cb, tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
269 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
270
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
271 void thumb_loader_set_callbacks(ThumbLoader *tl,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
272 ThumbLoaderFunc func_done,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
273 ThumbLoaderFunc func_error,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
274 ThumbLoaderFunc func_progress,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
275 gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
276 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
277 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
278
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
279 if (tl->standard_loader)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
280 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
281 thumb_loader_std_set_callbacks((ThumbLoaderStd *)tl,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
282 (ThumbLoaderStdFunc) func_done,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
283 (ThumbLoaderStdFunc) func_error,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
284 (ThumbLoaderStdFunc) func_progress,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
285 data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
286 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
287 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
288
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
289 tl->func_done = func_done;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
290 tl->func_error = func_error;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
291 tl->func_progress = func_progress;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
292
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
293 tl->data = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
294 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
295
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
296 void thumb_loader_set_cache(ThumbLoader *tl, gint enable_cache, gint local, gint retry_failed)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
297 {
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 333
diff changeset
298 if (!tl) return;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
299
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
300 if (tl->standard_loader)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
301 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
302 thumb_loader_std_set_cache((ThumbLoaderStd *)tl, enable_cache, local, retry_failed);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
303 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
304 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
305
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
306 tl->cache_enable = enable_cache;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
307 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
308 tl->cache_local = local;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
309 tl->cache_retry = retry_failed;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
310 #endif
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
311 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
312
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
313
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
314 gint thumb_loader_start(ThumbLoader *tl, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
315 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
316 gchar *cache_path = NULL;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
317
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
318 if (!tl) return FALSE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
319
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
320 if (tl->standard_loader)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
321 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
322 return thumb_loader_std_start((ThumbLoaderStd *)tl, path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
323 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
324
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
325 if (!tl->path && !path) return FALSE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
326
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
327 if (!tl->path) tl->path = g_strdup(path);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
328
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
329 if (tl->cache_enable)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
330 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
331 cache_path = cache_find_location(CACHE_TYPE_THUMB, tl->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
332
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
333 if (cache_path)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
334 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
335 if (cache_time_valid(cache_path, tl->path))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
336 {
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
337 DEBUG_1("Found in cache:%s", tl->path);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
338
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
339 if (filesize(cache_path) == 0)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
340 {
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
341 DEBUG_1("Broken image mark found:%s", cache_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
342 g_free(cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
343 return FALSE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
344 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
345
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
346 DEBUG_1("Cache location:%s", cache_path);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
347 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
348 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
349 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
350 g_free(cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
351 cache_path = NULL;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
352 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
353 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
354 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
355
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
356 if (!cache_path && options->thumbnails.use_xvpics)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
357 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
358 tl->pixbuf = get_xv_thumbnail(tl->path, tl->max_w, tl->max_h);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
359 if (tl->pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
360 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
361 thumb_loader_delay_done(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
362 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
363 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
364 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
365
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
366 if (cache_path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
367 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
368 thumb_loader_setup(tl, cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
369 g_free(cache_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
370 tl->cache_hit = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
371 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
372 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
373 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
374 thumb_loader_setup(tl, tl->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
375 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
376
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
377 if (!image_loader_start(tl->il, thumb_loader_done_cb, tl))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
378 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
379 /* try from original if cache attempt */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
380 if (tl->cache_hit)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
381 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
382 tl->cache_hit = FALSE;
694
a3218946bd2d Sort out log_printf() vs printf_term() mix up.
zas_
parents: 671
diff changeset
383 log_printf("%s", _("Thumbnail image in cache failed to load, trying to recreate.\n"));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
384
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
385 thumb_loader_setup(tl, tl->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
386 if (image_loader_start(tl->il, thumb_loader_done_cb, tl)) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
387 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
388 /* mark failed thumbnail in cache with 0 byte file */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
389 if (tl->cache_enable)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
390 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
391 thumb_loader_mark_failure(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
392 }
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 333
diff changeset
393
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
394 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
395 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
396 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
397 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
398
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
399 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
400 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
401
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
402 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
403 gint thumb_loader_to_pixmap(ThumbLoader *tl, GdkPixmap **pixmap, GdkBitmap **mask)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
404 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
405 if (!tl || !tl->pixbuf) return -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
406
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
407 gdk_pixbuf_render_pixmap_and_mask(tl->pixbuf, pixmap, mask, 128);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
408
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
409 return thumb_loader_get_space(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
410 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
411 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
412
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
413 GdkPixbuf *thumb_loader_get_pixbuf(ThumbLoader *tl, gint with_fallback)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
414 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
415 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
416
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
417 if (tl && tl->standard_loader)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
418 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
419 return thumb_loader_std_get_pixbuf((ThumbLoaderStd *)tl, with_fallback);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
420 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
421
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
422 if (tl && tl->pixbuf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
423 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
424 pixbuf = tl->pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
425 g_object_ref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
426 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
427 else if (with_fallback)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
428 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
429 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
430
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
431 pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
432 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
433 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
434 if ((w > tl->max_w || h > tl->max_h) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
435 normalize_thumb(&w, &h, tl->max_w, tl->max_h))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
436 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
437 GdkPixbuf *tmp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
438
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
439 tmp = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
440 pixbuf = gdk_pixbuf_scale_simple(tmp, w, h, GDK_INTERP_NEAREST);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
441 gdk_pixbuf_unref(tmp);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
442 }
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
443 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
444 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
445 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
446 pixbuf = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
447 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
448
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
449 return pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
450 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
451
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
452 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
453 gint thumb_loader_get_space(ThumbLoader *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
454 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
455 if (!tl) return 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
456
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
457 if (tl->pixbuf) return (tl->max_w - gdk_pixbuf_get_width(tl->pixbuf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
458
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
459 return tl->max_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
460 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
461 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
462
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
463 ThumbLoader *thumb_loader_new(gint width, gint height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
464 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
465 ThumbLoader *tl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
466
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
467 if (options->thumbnails.spec_standard)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
468 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
469 return (ThumbLoader *)thumb_loader_std_new(width, height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
470 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
471
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
472 tl = g_new0(ThumbLoader, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
473 tl->standard_loader = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
474 tl->path = NULL;
333
767b53cd9ab7 Rename thumbnails related options.
zas_
parents: 318
diff changeset
475 tl->cache_enable = options->thumbnails.enable_caching;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
476 tl->cache_hit = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
477 tl->percent_done = 0.0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
478 tl->max_w = width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
479 tl->max_h = height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
480
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
481 tl->il = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
482
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
483 tl->idle_done_id = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
484
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
485 return tl;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
486 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
487
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
488 void thumb_loader_free(ThumbLoader *tl)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
489 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
490 if (!tl) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
491
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
492 if (tl->standard_loader)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
493 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
494 thumb_loader_std_free((ThumbLoaderStd *)tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
495 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
496 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
497
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
498 if (tl->pixbuf) gdk_pixbuf_unref(tl->pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
499 image_loader_free(tl->il);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
500 g_free(tl->path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
501
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
502 if (tl->idle_done_id != -1) g_source_remove(tl->idle_done_id);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
503
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
504 g_free(tl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
505 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
506
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
507 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
508 gint thumb_from_xpm_d(const char **data, gint max_w, gint max_h, GdkPixmap **pixmap, GdkBitmap **mask)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
509 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
510 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
511 gint w, h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
512
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
513 pixbuf = gdk_pixbuf_new_from_xpm_data(data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
514 w = gdk_pixbuf_get_width(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
515 h = gdk_pixbuf_get_height(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
516
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
517 if ((w > max_w || h > max_h) &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
518 normalize_thumb(&w, &h, max_w, max_h))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
519 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
520 /* scale */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
521 GdkPixbuf *tmp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
522
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
523 tmp = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
524 pixbuf = gdk_pixbuf_scale_simple(tmp, w, h, GDK_INTERP_NEAREST);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
525 gdk_pixbuf_unref(tmp);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
526 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
527
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
528 gdk_pixbuf_render_pixmap_and_mask(pixbuf, pixmap, mask, 128);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
529 gdk_pixbuf_unref(pixbuf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
530
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
531 return w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
532 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
533 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
534
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
535 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
536 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
537 * xvpics thumbnail support, read-only (private)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
538 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
539 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
540
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
541 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
542 * xvpics code originally supplied by:
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
543 * "Diederen Damien" <D.Diederen@student.ulg.ac.be>
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
544 *
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
545 * Note: Code has been modified to fit the style of the other code, and to use
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
546 * a few more glib-isms.
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
547 * 08-28-2000: Updated to return a gdk_pixbuf, Imlib is dieing a death here.
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
548 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
549
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
550 #define XV_BUFFER 2048
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
551 static guchar *load_xv_thumbnail(gchar *filename, gint *widthp, gint *heightp)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
552 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
553 FILE *file;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
554 gchar buffer[XV_BUFFER];
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
555 guchar *data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
556 gint width, height, depth;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
557
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
558 file = fopen(filename, "rt");
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
559 if(!file) return NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
560
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
561 fgets(buffer, XV_BUFFER, file);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
562 if(strncmp(buffer, "P7 332", 6) != 0)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
563 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
564 fclose(file);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
565 return NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
566 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
567
516
b7e99bfeadc9 Convert the minority of while() to while ().
zas_
parents: 512
diff changeset
568 while (fgets(buffer, XV_BUFFER, file) && buffer[0] == '#') /* do_nothing() */;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
569
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
570 if(sscanf(buffer, "%d %d %d", &width, &height, &depth) != 3)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
571 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
572 fclose(file);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
573 return NULL;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
574 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
575
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
576 data = g_new(guchar, width * height);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
577 fread(data, 1, width * height, file);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
578
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
579 fclose(file);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
580 *widthp = width;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
581 *heightp = height;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
582 return data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
583 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
584 #undef XV_BUFFER
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
585
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
586 static gint normalize_thumb(gint *width, gint *height, gint max_w, gint max_h)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
587 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
588 gdouble scale;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
589 gint new_w, new_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
590
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
591 scale = MIN((gdouble) max_w / *width, (gdouble) max_h / *height);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
592 new_w = *width * scale;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
593 new_h = *height * scale;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
594
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
595 if (new_w != *width || new_h != *height)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
596 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
597 *width = new_w;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
598 *height = new_h;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
599 return TRUE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
600 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
601
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
602 return FALSE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
603 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
604
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
605 static void free_rgb_buffer(guchar *pixels, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
606 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
607 g_free(pixels);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
608 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
609
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
610 static GdkPixbuf *get_xv_thumbnail(gchar *thumb_filename, gint max_w, gint max_h)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
611 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
612 gint width, height;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
613 gchar *thumb_name;
715
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
614 gchar *path;
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
615 gchar *directory;
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
616 gchar *name;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
617 guchar *packed_data;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
618
715
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
619 path = path_from_utf8(thumb_filename);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
620 directory = g_path_get_dirname(path);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
621 name = g_path_get_basename(path);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
622
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
623 thumb_name = g_build_filename(directory, ".xvpics", name, NULL);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
624
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
625 g_free(name);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
626 g_free(directory);
179a7224dde1 Use g_build_filename().
zas_
parents: 694
diff changeset
627 g_free(path);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
628
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
629 packed_data = load_xv_thumbnail(thumb_name, &width, &height);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
630 g_free(thumb_name);
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
631
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
632 if(packed_data)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
633 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
634 guchar *rgb_data;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
635 GdkPixbuf *pixbuf;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
636 gint i;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
637
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
638 rgb_data = g_new(guchar, width * height * 3);
517
d84f2210a73c 6 for() vs 201 for (): winner is for ().
zas_
parents: 516
diff changeset
639 for (i = 0; i < width * height; i++)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
640 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
641 rgb_data[i * 3 + 0] = (packed_data[i] >> 5) * 36;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
642 rgb_data[i * 3 + 1] = ((packed_data[i] & 28) >> 2) * 36;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
643 rgb_data[i * 3 + 2] = (packed_data[i] & 3) * 85;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
644 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
645 g_free(packed_data);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
646
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
647 pixbuf = gdk_pixbuf_new_from_data(rgb_data, GDK_COLORSPACE_RGB, FALSE, 8,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
648 width, height, 3 * width, free_rgb_buffer, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
649
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
650 if (normalize_thumb(&width, &height, max_w, max_h))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
651 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
652 /* scale */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
653 GdkPixbuf *tmp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
654
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
655 tmp = pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
656 pixbuf = gdk_pixbuf_scale_simple(tmp, width, height, GDK_INTERP_NEAREST);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
657 gdk_pixbuf_unref(tmp);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
658 }
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 333
diff changeset
659
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
660 return pixbuf;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
661 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
662
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
663 return NULL;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
664 }