Krolyxon
Commit 9b24f82

Branches

Refs →

nsxiv9b24f82

Small refactorings, removed over-ambitious todo

Author
Bert
Date
2011-02-27 13:29 +0100
Parent
7334bdf
Commit
9b24f82404754fc1ea17bf5ffb55a9e94b603f7d

+51 −55

5 files changed

  1. M Makefile +1 −1
  2. D TODO +0 −1
  3. M main.c +34 −48
  4. M thumbs.c +14 −4
  5. M thumbs.h +2 −1
M Makefile View
@@ -1,6 +1,6 @@
11 all: sxiv
22
3−VERSION=0.7
3+VERSION=git-20110227
44
55 CC?=gcc
66 PREFIX?=/usr/local
D TODO View
@@ -1 +0,0 @@
1−- Keyboard mapping to save rotated images
M main.c View
@@ -69,17 +69,20 @@ void cleanup() {
6969 }
7070 }
7171
72−int load_image() {
72+int load_image(int new) {
7373 struct stat fstats;
7474
75− img_close(&img);
76−
77− if (!stat(filenames[fileidx], &fstats))
78− filesize = fstats.st_size;
79− else
80− filesize = 0;
81−
82− return img_load(&img, filenames[fileidx]);
75+ if (new >= 0 && new < filecnt) {
76+ img_close(&img);
77+ fileidx = new;
78+ if (!stat(filenames[fileidx], &fstats))
79+ filesize = fstats.st_size;
80+ else
81+ filesize = 0;
82+ return img_load(&img, filenames[fileidx]);
83+ } else {
84+ return 0;
85+ }
8386 }
8487
8588 int main(int argc, char **argv) {
@@ -140,7 +143,7 @@ int main(int argc, char **argv) {
140143 } else {
141144 mode = MODE_NORMAL;
142145 tns.thumbs = NULL;
143− load_image();
146+ load_image(fileidx);
144147 img_render(&img, &win);
145148 }
146149
@@ -307,41 +310,29 @@ void on_keypress(XKeyEvent *kev) {
307310 /* navigate image list */
308311 case XK_n:
309312 case XK_space:
310− if (fileidx + 1 < filecnt) {
311− ++fileidx;
312− changed = load_image();
313− }
313+ if (fileidx + 1 < filecnt)
314+ changed = load_image(fileidx + 1);
314315 break;
315316 case XK_p:
316317 case XK_BackSpace:
317− if (fileidx > 0) {
318− --fileidx;
319− changed = load_image();
320− }
318+ if (fileidx > 0)
319+ changed = load_image(fileidx - 1);
321320 break;
322321 case XK_bracketleft:
323− if (fileidx != 0) {
324− fileidx = MAX(0, fileidx - 10);
325− changed = load_image();
326− }
322+ if (fileidx != 0)
323+ changed = load_image(MAX(0, fileidx - 10));
327324 break;
328325 case XK_bracketright:
329− if (fileidx != filecnt - 1) {
330− fileidx = MIN(fileidx + 10, filecnt - 1);
331− changed = load_image();
332− }
326+ if (fileidx != filecnt - 1)
327+ changed = load_image(MIN(fileidx + 10, filecnt - 1));
333328 break;
334329 case XK_g:
335− if (fileidx != 0) {
336− fileidx = 0;
337− changed = load_image();
338− }
330+ if (fileidx != 0)
331+ changed = load_image(0);
339332 break;
340333 case XK_G:
341− if (fileidx != filecnt - 1) {
342− fileidx = filecnt - 1;
343− changed = load_image();
344− }
334+ if (fileidx != filecnt - 1)
335+ changed = load_image(filecnt - 1);
345336 break;
346337
347338 /* zooming */
@@ -418,7 +409,7 @@ void on_keypress(XKeyEvent *kev) {
418409 changed = 1;
419410 break;
420411 case XK_r:
421− changed = load_image();
412+ changed = load_image(fileidx);
422413 break;
423414 }
424415 } else {
@@ -426,8 +417,7 @@ void on_keypress(XKeyEvent *kev) {
426417 switch (ksym) {
427418 /* open selected image */
428419 case XK_Return:
429− fileidx = tns.sel;
430− load_image();
420+ load_image(tns.sel);
431421 mode = MODE_NORMAL;
432422 win_set_cursor(&win, CURSOR_NONE);
433423 changed = 1;
@@ -496,10 +486,8 @@ void on_buttonpress(XButtonEvent *bev) {
496486 if (mode == MODE_NORMAL) {
497487 switch (bev->button) {
498488 case Button1:
499− if (fileidx + 1 < filecnt) {
500− ++fileidx;
501− changed = load_image();
502− }
489+ if (fileidx + 1 < filecnt)
490+ changed = load_image(fileidx + 1);
503491 break;
504492 case Button2:
505493 mox = bev->x;
@@ -509,10 +497,8 @@ void on_buttonpress(XButtonEvent *bev) {
509497 drag = 1;
510498 break;
511499 case Button3:
512− if (fileidx > 0) {
513− --fileidx;
514− changed = load_image();
515− }
500+ if (fileidx > 0)
501+ changed = load_image(fileidx - 1);
516502 break;
517503 case Button4:
518504 if (mask == ControlMask)
@@ -543,8 +529,7 @@ void on_buttonpress(XButtonEvent *bev) {
543529 case Button1:
544530 if ((sel = tns_translate(&tns, bev->x, bev->y)) >= 0) {
545531 if (sel == tns.sel) {
546− fileidx = tns.sel;
547− load_image();
532+ load_image(tns.sel);
548533 mode = MODE_NORMAL;
549534 timo_cursor = TO_CURSOR_HIDE;
550535 } else {
@@ -600,7 +585,8 @@ void run() {
600585 gettimeofday(&t0, 0);
601586
602587 while (!XPending(win.env.dpy) && tns.cnt < filecnt) {
603− tns_load(&tns, &win, filenames[tns.cnt]);
588+ /* tns.cnt is increased inside tns_load */
589+ tns_load(&tns, &win, tns.cnt, filenames[tns.cnt]);
604590 gettimeofday(&t1, 0);
605591 if (TV_TO_DOUBLE(t1) - TV_TO_DOUBLE(t0) >= 0.25)
606592 break;
M thumbs.c View
@@ -35,6 +35,7 @@ void tns_init(tns_t *tns, int cnt) {
3535 tns->cnt = tns->first = tns->sel = 0;
3636 tns->thumbs = (thumb_t*) s_malloc(cnt * sizeof(thumb_t));
3737 memset(tns->thumbs, 0, cnt * sizeof(thumb_t));
38+ tns->cap = cnt;
3839 tns->dirty = 0;
3940 }
4041
@@ -51,7 +52,7 @@ void tns_free(tns_t *tns, win_t *win) {
5152 tns->thumbs = NULL;
5253 }
5354
54−void tns_load(tns_t *tns, win_t *win, const char *filename) {
55+void tns_load(tns_t *tns, win_t *win, int n, const char *filename) {
5556 int w, h;
5657 float z, zw, zh;
5758 thumb_t *t;
@@ -60,10 +61,17 @@ void tns_load(tns_t *tns, win_t *win, const char *filename) {
6061 if (!tns || !win || !filename)
6162 return;
6263
63− if ((im = imlib_load_image(filename)))
64+ if (n >= tns->cap)
65+ return;
66+ else if (n >= tns->cnt)
67+ tns->cnt = n + 1;
68+
69+ if ((im = imlib_load_image(filename))) {
6470 imlib_context_set_image(im);
65− else
71+ imlib_image_set_changes_on_disk();
72+ } else {
6673 imlib_context_set_image(im_broken);
74+ }
6775
6876 w = imlib_image_get_width();
6977 h = imlib_image_get_height();
@@ -73,10 +81,12 @@ void tns_load(tns_t *tns, win_t *win, const char *filename) {
7381 if (!im && z > 1.0)
7482 z = 1.0;
7583
76− t = &tns->thumbs[tns->cnt++];
84+ t = &tns->thumbs[n];
7785 t->w = z * w;
7886 t->h = z * h;
7987
88+ if (t->pm)
89+ win_free_pixmap(win, t->pm);
8090 t->pm = win_create_pixmap(win, t->w, t->h);
8191 imlib_context_set_drawable(t->pm);
8292 imlib_context_set_anti_alias(1);
M thumbs.h View
@@ -38,6 +38,7 @@ typedef struct thumb_s {
3838
3939 typedef struct tns_s {
4040 thumb_t *thumbs;
41+ int cap;
4142 int cnt;
4243 int x;
4344 int y;
@@ -51,7 +52,7 @@ typedef struct tns_s {
5152 void tns_init(tns_t*, int);
5253 void tns_free(tns_t*, win_t*);
5354
54−void tns_load(tns_t*, win_t*, const char*);
55+void tns_load(tns_t*, win_t*, int, const char*);
5556
5657 void tns_render(tns_t*, win_t*);
5758 void tns_highlight(tns_t*, win_t*, int, Bool);