From 1df78932d72efaee2af895451442a8eaeec7b674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 11 Jan 2021 17:53:27 +0100 Subject: [PATCH] wayland: take rotation into account when calculating the logical PPI --- wayland.c | 20 ++++++++++++++++++++ wayland.h | 1 + 2 files changed, 21 insertions(+) diff --git a/wayland.c b/wayland.c index 7dbf8593..cf6f563b 100644 --- a/wayland.c +++ b/wayland.c @@ -331,6 +331,25 @@ output_update_ppi(struct monitor *mon) mon->ppi.real.x = mon->dim.px_real.width / x_inches; mon->ppi.real.y = mon->dim.px_real.height / y_inches; + /* The *logical* size is affected by the transform */ + switch (mon->transform) { + case WL_OUTPUT_TRANSFORM_90: + case WL_OUTPUT_TRANSFORM_270: + case WL_OUTPUT_TRANSFORM_FLIPPED_90: + case WL_OUTPUT_TRANSFORM_FLIPPED_270: { + int swap = x_inches; + x_inches = y_inches; + y_inches = swap; + break; + } + + case WL_OUTPUT_TRANSFORM_NORMAL: + case WL_OUTPUT_TRANSFORM_180: + case WL_OUTPUT_TRANSFORM_FLIPPED: + case WL_OUTPUT_TRANSFORM_FLIPPED_180: + break; + } + mon->ppi.scaled.x = mon->dim.px_scaled.width / x_inches; mon->ppi.scaled.y = mon->dim.px_scaled.height / y_inches; @@ -354,6 +373,7 @@ output_geometry(void *data, struct wl_output *wl_output, int32_t x, int32_t y, mon->make = make != NULL ? xstrdup(make) : NULL; mon->model = model != NULL ? xstrdup(model) : NULL; mon->subpixel = subpixel; + mon->transform = transform; output_update_ppi(mon); } diff --git a/wayland.h b/wayland.h index 7e67dd1b..93244353 100644 --- a/wayland.h +++ b/wayland.h @@ -321,6 +321,7 @@ struct monitor { int scale; float refresh; enum wl_output_subpixel subpixel; + enum wl_output_transform transform; /* From wl_output */ char *make;