util/box: Add wlr_box_intersects

wlr_box_intersection generates a new box based on the intersection of
two boxes. Often we simply want to know *if* two boxes intersected,
which we can answer much cheaper.

Add wlr_box_intersects, in similar vein as wlr_box_contains_box but
returning true for any overlap.
This commit is contained in:
Kenny Levinsen 2026-02-26 16:41:48 +01:00 committed by Simon Ser
parent 285cee5f3a
commit ff7d093800
2 changed files with 16 additions and 0 deletions

View file

@ -107,6 +107,13 @@ void wlr_fbox_transform(struct wlr_fbox *dest, const struct wlr_fbox *box,
#ifdef WLR_USE_UNSTABLE #ifdef WLR_USE_UNSTABLE
/**
* Checks whether two boxes intersect.
*
* Returns false if either box is empty.
*/
bool wlr_box_intersects(const struct wlr_box *a, const struct wlr_box *b);
/** /**
* Returns true if the two boxes are equal, false otherwise. * Returns true if the two boxes are equal, false otherwise.
*/ */

View file

@ -102,6 +102,15 @@ bool wlr_box_contains_box(const struct wlr_box *bigger, const struct wlr_box *sm
smaller->y + smaller->height <= bigger->y + bigger->height; smaller->y + smaller->height <= bigger->y + bigger->height;
} }
bool wlr_box_intersects(const struct wlr_box *a, const struct wlr_box *b) {
if (wlr_box_empty(a) || wlr_box_empty(b)) {
return false;
}
return a->x < b->x + b->width && b->x < a->x + a->width &&
a->y < b->y + b->height && b->y < a->y + a->height;
}
void wlr_box_transform(struct wlr_box *dest, const struct wlr_box *box, void wlr_box_transform(struct wlr_box *dest, const struct wlr_box *box,
enum wl_output_transform transform, int width, int height) { enum wl_output_transform transform, int width, int height) {
struct wlr_box src = {0}; struct wlr_box src = {0};