Add wlr_surface_point_accepts_input

Ref https://github.com/swaywm/sway/pull/1674
This commit is contained in:
Drew DeVault 2018-03-30 22:19:33 -04:00
parent 2053a4c144
commit e19ee6d469
3 changed files with 12 additions and 12 deletions

View File

@ -134,6 +134,9 @@ struct wlr_surface *wlr_surface_get_main_surface(struct wlr_surface *surface);
struct wlr_subsurface *wlr_surface_subsurface_at(struct wlr_surface *surface, struct wlr_subsurface *wlr_surface_subsurface_at(struct wlr_surface *surface,
double sx, double sy, double *sub_x, double *sub_y); double sx, double sy, double *sub_x, double *sub_y);
bool wlr_surface_point_accepts_input(
struct wlr_surface *surface, double sx, double sy);
void wlr_surface_send_enter(struct wlr_surface *surface, void wlr_surface_send_enter(struct wlr_surface *surface,
struct wlr_output *output); struct wlr_output *output);

View File

@ -622,9 +622,7 @@ static bool view_at(struct roots_view *view, double lx, double ly,
return true; return true;
} }
if (wlr_box_contains_point(&box, view_sx, view_sy) && if (wlr_surface_point_accepts_input(view->wlr_surface, view_sx, view_sy)) {
pixman_region32_contains_point(&view->wlr_surface->current->input,
view_sx, view_sy, NULL)) {
*sx = view_sx; *sx = view_sx;
*sy = view_sy; *sy = view_sy;
*surface = view->wlr_surface; *surface = view->wlr_surface;
@ -668,16 +666,8 @@ static struct wlr_surface *layer_surface_at(struct roots_output *output,
roots_surface->layer_surface->surface; roots_surface->layer_surface->surface;
double _sx = ox - roots_surface->geo.x; double _sx = ox - roots_surface->geo.x;
double _sy = oy - roots_surface->geo.y; double _sy = oy - roots_surface->geo.y;
struct wlr_box box = {
.x = roots_surface->geo.x,
.y = roots_surface->geo.y,
.width = wlr_surface->current->width,
.height = wlr_surface->current->height,
};
// TODO: Test popups/subsurfaces // TODO: Test popups/subsurfaces
if (wlr_box_contains_point(&box, ox, oy) && if (wlr_surface_point_accepts_input(wlr_surface, _sx, _sy)) {
pixman_region32_contains_point(&wlr_surface->current->input,
_sx, _sy, NULL)) {
*sx = _sx; *sx = _sx;
*sy = _sy; *sy = _sy;
return wlr_surface; return wlr_surface;

View File

@ -952,3 +952,10 @@ void wlr_surface_set_role_committed(struct wlr_surface *surface,
surface->role_committed = role_committed; surface->role_committed = role_committed;
surface->role_data = role_data; surface->role_data = role_data;
} }
bool wlr_surface_point_accepts_input(
struct wlr_surface *surface, double sx, double sy) {
return sx >= 0 && sx <= surface->current->width &&
sy >= 0 && sy <= surface->current->height &&
pixman_region32_contains_point(&surface->current->input, sx, sy, NULL);
}