Add a workaround for icons not scaling right on HiDPI screens. (#2573)

This commit is contained in:
Sadie Powell 2021-05-23 19:01:39 +01:00 committed by GitHub
parent 65edc9ad9a
commit f0554b27df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -89,7 +89,9 @@ pixmap_load_from_file (char *filename)
static GdkPixbuf * static GdkPixbuf *
load_pixmap (const char *filename) load_pixmap (const char *filename)
{ {
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf, *scaledpixbuf;
const char *scale;
int iscale;
gchar *path = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "icons" G_DIR_SEPARATOR_S "%s.png", get_xdir (), filename); gchar *path = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "icons" G_DIR_SEPARATOR_S "%s.png", get_xdir (), filename);
pixbuf = gdk_pixbuf_new_from_file (path, 0); pixbuf = gdk_pixbuf_new_from_file (path, 0);
@ -102,6 +104,24 @@ load_pixmap (const char *filename)
g_free (path); g_free (path);
} }
// Hack to avoid unbearably tiny icons on HiDPI screens.
scale = g_getenv ("GDK_SCALE");
if (scale)
{
iscale = atoi (scale);
if (iscale > 0)
{
scaledpixbuf = gdk_pixbuf_scale_simple (pixbuf, gdk_pixbuf_get_width (pixbuf) * iscale,
gdk_pixbuf_get_height (pixbuf) * iscale, GDK_INTERP_BILINEAR);
if (scaledpixbuf)
{
g_object_unref (pixbuf);
pixbuf = scaledpixbuf;
}
}
}
g_warn_if_fail (pixbuf != NULL); g_warn_if_fail (pixbuf != NULL);
return pixbuf; return pixbuf;