boxes: Add function to check if rectangle is adjacent to region

We may need to check if rectangles region has adjacent neighbors and
so if there are no gaps in between monitors.

This can be done by checking if each monitor is adjacent to any other in
the same region.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/522>
This commit is contained in:
Marco Trevisan (Treviño) 2019-03-16 00:19:08 +01:00 committed by Marge Bot
parent d3602e9fef
commit 58c2f423f7
2 changed files with 23 additions and 0 deletions

View File

@ -158,6 +158,10 @@ gboolean meta_rectangle_overlaps_with_region (
const GList *spanning_rects,
const MetaRectangle *rect);
gboolean meta_rectangle_is_adjacent_to_any_in_region (
const GList *spanning_rects,
MetaRectangle *rect);
/* Make the rectangle small enough to fit into one of the spanning_rects,
* but make it no smaller than min_size.
*/

View File

@ -899,6 +899,25 @@ meta_rectangle_overlaps_with_region (const GList *spanning_rects,
return overlaps;
}
gboolean
meta_rectangle_is_adjacent_to_any_in_region (const GList *spanning_rects,
MetaRectangle *rect)
{
const GList *l;
for (l = spanning_rects; l; l = l->next)
{
MetaRectangle *other = (MetaRectangle *) l->data;
if (rect == other || meta_rectangle_equal (rect, other))
continue;
if (meta_rectangle_is_adjacent_to (rect, other))
return TRUE;
}
return FALSE;
}
void
meta_rectangle_clamp_to_fit_into_region (const GList *spanning_rects,