mtk: Add Rectangle.contains_point
By turning a macro that exists in the codebase to a proper function so that gnome-shell could make use of it as well instead of using a region for it contains_point api... Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3801>
This commit is contained in:
parent
2f8a598582
commit
6c972546f1
7 changed files with 39 additions and 11 deletions
|
@ -152,7 +152,7 @@ mtk_rectangle_union (const MtkRectangle *rect1,
|
|||
* @src2: another #MtkRectangle
|
||||
* @dest: (out caller-allocates): an empty #MtkRectangle, to be filled
|
||||
* with the coordinates of the intersection.
|
||||
*
|
||||
*
|
||||
* Find the intersection between the two rectangles
|
||||
*
|
||||
* Returns: TRUE is some intersection exists and is not degenerate, FALSE
|
||||
|
@ -285,6 +285,25 @@ mtk_rectangle_contains_rect (const MtkRectangle *outer_rect,
|
|||
inner_rect->y + inner_rect->height <= outer_rect->y + outer_rect->height;
|
||||
}
|
||||
|
||||
/**
|
||||
* mtk_rectangle_contains_point:
|
||||
* @rect: A rectangle
|
||||
* @x: X coordinate of the point
|
||||
* @y: Y coordinate of the point
|
||||
*
|
||||
* Returns: Whether the rectangle contains the point
|
||||
*/
|
||||
gboolean
|
||||
mtk_rectangle_contains_point (const MtkRectangle *rect,
|
||||
int x,
|
||||
int y)
|
||||
{
|
||||
return (x >= rect->x &&
|
||||
x < (rect->x + rect->width) &&
|
||||
y >= rect->y &&
|
||||
y < (rect->y + rect->height));
|
||||
}
|
||||
|
||||
/**
|
||||
* mtk_rectangle_to_graphene_rect:
|
||||
* @rect: A rectangle
|
||||
|
|
|
@ -127,6 +127,10 @@ gboolean mtk_rectangle_could_fit_rect (const MtkRectangle *outer_rect,
|
|||
MTK_EXPORT
|
||||
gboolean mtk_rectangle_contains_rect (const MtkRectangle *outer_rect,
|
||||
const MtkRectangle *inner_rect);
|
||||
MTK_EXPORT
|
||||
gboolean mtk_rectangle_contains_point (const MtkRectangle *rect,
|
||||
int x,
|
||||
int y);
|
||||
|
||||
MTK_EXPORT
|
||||
graphene_rect_t mtk_rectangle_to_graphene_rect (const MtkRectangle *rect);
|
||||
|
|
|
@ -3403,7 +3403,7 @@ meta_monitor_manager_get_logical_monitor_at (MetaMonitorManager *manager,
|
|||
{
|
||||
MetaLogicalMonitor *logical_monitor = l->data;
|
||||
|
||||
if (META_POINT_IN_RECT (x, y, logical_monitor->rect))
|
||||
if (mtk_rectangle_contains_point (&logical_monitor->rect, x, y))
|
||||
return logical_monitor;
|
||||
}
|
||||
|
||||
|
@ -3441,7 +3441,7 @@ meta_monitor_manager_get_logical_monitor_from_rect (MetaMonitorManager *manager,
|
|||
MtkRectangle intersection;
|
||||
int intersection_area;
|
||||
|
||||
if (META_POINT_IN_RECT (center_x, center_y, logical_monitor->rect))
|
||||
if (mtk_rectangle_contains_point (&logical_monitor->rect, center_x, center_y))
|
||||
return logical_monitor;
|
||||
|
||||
if (!mtk_rectangle_intersect (&logical_monitor->rect,
|
||||
|
|
|
@ -100,7 +100,7 @@ meta_viewport_info_get_view_at (MetaViewportInfo *viewport_info,
|
|||
{
|
||||
ViewInfo *info = &g_array_index (viewport_info->views, ViewInfo, i);
|
||||
|
||||
if (META_POINT_IN_RECT (x, y, info->rect))
|
||||
if (mtk_rectangle_contains_point (&info->rect, x, y))
|
||||
return i;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,11 +47,5 @@ meta_timeval_to_microseconds (const struct timeval *tv)
|
|||
return ((int64_t) tv->tv_sec) * G_USEC_PER_SEC + tv->tv_usec;
|
||||
}
|
||||
|
||||
#define META_POINT_IN_RECT(xcoord, ycoord, rect) \
|
||||
((xcoord) >= (rect).x && \
|
||||
(xcoord) < ((rect).x + (rect).width) && \
|
||||
(ycoord) >= (rect).y && \
|
||||
(ycoord) < ((rect).y + (rect).height))
|
||||
|
||||
#define META_CONTAINER_OF(ptr, type, member) \
|
||||
(type *) ((uint8_t *) (ptr) - G_STRUCT_OFFSET (type, member))
|
||||
|
|
|
@ -1456,7 +1456,7 @@ window_contains_point (MetaWindow *window,
|
|||
|
||||
meta_window_get_frame_rect (window, &rect);
|
||||
|
||||
return META_POINT_IN_RECT (root_x, root_y, rect);
|
||||
return mtk_rectangle_contains_point (&rect, root_x, root_y);
|
||||
}
|
||||
|
||||
MetaWindow *
|
||||
|
|
|
@ -200,6 +200,16 @@ test_adjacent_to (void)
|
|||
g_assert (!mtk_rectangle_is_adjacent_to (&base, ¬_adjacent[i]));
|
||||
}
|
||||
|
||||
static void
|
||||
test_contains_point (void)
|
||||
{
|
||||
MtkRectangle base = { .x = 0, .y = 0, .width = 10, .height = 10 };
|
||||
|
||||
g_assert (mtk_rectangle_contains_point (&base, 5, 5));
|
||||
g_assert (!mtk_rectangle_contains_point (&base, -5, 5));
|
||||
g_assert (!mtk_rectangle_contains_point (&base, 15, 2));
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc,
|
||||
char **argv)
|
||||
|
@ -215,6 +225,7 @@ main (int argc,
|
|||
g_test_add_func ("/mtk/rectangle/overlap", test_overlap_funcs);
|
||||
g_test_add_func ("/mtk/rectangle/basic-fitting", test_basic_fitting);
|
||||
g_test_add_func ("/mtk/rectangle/adjacent-to", test_adjacent_to);
|
||||
g_test_add_func ("/mtk/rectangle/contains-point", test_contains_point);
|
||||
|
||||
return g_test_run ();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue