Use the DPI setting within the i3bar (#2556)
This commit is contained in:
parent
6e519e18e1
commit
ad7dec31d5
|
@ -149,6 +149,8 @@ int main(int argc, char **argv) {
|
||||||
socket_path = expand_path(i3_default_sock_path);
|
socket_path = expand_path(i3_default_sock_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init_dpi();
|
||||||
|
|
||||||
init_outputs();
|
init_outputs();
|
||||||
if (init_connection(socket_path)) {
|
if (init_connection(socket_path)) {
|
||||||
/* Request the bar configuration. When it arrives, we fill the config array. */
|
/* Request the bar configuration. When it arrives, we fill the config array. */
|
||||||
|
|
|
@ -473,6 +473,12 @@ char *get_exe_path(const char *argv0);
|
||||||
*/
|
*/
|
||||||
void init_dpi(void);
|
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
|
* 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
|
* screen) to a corresponding amount of physical pixels on a standard or retina
|
||||||
|
|
|
@ -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
|
* 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
|
* screen) to a corresponding amount of physical pixels on a standard or retina
|
||||||
|
|
14
libi3/font.c
14
libi3/font.c
|
@ -24,24 +24,12 @@ static double pango_font_red;
|
||||||
static double pango_font_green;
|
static double pango_font_green;
|
||||||
static double pango_font_blue;
|
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) {
|
static PangoLayout *create_layout_with_dpi(cairo_t *cr) {
|
||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
PangoContext *context;
|
PangoContext *context;
|
||||||
|
|
||||||
context = pango_cairo_create_context(cr);
|
context = pango_cairo_create_context(cr);
|
||||||
const double dpi = (double)root_screen->height_in_pixels * 25.4 /
|
pango_cairo_context_set_resolution(context, get_dpi_value());
|
||||||
(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);
|
|
||||||
layout = pango_layout_new(context);
|
layout = pango_layout_new(context);
|
||||||
g_object_unref(context);
|
g_object_unref(context);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue