|
|
|
@ -69,17 +69,20 @@ void cleanup() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int load_image() {
|
|
|
|
|
int load_image(int new) {
|
|
|
|
|
struct stat fstats;
|
|
|
|
|
|
|
|
|
|
img_close(&img);
|
|
|
|
|
|
|
|
|
|
if (!stat(filenames[fileidx], &fstats))
|
|
|
|
|
filesize = fstats.st_size;
|
|
|
|
|
else
|
|
|
|
|
filesize = 0;
|
|
|
|
|
|
|
|
|
|
return img_load(&img, filenames[fileidx]);
|
|
|
|
|
if (new >= 0 && new < filecnt) {
|
|
|
|
|
img_close(&img);
|
|
|
|
|
fileidx = new;
|
|
|
|
|
if (!stat(filenames[fileidx], &fstats))
|
|
|
|
|
filesize = fstats.st_size;
|
|
|
|
|
else
|
|
|
|
|
filesize = 0;
|
|
|
|
|
return img_load(&img, filenames[fileidx]);
|
|
|
|
|
} else {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char **argv) {
|
|
|
|
@ -140,7 +143,7 @@ int main(int argc, char **argv) {
|
|
|
|
|
} else {
|
|
|
|
|
mode = MODE_NORMAL;
|
|
|
|
|
tns.thumbs = NULL;
|
|
|
|
|
load_image();
|
|
|
|
|
load_image(fileidx);
|
|
|
|
|
img_render(&img, &win);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -307,41 +310,29 @@ void on_keypress(XKeyEvent *kev) {
|
|
|
|
|
/* navigate image list */
|
|
|
|
|
case XK_n:
|
|
|
|
|
case XK_space:
|
|
|
|
|
if (fileidx + 1 < filecnt) {
|
|
|
|
|
++fileidx;
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx + 1 < filecnt)
|
|
|
|
|
changed = load_image(fileidx + 1);
|
|
|
|
|
break;
|
|
|
|
|
case XK_p:
|
|
|
|
|
case XK_BackSpace:
|
|
|
|
|
if (fileidx > 0) {
|
|
|
|
|
--fileidx;
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx > 0)
|
|
|
|
|
changed = load_image(fileidx - 1);
|
|
|
|
|
break;
|
|
|
|
|
case XK_bracketleft:
|
|
|
|
|
if (fileidx != 0) {
|
|
|
|
|
fileidx = MAX(0, fileidx - 10);
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx != 0)
|
|
|
|
|
changed = load_image(MAX(0, fileidx - 10));
|
|
|
|
|
break;
|
|
|
|
|
case XK_bracketright:
|
|
|
|
|
if (fileidx != filecnt - 1) {
|
|
|
|
|
fileidx = MIN(fileidx + 10, filecnt - 1);
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx != filecnt - 1)
|
|
|
|
|
changed = load_image(MIN(fileidx + 10, filecnt - 1));
|
|
|
|
|
break;
|
|
|
|
|
case XK_g:
|
|
|
|
|
if (fileidx != 0) {
|
|
|
|
|
fileidx = 0;
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx != 0)
|
|
|
|
|
changed = load_image(0);
|
|
|
|
|
break;
|
|
|
|
|
case XK_G:
|
|
|
|
|
if (fileidx != filecnt - 1) {
|
|
|
|
|
fileidx = filecnt - 1;
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx != filecnt - 1)
|
|
|
|
|
changed = load_image(filecnt - 1);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* zooming */
|
|
|
|
@ -418,7 +409,7 @@ void on_keypress(XKeyEvent *kev) {
|
|
|
|
|
changed = 1;
|
|
|
|
|
break;
|
|
|
|
|
case XK_r:
|
|
|
|
|
changed = load_image();
|
|
|
|
|
changed = load_image(fileidx);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
@ -426,8 +417,7 @@ void on_keypress(XKeyEvent *kev) {
|
|
|
|
|
switch (ksym) {
|
|
|
|
|
/* open selected image */
|
|
|
|
|
case XK_Return:
|
|
|
|
|
fileidx = tns.sel;
|
|
|
|
|
load_image();
|
|
|
|
|
load_image(tns.sel);
|
|
|
|
|
mode = MODE_NORMAL;
|
|
|
|
|
win_set_cursor(&win, CURSOR_NONE);
|
|
|
|
|
changed = 1;
|
|
|
|
@ -496,10 +486,8 @@ void on_buttonpress(XButtonEvent *bev) {
|
|
|
|
|
if (mode == MODE_NORMAL) {
|
|
|
|
|
switch (bev->button) {
|
|
|
|
|
case Button1:
|
|
|
|
|
if (fileidx + 1 < filecnt) {
|
|
|
|
|
++fileidx;
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx + 1 < filecnt)
|
|
|
|
|
changed = load_image(fileidx + 1);
|
|
|
|
|
break;
|
|
|
|
|
case Button2:
|
|
|
|
|
mox = bev->x;
|
|
|
|
@ -509,10 +497,8 @@ void on_buttonpress(XButtonEvent *bev) {
|
|
|
|
|
drag = 1;
|
|
|
|
|
break;
|
|
|
|
|
case Button3:
|
|
|
|
|
if (fileidx > 0) {
|
|
|
|
|
--fileidx;
|
|
|
|
|
changed = load_image();
|
|
|
|
|
}
|
|
|
|
|
if (fileidx > 0)
|
|
|
|
|
changed = load_image(fileidx - 1);
|
|
|
|
|
break;
|
|
|
|
|
case Button4:
|
|
|
|
|
if (mask == ControlMask)
|
|
|
|
@ -543,8 +529,7 @@ void on_buttonpress(XButtonEvent *bev) {
|
|
|
|
|
case Button1:
|
|
|
|
|
if ((sel = tns_translate(&tns, bev->x, bev->y)) >= 0) {
|
|
|
|
|
if (sel == tns.sel) {
|
|
|
|
|
fileidx = tns.sel;
|
|
|
|
|
load_image();
|
|
|
|
|
load_image(tns.sel);
|
|
|
|
|
mode = MODE_NORMAL;
|
|
|
|
|
timo_cursor = TO_CURSOR_HIDE;
|
|
|
|
|
} else {
|
|
|
|
@ -600,7 +585,8 @@ void run() {
|
|
|
|
|
gettimeofday(&t0, 0);
|
|
|
|
|
|
|
|
|
|
while (!XPending(win.env.dpy) && tns.cnt < filecnt) {
|
|
|
|
|
tns_load(&tns, &win, filenames[tns.cnt]);
|
|
|
|
|
/* tns.cnt is increased inside tns_load */
|
|
|
|
|
tns_load(&tns, &win, tns.cnt, filenames[tns.cnt]);
|
|
|
|
|
gettimeofday(&t1, 0);
|
|
|
|
|
if (TV_TO_DOUBLE(t1) - TV_TO_DOUBLE(t0) >= 0.25)
|
|
|
|
|
break;
|
|
|
|
|