Merge pull request #787 from swaywm/input-point
Add wlr_surface_point_accepts_input
This commit is contained in:
commit
f133170ff0
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue