summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2021-05-23 19:01:39 +0100
committerGitHub <noreply@github.com>2021-05-23 13:01:39 -0500
commitf0554b27df459b7794d990f9da72318e2e3d2620 (patch)
treeeaf69ae7e200d558d2a530890ce4114ee0c2abd9
parent65edc9ad9a561e0d3aec9fde23b8c810272890d3 (diff)
Add a workaround for icons not scaling right on HiDPI screens. (#2573)
-rw-r--r--src/fe-gtk/pixmaps.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/fe-gtk/pixmaps.c b/src/fe-gtk/pixmaps.c
index 6c6cfaeb..9bdf46fc 100644
--- a/src/fe-gtk/pixmaps.c
+++ b/src/fe-gtk/pixmaps.c
@@ -89,7 +89,9 @@ pixmap_load_from_file (char *filename)
static GdkPixbuf *
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);
pixbuf = gdk_pixbuf_new_from_file (path, 0);
@@ -102,6 +104,24 @@ load_pixmap (const char *filename)
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);
return pixbuf;