From dd07618727bab35daf1e561d40485ec568535ea5 Mon Sep 17 00:00:00 2001 From: emersion Date: Wed, 4 Oct 2017 21:05:00 +0200 Subject: [PATCH] rootston: rotate cursor coordinates --- rootston/desktop.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/rootston/desktop.c b/rootston/desktop.c index 8d1d34d6..a216f7f9 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -105,9 +106,18 @@ struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly, struct wlr_box box; view_get_input_bounds(view, &box); - box.x += view->x; - box.y += view->y; - if (wlr_box_contains_point(&box, lx, ly)) { + if (view->rotation != 0.0) { + // Coordinates relative to the center of the view + double ox = view_sx - (double)box.width/2, + oy = view_sy - (double)box.height/2; + // Rotated coordinates + double rx = cos(view->rotation)*ox - sin(view->rotation)*oy, + ry = cos(view->rotation)*oy + sin(view->rotation)*ox; + view_sx = (double)box.width/2 + rx; + view_sy = (double)box.height/2 + ry; + } + + if (wlr_box_contains_point(&box, view_sx, view_sy)) { *sx = view_sx; *sy = view_sy; *surface = view->wlr_surface;