#include "../include/Utils.hpp" #include #include #include #include namespace QuickMedia { static float scale = 1.0f; static bool scale_set = false; static const int XFT_DPI_DEFAULT = 96; // Returns 96 on error static int xrdb_get_dpi() { int xft_dpi = XFT_DPI_DEFAULT; FILE *xrdb_query = popen("xrdb -query", "r"); if(!xrdb_query) return xft_dpi; char line[512]; while(fgets(line, sizeof(line), xrdb_query)) { int line_length = strlen(line); if(line_length > 0 && line[line_length - 1] == '\n') { line[line_length - 1] = '\0'; line_length--; } if(line_length > 8 && memcmp(line, "Xft.dpi:", 8) == 0) { int xft_dpi_file = atoi(line + 8); if(xft_dpi_file > 0) { xft_dpi = xft_dpi_file; break; } } } pclose(xrdb_query); return xft_dpi; } float get_ui_scale() { if(scale_set) return scale; char *gdk_scale = getenv("GDK_SCALE"); if(gdk_scale) { setlocale(LC_ALL, "C"); // Sigh... stupid C scale = atof(gdk_scale); if(scale < 0.0001f) scale = 1.0f; } else { scale = (float)xrdb_get_dpi() / (float)XFT_DPI_DEFAULT; } scale_set = true; return scale; } }