diff --git a/config.h b/config.h index 7026d38..81f82ec 100644 --- a/config.h +++ b/config.h @@ -65,6 +65,7 @@ struct settings defaults = { .browser = "/usr/bin/firefox", +.min_icon_size = 0, .max_icon_size = 0, /* paths to default icons */ diff --git a/src/icon.c b/src/icon.c index 71a4731..f24ef4b 100644 --- a/src/icon.c +++ b/src/icon.c @@ -116,19 +116,23 @@ GdkPixbuf *icon_pixbuf_scale(GdkPixbuf *pixbuf) int w = gdk_pixbuf_get_width(pixbuf); int h = gdk_pixbuf_get_height(pixbuf); - int larger = w > h ? w : h; + int landscape = w > h; + int orig_larger = landscape ? w : h; + double larger = orig_larger; + double smaller = landscape ? h : w; + if (settings.min_icon_size && smaller < settings.min_icon_size) { + larger = larger / smaller * settings.min_icon_size; + smaller = settings.min_icon_size; + } if (settings.max_icon_size && larger > settings.max_icon_size) { - int scaled_w = settings.max_icon_size; - int scaled_h = settings.max_icon_size; - if (w >= h) - scaled_h = (settings.max_icon_size * h) / w; - else - scaled_w = (settings.max_icon_size * w) / h; - - GdkPixbuf *scaled = gdk_pixbuf_scale_simple( - pixbuf, - scaled_w, - scaled_h, + smaller = smaller / larger * settings.max_icon_size; + larger = settings.max_icon_size; + } + if ((int) larger != orig_larger) { + GdkPixbuf *scaled; + scaled = gdk_pixbuf_scale_simple(pixbuf, + (int) (landscape ? larger : smaller), + (int) (landscape ? smaller : larger), GDK_INTERP_BILINEAR); g_object_unref(pixbuf); pixbuf = scaled; diff --git a/src/settings.c b/src/settings.c index fde3715..90077fb 100644 --- a/src/settings.c +++ b/src/settings.c @@ -423,6 +423,12 @@ void load_settings(char *cmdline_config_path) g_free(c); } + settings.min_icon_size = option_get_int( + "global", + "min_icon_size", "-min_icon_size", defaults.min_icon_size, + "Scale smaller icons up to this size, set to 0 to disable. If max_icon_size also specified, that has the final say." + ); + settings.max_icon_size = option_get_int( "global", "max_icon_size", "-max_icon_size", defaults.max_icon_size, diff --git a/src/settings.h b/src/settings.h index 6bcf6b8..6e541c2 100644 --- a/src/settings.h +++ b/src/settings.h @@ -75,6 +75,7 @@ struct settings { char *browser; char **browser_cmd; enum icon_position icon_position; + int min_icon_size; int max_icon_size; char *icon_path; enum follow_mode f_mode;