From 095217b26f43b711c8ebc281110553ec788f7ebe Mon Sep 17 00:00:00 2001 From: Bert Date: Thu, 17 Feb 2011 15:58:11 +0100 Subject: Linked thumbnails to files --- main.c | 16 ++++++---------- thumbs.c | 12 +++++++----- thumbs.h | 1 - 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/main.c b/main.c index ab2508f..bc6d9a3 100644 --- a/main.c +++ b/main.c @@ -55,8 +55,6 @@ const char **filenames; int filecnt, fileidx; size_t filesize; -int tns_loaded; - #define TITLE_LEN 256 char win_title[TITLE_LEN]; @@ -131,10 +129,8 @@ int main(int argc, char **argv) { win_open(&win); img_init(&img, &win); - if (options->thumbnails) { - tns_loaded = 0; + if (options->thumbnails) tns_init(&tns, filecnt); - } if (options->thumbnails == 2) { mode = MODE_THUMBS; @@ -161,7 +157,7 @@ void update_title() { if (mode == MODE_THUMBS) { n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] %s", tns.cnt ? tns.sel + 1 : 0, tns.cnt, - tns.cnt ? tns.thumbs[tns.sel].filename : ""); + tns.cnt ? filenames[tns.sel] : ""); } else { if (img.valid) { size = filesize; @@ -490,17 +486,17 @@ void run() { timeout = 0; while (1) { - if (mode == MODE_THUMBS && tns_loaded < filecnt) { + if (mode == MODE_THUMBS && tns.cnt < filecnt) { win_set_cursor(&win, CURSOR_WATCH); gettimeofday(&t0, 0); - while (!XPending(win.env.dpy) && tns_loaded < filecnt) { - tns_load(&tns, &win, filenames[tns_loaded++]); + while (!XPending(win.env.dpy) && tns.cnt < filecnt) { + tns_load(&tns, &win, filenames[tns.cnt]); gettimeofday(&t, 0); if (TV_TO_DOUBLE(t) - TV_TO_DOUBLE(t0) >= 0.25) break; } - if (tns_loaded == filecnt) + if (tns.cnt == filecnt) win_set_cursor(&win, CURSOR_ARROW); if (!XPending(win.env.dpy)) { redraw(); diff --git a/thumbs.c b/thumbs.c index bac00d9..e66dd1c 100644 --- a/thumbs.c +++ b/thumbs.c @@ -25,6 +25,7 @@ #include "thumbs.h" #include "util.h" +extern Imlib_Image *im_broken; const int thumb_dim = THUMB_SIZE + 10; void tns_init(tns_t *tns, int cnt) { @@ -57,19 +58,20 @@ void tns_load(tns_t *tns, win_t *win, const char *filename) { if (!tns || !win || !filename) return; - if (!(im = imlib_load_image(filename))) - return; - - imlib_context_set_image(im); + if ((im = imlib_load_image(filename))) + imlib_context_set_image(im); + else + imlib_context_set_image(im_broken); w = imlib_image_get_width(); h = imlib_image_get_height(); zw = (float) THUMB_SIZE / (float) w; zh = (float) THUMB_SIZE / (float) h; z = MIN(zw, zh); + if (!im && z > 1.0) + z = 1.0; t = &tns->thumbs[tns->cnt++]; - t->filename = filename; t->w = z * w; t->h = z * h; diff --git a/thumbs.h b/thumbs.h index 01b161a..82c3a1a 100644 --- a/thumbs.h +++ b/thumbs.h @@ -23,7 +23,6 @@ typedef struct thumb_s { Pixmap pm; - const char *filename; int x; int y; int w; -- cgit v1.2.3-54-g00ecf