*/
void init_dpi(void) {
xcb_xrm_database_t *database = NULL;
+ char *resource = NULL;
if (conn == NULL) {
goto init_dpi_end;
goto init_dpi_end;
}
- char *resource;
xcb_xrm_resource_get_string(database, "Xft.dpi", NULL, &resource);
if (resource == NULL) {
DLOG("Resource Xft.dpi not specified, skipping.\n");
}
char *endptr;
- dpi = strtol(resource, &endptr, 10);
- if (dpi == LONG_MAX || dpi == LONG_MIN || dpi < 0 || *endptr != '\0' || endptr == resource) {
+ double in_dpi = strtod(resource, &endptr);
+ if (in_dpi == HUGE_VAL || dpi < 0 || *endptr != '\0' || endptr == resource) {
ELOG("Xft.dpi = %s is an invalid number and couldn't be parsed.\n", resource);
dpi = 0;
goto init_dpi_end;
}
+ dpi = lround(in_dpi);
DLOG("Found Xft.dpi = %ld.\n", dpi);
init_dpi_end:
+ free(resource);
+
if (database != NULL) {
xcb_xrm_database_free(database);
}
}
}
+/*
+ * This function returns the value of the DPI setting.
+ *
+ */
+long get_dpi_value(void) {
+ return dpi;
+}
+
/*
* Convert a logical amount of pixels (e.g. 2 pixels on a “standard” 96 DPI
* screen) to a corresponding amount of physical pixels on a standard or retina