|
|
|
@ -31,6 +31,8 @@ void on_keypress(XEvent*);
|
|
|
|
|
void on_configurenotify(XEvent*);
|
|
|
|
|
void on_expose(XEvent*);
|
|
|
|
|
|
|
|
|
|
void update_title();
|
|
|
|
|
|
|
|
|
|
static void (*handler[LASTEvent])(XEvent*) = {
|
|
|
|
|
[Expose] = on_expose,
|
|
|
|
|
[ConfigureNotify] = on_configurenotify,
|
|
|
|
@ -44,6 +46,9 @@ const char **filenames;
|
|
|
|
|
unsigned int filecnt;
|
|
|
|
|
unsigned int fileidx;
|
|
|
|
|
|
|
|
|
|
#define TITLE_LEN 256
|
|
|
|
|
char win_title[TITLE_LEN];
|
|
|
|
|
|
|
|
|
|
void run() {
|
|
|
|
|
XEvent ev;
|
|
|
|
|
|
|
|
|
@ -90,6 +95,7 @@ int main(int argc, char **argv) {
|
|
|
|
|
|
|
|
|
|
img_load(&img, filenames[fileidx]);
|
|
|
|
|
img_display(&img, &win);
|
|
|
|
|
update_title();
|
|
|
|
|
|
|
|
|
|
run();
|
|
|
|
|
|
|
|
|
@ -127,6 +133,7 @@ void on_keypress(XEvent *ev) {
|
|
|
|
|
if (fileidx + 1 < filecnt) {
|
|
|
|
|
img_load(&img, filenames[++fileidx]);
|
|
|
|
|
img_display(&img, &win);
|
|
|
|
|
update_title();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case XK_p:
|
|
|
|
@ -134,6 +141,7 @@ void on_keypress(XEvent *ev) {
|
|
|
|
|
if (fileidx > 0) {
|
|
|
|
|
img_load(&img, filenames[--fileidx]);
|
|
|
|
|
img_display(&img, &win);
|
|
|
|
|
update_title();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -153,3 +161,18 @@ void on_expose(XEvent *ev) {
|
|
|
|
|
img_render(&img, &win, ev->xexpose.x, ev->xexpose.y,
|
|
|
|
|
ev->xexpose.width, ev->xexpose.height);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void update_title() {
|
|
|
|
|
int n;
|
|
|
|
|
|
|
|
|
|
n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] <%d%%> %s", fileidx + 1,
|
|
|
|
|
filecnt, (int) (img.zoom * 100.0), filenames[fileidx]);
|
|
|
|
|
|
|
|
|
|
if (n >= TITLE_LEN) {
|
|
|
|
|
win_title[TITLE_LEN - 2] = '.';
|
|
|
|
|
win_title[TITLE_LEN - 3] = '.';
|
|
|
|
|
win_title[TITLE_LEN - 4] = '.';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
win_set_title(&win, win_title);
|
|
|
|
|
}
|
|
|
|
|