Krolyxon
Commit bad9a70

Branches

Refs →

nsxivbad9a70

Display filesize in window title

Author
Bert
Date
2011-02-03 14:32 +0100
Parent
12a94cc
Commit
bad9a70a48ff38f0d1e22fdedfcaa2241882a0bf

+75 −39

5 files changed

  1. M image.c +17 −17
  2. M image.h +4 −4
  3. M main.c +42 −18
  4. M util.c +9 −0
  5. M util.h +3 −0
M image.c View
@@ -73,7 +73,6 @@ int img_check(const char *filename) {
7373
7474 if ((ret = _imlib_load_image(filename)))
7575 imlib_free_image();
76−
7776 return ret;
7877 }
7978
@@ -194,12 +193,19 @@ int img_fit(img_t *img, win_t *win) {
194193 return oz != img->zoom;
195194 }
196195
197−void img_center(img_t *img, win_t *win) {
196+int img_center(img_t *img, win_t *win) {
197+ int ox, oy;
198+
198199 if (!img || !win)
199− return;
200+ return 0;
201+
202+ ox = img->x;
203+ oy = img->y;
200204
201205 img->x = (win->w - img->w * img->zoom) / 2;
202206 img->y = (win->h - img->h * img->zoom) / 2;
207+
208+ return ox != img->x || oy != img->y;
203209 }
204210
205211 int img_zoom(img_t *img, float z) {
@@ -231,7 +237,6 @@ int img_zoom_in(img_t *img) {
231237 if (zoom_levels[i] > img->zoom * 100.0)
232238 return img_zoom(img, zoom_levels[i] / 100.0);
233239 }
234−
235240 return 0;
236241 }
237242
@@ -245,7 +250,6 @@ int img_zoom_out(img_t *img) {
245250 if (zoom_levels[i] < img->zoom * 100.0)
246251 return img_zoom(img, zoom_levels[i] / 100.0);
247252 }
248−
249253 return 0;
250254 }
251255
@@ -284,11 +288,11 @@ int img_pan(img_t *img, win_t *win, pandir_t dir) {
284288 return 0;
285289 }
286290
287−int img_rotate(img_t *img, win_t *win, int d) {
291+void img_rotate(img_t *img, win_t *win, int d) {
288292 int ox, oy, tmp;
289293
290294 if (!img || !win)
291− return 0;
295+ return;
292296
293297 ox = d == 1 ? img->x : win->w - img->x - img->w * img->zoom;
294298 oy = d == 3 ? img->y : win->h - img->y - img->h * img->zoom;
@@ -303,24 +307,20 @@ int img_rotate(img_t *img, win_t *win, int d) {
303307 img->h = tmp;
304308
305309 img->checkpan = 1;
306−
307− return 1;
308310 }
309311
310−int img_rotate_left(img_t *img, win_t *win) {
311− return img_rotate(img, win, 3);
312+void img_rotate_left(img_t *img, win_t *win) {
313+ img_rotate(img, win, 3);
312314 }
313315
314−int img_rotate_right(img_t *img, win_t *win) {
315− return img_rotate(img, win, 1);
316+void img_rotate_right(img_t *img, win_t *win) {
317+ img_rotate(img, win, 1);
316318 }
317319
318−int img_toggle_antialias(img_t *img) {
320+void img_toggle_antialias(img_t *img) {
319321 if (!img)
320− return 0;
322+ return;
321323
322324 img->aa ^= 1;
323325 imlib_context_set_anti_alias(img->aa);
324−
325− return 1;
326326 }
M image.h View
@@ -55,7 +55,7 @@ int img_load(img_t*, const char*);
5555 void img_render(img_t*, win_t*);
5656
5757 int img_fit(img_t*, win_t*);
58−void img_center(img_t*, win_t*);
58+int img_center(img_t*, win_t*);
5959
6060 int img_zoom_in(img_t*);
6161 int img_zoom_out(img_t*);
@@ -63,9 +63,9 @@ int img_zoom_out(img_t*);
6363 int img_move(img_t*, win_t*, int, int);
6464 int img_pan(img_t*, win_t*, pandir_t);
6565
66−int img_rotate_left(img_t*, win_t*);
67−int img_rotate_right(img_t*, win_t*);
66+void img_rotate_left(img_t*, win_t*);
67+void img_rotate_right(img_t*, win_t*);
6868
69−int img_toggle_antialias(img_t*);
69+void img_toggle_antialias(img_t*);
7070
7171 #endif /* IMAGE_H */
M main.c View
@@ -44,6 +44,7 @@ win_t win;
4444 #define FNAME_CNT 4096
4545 const char **filenames;
4646 int filecnt, fileidx;
47+size_t filesize;
4748
4849 #define TITLE_LEN 256
4950 char win_title[TITLE_LEN];
@@ -57,6 +58,17 @@ void cleanup() {
5758 }
5859 }
5960
61+int load_image() {
62+ struct stat fstats;
63+
64+ if (stat(filenames[fileidx], &fstats))
65+ warn("could not stat file: %s", filenames[fileidx]);
66+ else
67+ filesize = fstats.st_size;
68+
69+ return img_load(&img, filenames[fileidx]);
70+}
71+
6072 int main(int argc, char **argv) {
6173 int i;
6274 const char *filename;
@@ -102,7 +114,7 @@ int main(int argc, char **argv) {
102114 win_open(&win);
103115 img_init(&img, &win);
104116
105− img_load(&img, filenames[fileidx]);
117+ load_image();
106118 img_render(&img, &win);
107119 update_title();
108120
@@ -115,10 +127,15 @@ int main(int argc, char **argv) {
115127
116128 void update_title() {
117129 int n;
130+ float size;
131+ const char *unit;
118132
119− n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] <%d%%> %s", fileidx + 1,
120− filecnt, (int) (img.zoom * 100.0), filenames[fileidx]);
121−
133+ size = filesize;
134+ size_readable(&size, &unit);
135+
136+ n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] <%d%%> (%.2f%s) %s",
137+ fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit,
138+ filenames[fileidx]);
122139 if (n >= TITLE_LEN) {
123140 win_title[TITLE_LEN - 2] = '.';
124141 win_title[TITLE_LEN - 3] = '.';
@@ -223,37 +240,39 @@ void on_keypress(XKeyEvent *kev) {
223240 case XK_n:
224241 case XK_space:
225242 if (fileidx + 1 < filecnt) {
226− changed = img_load(&img, filenames[++fileidx]);
243+ ++fileidx;
244+ changed = load_image();
227245 }
228246 break;
229247 case XK_p:
230248 case XK_BackSpace:
231249 if (fileidx > 0) {
232− changed = img_load(&img, filenames[--fileidx]);
250+ --fileidx;
251+ changed = load_image();
233252 }
234253 break;
235254 case XK_bracketleft:
236255 if (fileidx != 0) {
237256 fileidx = MAX(0, fileidx - 10);
238− changed = img_load(&img, filenames[fileidx]);
257+ changed = load_image();
239258 }
240259 break;
241260 case XK_bracketright:
242261 if (fileidx != filecnt - 1) {
243262 fileidx = MIN(fileidx + 10, filecnt - 1);
244− changed = img_load(&img, filenames[fileidx]);
263+ changed = load_image();
245264 }
246265 break;
247266 case XK_g:
248267 if (fileidx != 0) {
249268 fileidx = 0;
250− changed = img_load(&img, filenames[fileidx]);
269+ changed = load_image();
251270 }
252271 break;
253272 case XK_G:
254273 if (fileidx != filecnt - 1) {
255274 fileidx = filecnt - 1;
256− changed = img_load(&img, filenames[fileidx]);
275+ changed = load_image();
257276 }
258277 break;
259278
@@ -286,24 +305,29 @@ void on_keypress(XKeyEvent *kev) {
286305
287306 /* rotation */
288307 case XK_less:
289− changed = img_rotate_left(&img, &win);
308+ img_rotate_left(&img, &win);
309+ changed = 1;
290310 break;
291311 case XK_greater:
292− changed = img_rotate_right(&img, &win);
312+ img_rotate_right(&img, &win);
313+ changed = 1;
293314 break;
294315
295316 /* control window */
296317 case XK_f:
297318 win_toggle_fullscreen(&win);
319+ /* render on next configurenotify */
298320 break;
299321
300322 /* miscellaneous */
301323 case XK_a:
302− changed = img_toggle_antialias(&img);
324+ img_toggle_antialias(&img);
325+ changed = 1;
303326 break;
304327 case XK_r:
305− changed = img_load(&img, filenames[fileidx]);
328+ changed = load_image();
306329 break;
330+;
307331 }
308332
309333 if (changed) {
@@ -326,8 +350,8 @@ void on_buttonpress(XButtonEvent *bev) {
326350 switch (bev->button) {
327351 case Button1:
328352 if (fileidx + 1 < filecnt) {
329− img_load(&img, filenames[++fileidx]);
330− changed = 1;
353+ ++fileidx;
354+ changed = load_image();
331355 }
332356 break;
333357 case Button2:
@@ -337,8 +361,8 @@ void on_buttonpress(XButtonEvent *bev) {
337361 break;
338362 case Button3:
339363 if (fileidx > 0) {
340− img_load(&img, filenames[--fileidx]);
341− changed = 1;
364+ --fileidx;
365+ changed = load_image();
342366 }
343367 break;
344368 case Button4:
M util.c View
@@ -66,3 +66,12 @@ void die(const char* fmt, ...) {
6666 cleanup();
6767 exit(1);
6868 }
69+
70+void size_readable(float *size, const char **unit) {
71+ const char *units[] = { "", "K", "M", "G" };
72+ int i;
73+
74+ for (i = 0; i < LEN(units) && *size > 1024; ++i)
75+ *size /= 1024;
76+ *unit = units[MIN(i, LEN(units) - 1)];
77+}
M util.h View
@@ -24,6 +24,7 @@
2424 #define ABS(a) ((a) < 0 ? (-(a)) : (a))
2525 #define MIN(a,b) ((a) < (b) ? (a) : (b))
2626 #define MAX(a,b) ((a) > (b) ? (a) : (b))
27+#define LEN(a) (sizeof(a) / sizeof(a[0]))
2728
2829 void* s_malloc(size_t);
2930 void* s_realloc(void*, size_t);
@@ -31,4 +32,6 @@ void* s_realloc(void*, size_t);
3132 void warn(const char*, ...);
3233 void die(const char*, ...);
3334
35+void size_readable(float*, const char**);
36+
3437 #endif /* UTIL_H */