Krolyxon
Commit d15264e

Branches

Refs →

nsxivd15264e

Remove invalid images when loading them; refactorings

Author
Bert
Date
2011-04-11 16:58 +0200
Parent
5cb6d12
Commit
d15264ea3213a56113952d16b042fd4fb249da6d

+175 −357

8 files changed

  1. D icon.h +0 −180
  2. M image.c +14 −43
  3. M image.h +0 −2
  4. M main.c +84 −70
  5. M thumbs.c +25 −29
  6. M thumbs.h +3 −3
  7. M window.c +48 −30
  8. M window.h +1 −0
D icon.h View
@@ -1,180 +0,0 @@
1−#ifndef ICON_H
2−#define ICON_H
3−
4−#include <Imlib2.h>
5−
6−static DATA32 icon_invalid[] = {
7− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
8− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
9− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
10− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
11− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
12− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
13− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
14− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
15− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
16− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
17− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
18− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
19− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
20− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
21− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
22− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
23− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
24− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
25− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
26− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
27− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
28− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
29− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
30− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
31− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
32− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
33− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
34− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444,
35− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
36− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
37− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
38− 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
39− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444,
40− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
41− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
42− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444,
43− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
44− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
45− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
46− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
47− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
48− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb,
49− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
50− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
51− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
52− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
53− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
54− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
55− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
56− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
57− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
58− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
59− 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
60− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
61− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
62− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
63− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444,
64− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
65− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
66− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
67− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
68− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
69− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
70− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
71− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
72− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
73− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xff444444,
74− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
75− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
76− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
77− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
78− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
79− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb,
80− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
81− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
82− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
83− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
84− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
85− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
86− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
87− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
88− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
89− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
90− 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
91− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
92− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
93− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
94− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444,
95− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
96− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
97− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
98− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
99− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
100− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
101− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
102− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
103− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
104− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444,
105− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
106− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
107− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
108− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
109− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
110− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb,
111− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
112− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
113− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
114− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
115− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
116− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
117− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
118− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
119− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
120− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
121− 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
122− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
123− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
124− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
125− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444,
126− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
127− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
128− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
129− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
130− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
131− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
132− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
133− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
134− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
135− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444,
136− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
137− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
138− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
139− 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
140− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
141− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb,
142− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
143− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
144− 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb,
145− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
146− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444,
147− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
148− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
149− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
150− 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
151− 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
152− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
153− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
154− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
155− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
156− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb,
157− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
158− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
159− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
160− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
161− 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
162− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
163− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
164− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
165− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb,
166− 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444,
167− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
168− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
169− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
170− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
171− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
172− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
173− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
174− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
175− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
176− 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444,
177− 0xff444444, 0xff444444, 0xff444444, 0xff444444
178−};
179−
180−#endif /* ICON_H */
M image.c View
@@ -16,8 +16,9 @@
1616 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1717 */
1818
19+#include <unistd.h>
20+
1921 #include "config.h"
20−#include "icon.h"
2122 #include "image.h"
2223 #include "options.h"
2324 #include "util.h"
@@ -26,15 +27,11 @@ int zl_cnt;
2627 float zoom_min;
2728 float zoom_max;
2829
29−Imlib_Image *im_invalid;
30−
3130 void img_init(img_t *img, win_t *win) {
3231 zl_cnt = sizeof(zoom_levels) / sizeof(zoom_levels[0]);
3332 zoom_min = zoom_levels[0] / 100.0;
3433 zoom_max = zoom_levels[zl_cnt - 1] / 100.0;
3534
36− im_invalid = imlib_create_image_using_data(32, 32, icon_invalid);
37−
3835 if (img) {
3936 img->im = NULL;
4037 img->zoom = options->zoom;
@@ -51,43 +48,20 @@ void img_init(img_t *img, win_t *win) {
5148 }
5249 }
5350
54−void img_free(img_t* img) {
55− imlib_context_set_image(im_invalid);
56− imlib_free_image();
57−}
58−
59−int img_check(const char *filename) {
60− Imlib_Image *im;
61−
62− if (!filename)
63− return 0;
64−
65− if ((im = imlib_load_image(filename))) {
66− imlib_context_set_image(im);
67− imlib_image_set_changes_on_disk();
68− imlib_free_image();
69− return 1;
70− } else {
71− warn("invalid file: %s", filename);
72− return 0;
73− }
74−}
75−
7651 int img_load(img_t *img, const char *filename) {
7752 if (!img || !filename)
7853 return 0;
7954
80− if ((img->im = imlib_load_image(filename))) {
81− imlib_context_set_image(img->im);
82− imlib_image_set_changes_on_disk();
83− imlib_context_set_anti_alias(img->aa);
84− img->scalemode = options->scalemode;
85− } else {
86− warn("invalid file: %s", filename);
87− imlib_context_set_image(im_invalid);
88− imlib_context_set_anti_alias(0);
55+ if (access(filename, R_OK) || !(img->im = imlib_load_image(filename))) {
56+ warn("could not open image: %s", filename);
57+ return 0;
8958 }
9059
60+ imlib_context_set_image(img->im);
61+ imlib_image_set_changes_on_disk();
62+ imlib_context_set_anti_alias(img->aa);
63+
64+ img->scalemode = options->scalemode;
9165 img->re = 0;
9266 img->checkpan = 0;
9367
@@ -151,12 +125,12 @@ void img_render(img_t *img, win_t *win) {
151125 int sx, sy, sw, sh;
152126 int dx, dy, dw, dh;
153127
154− if (!img || !win)
128+ if (!img || !img->im || !win)
155129 return;
156130
157− if (!img->im || img->scalemode != SCALE_ZOOM) {
131+ if (img->scalemode != SCALE_ZOOM) {
158132 img_fit(img, win);
159− if ((!img->im || img->scalemode == SCALE_DOWN) && img->zoom > 1.0)
133+ if (img->scalemode == SCALE_DOWN && img->zoom > 1.0)
160134 img->zoom = 1.0;
161135 }
162136
@@ -204,10 +178,7 @@ void img_render(img_t *img, win_t *win) {
204178
205179 win_clear(win);
206180
207− if (img->im)
208− imlib_context_set_image(img->im);
209− else
210− imlib_context_set_image(im_invalid);
181+ imlib_context_set_image(img->im);
211182
212183 if (imlib_image_has_alpha() && !img->alpha)
213184 win_draw_rect(win, win->pm, dx, dy, dw, dh, True, 0, win->white);
M image.h View
@@ -54,9 +54,7 @@ typedef struct {
5454 } img_t;
5555
5656 void img_init(img_t*, win_t*);
57−void img_free(img_t*);
5857
59−int img_check(const char*);
6058 int img_load(img_t*, const char*);
6159 void img_close(img_t*, int);
6260
M main.c View
@@ -40,6 +40,14 @@
4040 #include "commands.h"
4141 #endif
4242
43+#define FNAME_CNT 1024
44+#define TITLE_LEN 256
45+
46+#define TO_WIN_RESIZE 75000
47+#define TO_IMAGE_DRAG 1000
48+#define TO_CURSOR_HIDE 1500000
49+#define TO_THUMBS_LOAD 75000
50+
4351 typedef enum {
4452 MODE_NORMAL = 0,
4553 MODE_THUMBS
@@ -52,42 +60,74 @@ img_t img;
5260 tns_t tns;
5361 win_t win;
5462
55−#define FNAME_CNT 1024
5663 const char **filenames;
5764 int filecnt, fileidx;
5865 size_t filesize;
5966
60−#define TITLE_LEN 256
6167 char win_title[TITLE_LEN];
6268
69+int timo_cursor;
70+int timo_redraw;
71+unsigned char drag;
72+int mox, moy;
73+
6374 void cleanup() {
6475 static int in = 0;
6576
6677 if (!in++) {
6778 img_close(&img, 0);
68− img_free(&img);
69− tns_free(&tns, &win);
79+ tns_free(&tns);
7080 win_close(&win);
7181 }
7282 }
7383
84+void remove_file(int n, unsigned char silent) {
85+ if (n < 0 || n >= filecnt)
86+ return;
87+
88+ if (filecnt == 1) {
89+ if (!silent)
90+ fprintf(stderr, "sxiv: no more files to display\n");
91+ cleanup();
92+ exit(!silent);
93+ }
94+
95+ if (n + 1 < filecnt)
96+ memmove(filenames + n, filenames + n + 1, (filecnt - n - 1) *
97+ sizeof(const char*));
98+ if (n + 1 < tns.cnt) {
99+ memmove(tns.thumbs + n, tns.thumbs + n + 1, (tns.cnt - n - 1) *
100+ sizeof(thumb_t));
101+ memset(tns.thumbs + tns.cnt - 1, 0, sizeof(thumb_t));
102+ }
103+
104+ --filecnt;
105+ if (n < tns.cnt)
106+ --tns.cnt;
107+}
108+
74109 int load_image(int new) {
75− int ret = 0;
76110 struct stat fstats;
77111
78112 if (new >= 0 && new < filecnt) {
79113 win_set_cursor(&win, CURSOR_WATCH);
80114 img_close(&img, 0);
115+
116+ while (!img_load(&img, filenames[new])) {
117+ remove_file(new, 0);
118+ if (new >= filecnt)
119+ new = filecnt - 1;
120+ }
81121 fileidx = new;
82− if (!stat(filenames[fileidx], &fstats))
122+ if (!stat(filenames[new], &fstats))
83123 filesize = fstats.st_size;
84124 else
85125 filesize = 0;
86− if (!(ret = img_load(&img, filenames[fileidx])))
126+
127+ if (!timo_cursor)
87128 win_set_cursor(&win, CURSOR_NONE);
88129 }
89−
90− return ret;
130+ return 1;
91131 }
92132
93133 void update_title() {
@@ -100,16 +140,11 @@ void update_title() {
100140 tns.cnt ? tns.sel + 1 : 0, tns.cnt,
101141 tns.cnt ? filenames[tns.sel] : "");
102142 } else {
103− if (img.im) {
104− size = filesize;
105− size_readable(&size, &unit);
106− n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] <%d%%> (%.2f%s) %s",
107− fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit,
108− filenames[fileidx]);
109− } else {
110− n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] invalid: %s",
111− fileidx + 1, filecnt, filenames[fileidx]);
112− }
143+ size = filesize;
144+ size_readable(&size, &unit);
145+ n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] <%d%%> (%.2f%s) %s",
146+ fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit,
147+ filenames[fileidx]);
113148 }
114149
115150 if (n >= TITLE_LEN) {
@@ -128,7 +163,7 @@ int check_append(const char *filename) {
128163 if (access(filename, R_OK)) {
129164 warn("could not open file: %s", filename);
130165 return 0;
131− } else if (options->all || img_check(filename)) {
166+ } else {
132167 if (fileidx == filecnt) {
133168 filecnt *= 2;
134169 filenames = (const char**) s_realloc(filenames,
@@ -136,8 +171,6 @@ int check_append(const char *filename) {
136171 }
137172 filenames[fileidx++] = filename;
138173 return 1;
139− } else {
140− return 0;
141174 }
142175 }
143176
@@ -155,7 +188,7 @@ int main(int argc, char **argv) {
155188
156189 if (options->clean_cache) {
157190 tns_init(&tns, 0);
158− tns_clear_cache(&tns);
191+ tns_clean_cache(&tns);
159192 exit(0);
160193 }
161194
@@ -208,26 +241,27 @@ int main(int argc, char **argv) {
208241 fileidx = 0;
209242
210243 if (!filecnt) {
211− fprintf(stderr, "sxiv: no valid image filename given, aborting\n");
244+ fprintf(stderr, "sxiv: no valid image file given, aborting\n");
212245 exit(1);
213246 }
214247
215− win_open(&win);
248+ win_init(&win);
216249 img_init(&img, &win);
217250
218251 if (options->thumbnails) {
219252 mode = MODE_THUMBS;
220253 tns_init(&tns, filecnt);
221− win_clear(&win);
222− win_draw(&win);
254+ while (!tns_load(&tns, 0, filenames[0], 0))
255+ remove_file(0, 0);
256+ tns.cnt = 1;
223257 } else {
224258 mode = MODE_NORMAL;
225259 tns.thumbs = NULL;
226260 load_image(fileidx);
227− img_render(&img, &win);
228261 }
229262
230− update_title();
263+ win_open(&win);
264+
231265 run();
232266 cleanup();
233267
@@ -292,42 +326,9 @@ int run_command(const char *cline, Bool reload) {
292326 }
293327 #endif /* EXT_COMMANDS */
294328
295−void remove_file(int n) {
296− if (n < 0 || n >= filecnt)
297− return;
298−
299− if (filecnt == 1) {
300− cleanup();
301− exit(0);
302− }
303−
304− if (n + 1 < filecnt)
305− memmove(filenames + n, filenames + n + 1, (filecnt - n - 1) *
306− sizeof(const char*));
307− if (n + 1 < tns.cnt) {
308− memmove(tns.thumbs + n, tns.thumbs + n + 1, (tns.cnt - n - 1) *
309− sizeof(thumb_t));
310− memset(tns.thumbs + tns.cnt - 1, 0, sizeof(thumb_t));
311− }
312−
313− --filecnt;
314− if (n < tns.cnt)
315− --tns.cnt;
316−}
317−
318329
319330 /* event handling */
320331
321−#define TO_WIN_RESIZE 75000;
322−#define TO_IMAGE_DRAG 1000;
323−#define TO_CURSOR_HIDE 1500000;
324−#define TO_THUMBS_LOAD 75000;
325−int timo_cursor;
326−int timo_redraw;
327−
328−unsigned char drag;
329−int mox, moy;
330−
331332 void redraw() {
332333 if (mode == MODE_NORMAL) {
333334 img_render(&img, &win);
@@ -363,16 +364,24 @@ void on_keypress(XKeyEvent *kev) {
363364 win_set_cursor(&win, CURSOR_WATCH);
364365 if (run_command(commands[x].cmdline, commands[x].reload)) {
365366 if (mode == MODE_NORMAL) {
367+ if (fileidx < tns.cnt)
368+ tns_load(&tns, fileidx, filenames[fileidx], 1);
366369 img_close(&img, 1);
367370 load_image(fileidx);
368− tns_load(&tns, &win, fileidx, filenames[fileidx]);
369371 } else {
370− tns_load(&tns, &win, tns.sel, filenames[tns.sel]);
372+ if (!tns_load(&tns, tns.sel, filenames[tns.sel], 0)) {
373+ remove_file(tns.sel, 0);
374+ tns.dirty = 1;
375+ if (tns.sel >= tns.cnt)
376+ tns.sel = tns.cnt - 1;
377+ }
371378 }
372379 redraw();
373380 }
374381 if (mode == MODE_THUMBS)
375382 win_set_cursor(&win, CURSOR_ARROW);
383+ else if (!timo_cursor)
384+ win_set_cursor(&win, CURSOR_NONE);
376385 return;
377386 }
378387 }
@@ -487,7 +496,7 @@ void on_keypress(XKeyEvent *kev) {
487496 changed = 1;
488497 break;
489498 case XK_D:
490− remove_file(fileidx);
499+ remove_file(fileidx, 1);
491500 changed = load_image(fileidx >= filecnt ? filecnt - 1 : fileidx);
492501 break;
493502 case XK_r:
@@ -532,11 +541,12 @@ void on_keypress(XKeyEvent *kev) {
532541 tns.sel = tns.cnt - 1;
533542 changed = tns.dirty = 1;
534543 }
544+ break;
535545
536546 /* miscellaneous */
537547 case XK_D:
538548 if (tns.sel < tns.cnt) {
539− remove_file(tns.sel);
549+ remove_file(tns.sel, 1);
540550 changed = tns.dirty = 1;
541551 if (tns.sel >= tns.cnt)
542552 tns.sel = tns.cnt - 1;
@@ -663,17 +673,21 @@ void run() {
663673 struct timeval tt, t0, t1;
664674 XEvent ev;
665675
666− timo_cursor = timo_redraw = 0;
667676 drag = 0;
677+ timo_cursor = mode == MODE_NORMAL ? TO_CURSOR_HIDE : 0;
678+
679+ redraw();
668680
669681 while (1) {
670682 if (mode == MODE_THUMBS && tns.cnt < filecnt) {
671683 win_set_cursor(&win, CURSOR_WATCH);
672684 gettimeofday(&t0, 0);
673685
674− while (!XPending(win.env.dpy) && tns.cnt < filecnt) {
675− /* tns.cnt is increased inside tns_load */
676− tns_load(&tns, &win, tns.cnt, filenames[tns.cnt]);
686+ while (tns.cnt < filecnt && !XPending(win.env.dpy)) {
687+ if (tns_load(&tns, tns.cnt, filenames[tns.cnt], 0))
688+ ++tns.cnt;
689+ else
690+ remove_file(tns.cnt, 0);
677691 gettimeofday(&t1, 0);
678692 if (TV_TO_DOUBLE(t1) - TV_TO_DOUBLE(t0) >= 0.25)
679693 break;
M thumbs.c View
@@ -27,8 +27,6 @@
2727 #include "thumbs.h"
2828 #include "util.h"
2929
30−extern Imlib_Image *im_invalid;
31−
3230 const int thumb_dim = THUMB_SIZE + 10;
3331 char *cache_dir = NULL;
3432
@@ -131,7 +129,7 @@ void tns_cache_write(thumb_t *t, Bool force) {
131129 }
132130 }
133131
134−void tns_clear_cache(tns_t *tns) {
132+void tns_clean_cache(tns_t *tns) {
135133 int dirlen, delete;
136134 char *cfile, *filename, *tpos;
137135 r_dir_t dir;
@@ -195,7 +193,7 @@ void tns_init(tns_t *tns, int cnt) {
195193 }
196194 }
197195
198−void tns_free(tns_t *tns, win_t *win) {
196+void tns_free(tns_t *tns) {
199197 int i;
200198
201199 if (!tns)
@@ -218,22 +216,21 @@ void tns_free(tns_t *tns, win_t *win) {
218216 }
219217 }
220218
221−void tns_load(tns_t *tns, win_t *win, int n, const char *filename) {
219+int tns_load(tns_t *tns, int n, const char *filename, unsigned char silent) {
222220 int w, h;
223221 int use_cache, cached = 0;
224222 float z, zw, zh;
225223 thumb_t *t;
226224 Imlib_Image *im;
227225
228− if (!tns || !tns->thumbs || !win || !filename)
229− return;
226+ if (!tns || !tns->thumbs || !filename)
227+ return 0;
230228
231− if (n >= tns->cap)
232− return;
233− else if (n >= tns->cnt)
234− tns->cnt = n + 1;
229+ if (n < 0 || n >= tns->cap)
230+ return 0;
235231
236232 t = &tns->thumbs[n];
233+ t->filename = filename;
237234
238235 if (t->im) {
239236 imlib_context_set_image(t->im);
@@ -245,36 +242,35 @@ void tns_load(tns_t *tns, win_t *win, int n, const char *filename) {
245242 cached = 1;
246243 }
247244
248− if (cached || (im = imlib_load_image(filename)))
249− imlib_context_set_image(im);
250− else
251− imlib_context_set_image(im_invalid);
245+ if (!cached &&
246+ (access(filename, R_OK) || !(im = imlib_load_image(filename))))
247+ {
248+ if (!silent)
249+ warn("could not open image: %s", filename);
250+ return 0;
251+ }
252+
253+ imlib_context_set_image(im);
254+ imlib_context_set_anti_alias(1);
252255
253256 w = imlib_image_get_width();
254257 h = imlib_image_get_height();
255−
256− if (im) {
257− t->filename = filename;
258− zw = (float) THUMB_SIZE / (float) w;
259− zh = (float) THUMB_SIZE / (float) h;
260− z = MIN(zw, zh);
261− } else {
262− t->filename = NULL;
263− z = 1.0;
264− }
265−
258+ zw = (float) THUMB_SIZE / (float) w;
259+ zh = (float) THUMB_SIZE / (float) h;
260+ z = MIN(zw, zh);
266261 t->w = z * w;
267262 t->h = z * h;
268263
269− imlib_context_set_anti_alias(1);
270264 if (!(t->im = imlib_create_cropped_scaled_image(0, 0, w, h, t->w, t->h)))
271265 die("could not allocate memory");
272− if (im)
273− imlib_free_image_and_decache();
266+
267+ imlib_free_image_and_decache();
268+
274269 if (use_cache && !cached)
275270 tns_cache_write(t, False);
276271
277272 tns->dirty = 1;
273+ return 1;
278274 }
279275
280276 void tns_check_view(tns_t *tns, Bool scrolled) {
M thumbs.h View
@@ -52,12 +52,12 @@ typedef struct {
5252 unsigned char dirty;
5353 } tns_t;
5454
55−void tns_clear_cache(tns_t*);
55+void tns_clean_cache(tns_t*);
5656
5757 void tns_init(tns_t*, int);
58−void tns_free(tns_t*, win_t*);
58+void tns_free(tns_t*);
5959
60−void tns_load(tns_t*, win_t*, int, const char*);
60+int tns_load(tns_t*, int, const char*, unsigned char);
6161
6262 void tns_render(tns_t*, win_t*);
6363 void tns_highlight(tns_t*, win_t*, int, Bool);
M window.c View
@@ -34,27 +34,9 @@ static GC gc;
3434
3535 Atom wm_delete_win;
3636
37−void win_set_sizehints(win_t *win) {
38− XSizeHints sizehints;
39−
40− if (!win)
41− return;
42−
43− sizehints.flags = PMinSize | PMaxSize;
44− sizehints.min_width = win->w;
45− sizehints.max_width = win->w;
46− sizehints.min_height = win->h;
47− sizehints.max_height = win->h;
48− XSetWMNormalHints(win->env.dpy, win->xwin, &sizehints);
49−}
50−
51−void win_open(win_t *win) {
37+void win_init(win_t *win) {
5238 win_env_t *e;
53− XClassHint classhint;
5439 XColor col;
55− char none_data[] = {0, 0, 0, 0, 0, 0, 0, 0};
56− Pixmap none;
57− int gmask;
5840
5941 if (!win)
6042 return;
@@ -75,18 +57,52 @@ void win_open(win_t *win) {
7557
7658 if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), BG_COLOR,
7759 &col, &col))
60+ {
7861 win->bgcol = col.pixel;
79− else
62+ } else {
8063 die("could not allocate color: %s", BG_COLOR);
64+ }
65+
8166 if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), SEL_COLOR,
8267 &col, &col))
68+ {
8369 win->selcol = col.pixel;
84− else
85− die("could not allocate color: %s", BG_COLOR);
70+ } else {
71+ die("could not allocate color: %s", SEL_COLOR);
72+ }
8673
74+ win->xwin = 0;
8775 win->pm = 0;
8876 win->fullscreen = 0;
89−
77+}
78+
79+void win_set_sizehints(win_t *win) {
80+ XSizeHints sizehints;
81+
82+ if (!win || !win->xwin)
83+ return;
84+
85+ sizehints.flags = PMinSize | PMaxSize;
86+ sizehints.min_width = win->w;
87+ sizehints.max_width = win->w;
88+ sizehints.min_height = win->h;
89+ sizehints.max_height = win->h;
90+ XSetWMNormalHints(win->env.dpy, win->xwin, &sizehints);
91+}
92+
93+void win_open(win_t *win) {
94+ win_env_t *e;
95+ XClassHint classhint;
96+ XColor col;
97+ char none_data[] = {0, 0, 0, 0, 0, 0, 0, 0};
98+ Pixmap none;
99+ int gmask;
100+
101+ if (!win)
102+ return;
103+
104+ e = &win->env;
105+
90106 /* determine window offsets, width & height */
91107 if (!options->geometry)
92108 gmask = 0;
@@ -125,7 +141,9 @@ void win_open(win_t *win) {
125141
126142 if (!XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), "black",
127143 &col, &col))
144+ {
128145 die("could not allocate color: black");
146+ }
129147 none = XCreateBitmapFromData(e->dpy, win->xwin, none_data, 8, 8);
130148 cnone = XCreatePixmapCursor(e->dpy, none, none, &col, &col, 0, 0);
131149
@@ -151,7 +169,7 @@ void win_open(win_t *win) {
151169 }
152170
153171 void win_close(win_t *win) {
154− if (!win)
172+ if (!win || !win->xwin)
155173 return;
156174
157175 XFreeCursor(win->env.dpy, carrow);
@@ -183,7 +201,7 @@ int win_configure(win_t *win, XConfigureEvent *c) {
183201 }
184202
185203 int win_moveresize(win_t *win, int x, int y, unsigned int w, unsigned int h) {
186− if (!win)
204+ if (!win || !win->xwin)
187205 return 0;
188206
189207 x = MAX(0, x);
@@ -211,7 +229,7 @@ void win_toggle_fullscreen(win_t *win) {
211229 XEvent ev;
212230 XClientMessageEvent *cm;
213231
214− if (!win)
232+ if (!win || !win->xwin)
215233 return;
216234
217235 win->fullscreen ^= 1;
@@ -236,7 +254,7 @@ void win_clear(win_t *win) {
236254 win_env_t *e;
237255 XGCValues gcval;
238256
239− if (!win)
257+ if (!win || !win->xwin)
240258 return;
241259
242260 e = &win->env;
@@ -251,7 +269,7 @@ void win_clear(win_t *win) {
251269 }
252270
253271 void win_draw(win_t *win) {
254− if (!win)
272+ if (!win || !win->xwin)
255273 return;
256274
257275 XSetWindowBackgroundPixmap(win->env.dpy, win->xwin, win->pm);
@@ -276,7 +294,7 @@ void win_draw_rect(win_t *win, Pixmap pm, int x, int y, int w, int h,
276294 }
277295
278296 void win_set_title(win_t *win, const char *title) {
279− if (!win)
297+ if (!win || !win->xwin)
280298 return;
281299
282300 if (!title)
@@ -296,7 +314,7 @@ void win_set_title(win_t *win, const char *title) {
296314 }
297315
298316 void win_set_cursor(win_t *win, win_cur_t cursor) {
299− if (!win)
317+ if (!win || !win->xwin)
300318 return;
301319
302320 switch (cursor) {
M window.h View
@@ -60,6 +60,7 @@ typedef struct {
6060
6161 extern Atom wm_delete_win;
6262
63+void win_init(win_t*);
6364 void win_open(win_t*);
6465 void win_close(win_t*);
6566