aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-03-11 09:49:38 +0100
committerSimon Ser <contact@emersion.fr>2021-03-11 22:52:38 +0100
commit44fa2c4b49ced30a69e86a2ed78dd9bf62e0fbb3 (patch)
tree805046b08c734400d1f7c2dfd12c559812361a68 /backend
parent9601a2abf024fb8ac400c0df178bb41ec9e5d215 (diff)
output: fix transform matrix for 90/270 rotations
We need to adjust the second translation depending on the transform we applied. Fixes: 9601a2abf024 ("output: improve transform matrix calculation" Closes: https://github.com/swaywm/wlroots/issues/2774
Diffstat (limited to 'backend')
-rw-r--r--backend/drm/drm.c10
-rw-r--r--backend/wayland/output.c6
-rw-r--r--backend/x11/output.c6
3 files changed, 18 insertions, 4 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index e06213fe..a74c9ca7 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -938,11 +938,17 @@ static bool drm_connector_set_cursor(struct wlr_output *output,
float output_matrix[9];
wlr_matrix_identity(output_matrix);
if (output->transform != WL_OUTPUT_TRANSFORM_NORMAL) {
+ struct wlr_box tr_size = {
+ .width = plane->surf.width,
+ .height = plane->surf.height,
+ };
+ wlr_box_transform(&tr_size, &tr_size, output->transform, 0, 0);
+
wlr_matrix_translate(output_matrix, plane->surf.width / 2.0,
plane->surf.height / 2.0);
wlr_matrix_transform(output_matrix, output->transform);
- wlr_matrix_translate(output_matrix, - plane->surf.width / 2.0,
- - plane->surf.height / 2.0);
+ wlr_matrix_translate(output_matrix, - tr_size.width / 2.0,
+ - tr_size.height / 2.0);
}
float matrix[9];
diff --git a/backend/wayland/output.c b/backend/wayland/output.c
index 1e13f455..b36af17b 100644
--- a/backend/wayland/output.c
+++ b/backend/wayland/output.c
@@ -434,9 +434,13 @@ static bool output_set_cursor(struct wlr_output *wlr_output,
float output_matrix[9];
wlr_matrix_identity(output_matrix);
if (wlr_output->transform != WL_OUTPUT_TRANSFORM_NORMAL) {
+ struct wlr_box tr_size = { .width = width, .height = height };
+ wlr_box_transform(&tr_size, &tr_size, wlr_output->transform, 0, 0);
+
wlr_matrix_translate(output_matrix, width / 2.0, height / 2.0);
wlr_matrix_transform(output_matrix, wlr_output->transform);
- wlr_matrix_translate(output_matrix, - width / 2.0, - height / 2.0);
+ wlr_matrix_translate(output_matrix,
+ - tr_size.width / 2.0, - tr_size.height / 2.0);
}
float matrix[9];
diff --git a/backend/x11/output.c b/backend/x11/output.c
index 406185e3..0d045ff4 100644
--- a/backend/x11/output.c
+++ b/backend/x11/output.c
@@ -418,9 +418,13 @@ static bool output_cursor_to_picture(struct wlr_x11_output *output,
float output_matrix[9];
wlr_matrix_identity(output_matrix);
if (output->wlr_output.transform != WL_OUTPUT_TRANSFORM_NORMAL) {
+ struct wlr_box tr_size = { .width = width, .height = height };
+ wlr_box_transform(&tr_size, &tr_size, output->wlr_output.transform, 0, 0);
+
wlr_matrix_translate(output_matrix, width / 2.0, height / 2.0);
wlr_matrix_transform(output_matrix, output->wlr_output.transform);
- wlr_matrix_translate(output_matrix, - width / 2.0, - height / 2.0);
+ wlr_matrix_translate(output_matrix,
+ - tr_size.width / 2.0, - tr_size.height / 2.0);
}
float matrix[9];