Use the DPI setting within the i3bar (#2556)

This commit is contained in:
mihaicmn 2016-11-12 16:34:54 +02:00 committed by Michael Stapelberg
parent 6e519e18e1
commit ad7dec31d5
4 changed files with 17 additions and 13 deletions

View File

@ -149,6 +149,8 @@ int main(int argc, char **argv) {
socket_path = expand_path(i3_default_sock_path);
}
init_dpi();
init_outputs();
if (init_connection(socket_path)) {
/* Request the bar configuration. When it arrives, we fill the config array. */

View File

@ -473,6 +473,12 @@ char *get_exe_path(const char *argv0);
*/
void init_dpi(void);
/**
* This function returns the value of the DPI setting.
*
*/
long get_dpi_value(void);
/**
* 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

View File

@ -64,6 +64,14 @@ init_dpi_end:
}
}
/*
* 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

View File

@ -24,24 +24,12 @@ static double pango_font_red;
static double pango_font_green;
static double pango_font_blue;
/* Necessary to track whether the dpi changes and trigger a LOG() message,
* which is more easily visible to users. */
static double logged_dpi = 0.0;
static PangoLayout *create_layout_with_dpi(cairo_t *cr) {
PangoLayout *layout;
PangoContext *context;
context = pango_cairo_create_context(cr);
const double dpi = (double)root_screen->height_in_pixels * 25.4 /
(double)root_screen->height_in_millimeters;
if (logged_dpi != dpi) {
logged_dpi = dpi;
LOG("X11 root window dictates %f DPI\n", dpi);
} else {
DLOG("X11 root window dictates %f DPI\n", dpi);
}
pango_cairo_context_set_resolution(context, dpi);
pango_cairo_context_set_resolution(context, get_dpi_value());
layout = pango_layout_new(context);
g_object_unref(context);