diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/options.c | 10 | ||||
| -rw-r--r-- | src/thumbnail.c | 36 | ||||
| -rw-r--r-- | src/thumbnail.h | 24 | 
3 files changed, 42 insertions, 28 deletions
| diff --git a/src/options.c b/src/options.c index 52c90d6..f967456 100644 --- a/src/options.c +++ b/src/options.c @@ -798,14 +798,6 @@ static void check_options(void)  		opt.thumb_title = NULL;  	} -	if (opt.cache_thumbnails && ((opt.thumb_w > 128) || (opt.thumb_h > 128))) { -		/* No warning needed, the documentation should be clear enough. -		 * Plus, we don't want to annoy users who use --cache-thumbnails by -		 * default but frequently change their thumbnail size. -		 */ -		opt.cache_thumbnails = 0; -	} -  	D_RETURN_(4);  } @@ -970,7 +962,7 @@ void show_usage(void)  " -t, --thumbnails          As --index, but clicking an image will open it in\n"  "                           a new viewing window\n"  "     --cache-thumbnails    Enable thumbnail caching for thumbnail mode.\n" -"                           Only works with thumbnails <= 128x128 pixels\n" +"                           Only works with thumbnails <= 256x256 pixels\n"  " -~, --thumb-title STRING  Set window title for images opened from thumbnail mode.\n"  "                           Supports format specifiers, see there.\n"  " -I, --fullindex           Same as index mode, but below each thumbnail you\n" diff --git a/src/thumbnail.c b/src/thumbnail.c index ece4853..fe36213 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -172,9 +172,27 @@ void init_thumbnail_mode(void)  	/* make sure we have an ~/.thumbnails/normal directory for storing  	   permanent thumbnails */ -	td.cache_thumbnails = feh_thumbnail_setup_thumbnail_dir();  	td.cache_thumbnails = opt.cache_thumbnails; +	if (td.cache_thumbnails) { +		if (opt.thumb_w > opt.thumb_h) +			td.cache_dim = opt.thumb_w; +		else +			td.cache_dim = opt.thumb_h; + +		if (td.cache_dim > 256) { +			/* No caching as specified by standard. Sort of. */ +			td.cache_thumbnails = 0; +		} else if (td.cache_dim > 128) { +			td.cache_dim = 256; +			td.cache_dir = estrdup("large"); +		} else { +			td.cache_dim = 128; +			td.cache_dir = estrdup("normal"); +		} +		feh_thumbnail_setup_thumbnail_dir(); +	} +  	for (l = filelist; l; l = l->next) {  		file = FEH_FILE(l->data);  		if (last) { @@ -736,7 +754,7 @@ char *feh_thumbnail_get_name(char *uri)  	home = getenv("HOME");  	if (home) { -		thumb_file = estrjoin("/", home, ".thumbnails/normal", md5_name, NULL); +		thumb_file = estrjoin("/", home, ".thumbnails", td.cache_dir, md5_name, NULL);  	}  	free(md5_name); @@ -748,7 +766,7 @@ char *feh_thumbnail_get_name_uri(char *name)  {  	char *cwd, *uri = NULL; -	/* FIXME: what happends with http, https, and ftp? MTime etc */ +	/* FIXME: what happens with http, https, and ftp? MTime etc */  	if ((strncmp(name, "http://", 7) != 0) &&  	    (strncmp(name, "https://", 8) != 0) && (strncmp(name, "ftp://", 6) != 0)  	    && (strncmp(name, "file://", 7) != 0)) { @@ -801,15 +819,15 @@ int feh_thumbnail_generate(Imlib_Image * image, feh_file * file,  	if (feh_load_image(&im_temp, file) != 0) {  		w = gib_imlib_image_get_width(im_temp);  		h = gib_imlib_image_get_height(im_temp); -		thumb_w = 128; -		thumb_h = 128; +		thumb_w = td.cache_dim; +		thumb_h = td.cache_dim; -		if ((w > 128) || (h > 128)) { +		if ((w > td.cache_dim) || (h > td.cache_dim)) {  			double ratio = (double) w / h;  			if (ratio > 1.0) -				thumb_h = 128 / ratio; +				thumb_h = td.cache_dim / ratio;  			else if (ratio != 1.0) -				thumb_w = 128 * ratio; +				thumb_w = td.cache_dim * ratio;  		}  		*image = gib_imlib_create_cropped_scaled_image(im_temp, 0, 0, w, h, @@ -865,7 +883,7 @@ int feh_thumbnail_setup_thumbnail_dir(void)  	home = getenv("HOME");  	if (home != NULL) { -		dir = estrjoin("/", home, ".thumbnails/normal", NULL); +		dir = estrjoin("/", home, ".thumbnails", td.cache_dir, NULL);  		if (!stat(dir, &sb)) {  			if (S_ISDIR(sb.st_mode)) diff --git a/src/thumbnail.h b/src/thumbnail.h index d015994..a384d11 100644 --- a/src/thumbnail.h +++ b/src/thumbnail.h @@ -45,20 +45,24 @@ typedef struct thumbnail {  typedef struct thumbmode_data {  	/* FIXME: text_area_h not really needed, remove? */ -	Imlib_Image im_main;	/* base image which all thumbnails are rendered on */ -	Imlib_Image im_bg;	/* background for the thumbnails */ +	Imlib_Image im_main;     /* base image which all thumbnails are rendered on */ +	Imlib_Image im_bg;       /* background for the thumbnails */ -	Imlib_Font font_main;	/* font used for file info */ -	Imlib_Font font_title;	/* font used for title */ +	Imlib_Font font_main;    /* font used for file info */ +	Imlib_Font font_title;   /* font used for title */ -	int w, h, bg_w, bg_h;	/* dimensions of the window and bg image */ +	int w, h, bg_w, bg_h;    /* dimensions of the window and bg image */ -	int thumb_tot_h;	/* total space needed for a thumbnail including description */ -	int text_area_w, text_area_h;	/* space needed for thumbnail description */ +	int thumb_tot_h;         /* total space needed for a thumbnail including description */ +	int text_area_w, text_area_h; /* space needed for thumbnail description */ + +	int max_column_w;        /* FIXME: description */ +	int vertical;            /* FIXME: vertical in what way? */ + +	int cache_thumbnails;    /* use cached thumbnails from ~/.thumbnails */ +	int cache_dim;           /* 128 = 128x128 ("normal"), 256 = 256x256 ("large") */ +	char *cache_dir;         /* "normal"/"large" (.thumbnails/...) */ -	int max_column_w;	/* FIXME: description */ -	int vertical;		/* FIXME: vertical in what way? */ -	int cache_thumbnails;	/* use cached thumbnails from ~/.thumbnails/normal */  } thumbmode_data;  feh_thumbnail *feh_thumbnail_new(feh_file * fil, int x, int y, int w, int h); | 
