diff --git a/thumbs.c b/thumbs.c index 98b4f6d..ff368ea 100644 --- a/thumbs.c +++ b/thumbs.c @@ -242,6 +242,7 @@ bool tns_load(tns_t *tns, int n, bool force) int w, h; int maxwh = thumb_sizes[ARRLEN(thumb_sizes)-1]; bool cache_hit = false; + char *cfile; float zw, zh; thumb_t *t; Imlib_Image im = NULL; @@ -264,7 +265,19 @@ bool tns_load(tns_t *tns, int n, bool force) if (!force) { if ((im = tns_cache_load(file->path, &force)) != NULL) { - cache_hit = true; + imlib_context_set_image(im); + if (imlib_image_get_width() < maxwh && + imlib_image_get_height() < maxwh) + { + if ((cfile = tns_cache_filepath(file->path)) != NULL) { + unlink(cfile); + free(cfile); + } + imlib_free_image_and_decache(); + im = NULL; + } else { + cache_hit = true; + } #if HAVE_LIBEXIF } else { int pw = 0, ph = 0, x = 0, y = 0; @@ -311,8 +324,10 @@ bool tns_load(tns_t *tns, int n, bool force) h = ph; } } - if ((im = imlib_create_cropped_image(x, y, w, h)) == NULL) - die("could not allocate memory"); + if (w >= maxwh || h >= maxwh) { + if ((im = imlib_create_cropped_image(x, y, w, h)) == NULL) + die("could not allocate memory"); + } imlib_free_image_and_decache(); } unlink(tmppath); @@ -322,14 +337,7 @@ bool tns_load(tns_t *tns, int n, bool force) #endif } } - if (im != NULL) { - imlib_context_set_image(im); - if (imlib_image_get_width() < maxwh && imlib_image_get_height() < maxwh) { - imlib_free_image_and_decache(); - im = NULL; - cache_hit = false; - } - } + if (im == NULL && (access(file->path, R_OK) < 0 || (im = imlib_load_image(file->path)) == NULL)) { @@ -344,7 +352,9 @@ bool tns_load(tns_t *tns, int n, bool force) exif_auto_orientate(file); #endif im = tns_scale_down(im, maxwh); - tns_cache_write(im, file->path, true); + imlib_context_set_image(im); + if (imlib_image_get_width() == maxwh || imlib_image_get_height() == maxwh) + tns_cache_write(im, file->path, true); } t->im = tns_scale_down(im, thumb_sizes[tns->zl]);