rootston: fix input events for rotated views

This commit is contained in:
emersion 2019-03-02 13:42:35 +01:00 committed by Drew DeVault
parent c2178d51a8
commit 6a60dafe59
2 changed files with 6 additions and 20 deletions

View File

@ -51,22 +51,8 @@ static bool view_at(struct roots_view *view, double lx, double ly,
double view_sx = lx - view->box.x; double view_sx = lx - view->box.x;
double view_sy = ly - view->box.y; double view_sy = ly - view->box.y;
rotate_child_position(&view_sx, &view_sy, 0, 0,
struct wlr_surface_state *state = &view->wlr_surface->current; view->box.width, view->box.height, -view->rotation);
struct wlr_box box = {
.x = 0, .y = 0,
.width = state->width, .height = state->height,
};
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 = rx + (double)box.width/2;
view_sy = ry + (double)box.height/2;
}
double _sx, _sy; double _sx, _sy;
struct wlr_surface *_surface = NULL; struct wlr_surface *_surface = NULL;

View File

@ -30,11 +30,11 @@ void rotate_child_position(double *sx, double *sy, double sw, double sh,
} }
// Coordinates relative to the center of the subsurface // Coordinates relative to the center of the subsurface
double ox = *sx - pw/2 + sw/2, double cx = *sx - pw/2 + sw/2,
oy = *sy - ph/2 + sh/2; cy = *sy - ph/2 + sh/2;
// Rotated coordinates // Rotated coordinates
double rx = cos(rotation)*ox - sin(rotation)*oy, double rx = cos(rotation)*cx - sin(rotation)*cy,
ry = cos(rotation)*oy + sin(rotation)*ox; ry = cos(rotation)*cy + sin(rotation)*cx;
*sx = rx + pw/2 - sw/2; *sx = rx + pw/2 - sw/2;
*sy = ry + ph/2 - sh/2; *sy = ry + ph/2 - sh/2;
} }