diff --git a/gtk/gtkroundedbox.c b/gtk/gtkroundedbox.c index c89a1fd354..2b5ac2120d 100644 --- a/gtk/gtkroundedbox.c +++ b/gtk/gtkroundedbox.c @@ -536,3 +536,50 @@ _gtk_rounded_box_clip_path (const GtkRoundedBox *box, box->box.width, box->box.height); } +gboolean +_gtk_rounded_box_intersects_rectangle (const GtkRoundedBox *box, + gdouble x1, + gdouble y1, + gdouble x2, + gdouble y2) +{ + if (x2 < box->box.x || + y2 < box->box.y || + x1 >= box->box.x + box->box.width || + y1 >= box->box.y + box->box.height) + return FALSE; + + return TRUE; +} + +gboolean +_gtk_rounded_box_contains_rectangle (const GtkRoundedBox *box, + gdouble x1, + gdouble y1, + gdouble x2, + gdouble y2) +{ + if (x1 < box->box.x || + y1 < box->box.y || + x2 >= box->box.x + box->box.width || + y2 >= box->box.y + box->box.width) + return FALSE; + + if (x1 < box->box.x + box->corner[GTK_CSS_TOP_LEFT].horizontal && + y1 < box->box.y + box->corner[GTK_CSS_TOP_LEFT].vertical) + return FALSE; + + if (x2 > box->box.x + box->box.width - box->corner[GTK_CSS_TOP_RIGHT].horizontal && + y1 < box->box.y + box->corner[GTK_CSS_TOP_RIGHT].vertical) + return FALSE; + + if (x2 > box->box.x + box->box.width - box->corner[GTK_CSS_BOTTOM_RIGHT].horizontal && + y2 > box->box.y + box->box.height - box->corner[GTK_CSS_BOTTOM_RIGHT].vertical) + return FALSE; + + if (x1 < box->box.x + box->corner[GTK_CSS_BOTTOM_LEFT].horizontal && + y2 > box->box.y + box->box.height - box->corner[GTK_CSS_BOTTOM_LEFT].vertical) + return FALSE; + + return TRUE; +} diff --git a/gtk/gtkroundedboxprivate.h b/gtk/gtkroundedboxprivate.h index 753c5c237a..c8a54ce310 100644 --- a/gtk/gtkroundedboxprivate.h +++ b/gtk/gtkroundedboxprivate.h @@ -91,6 +91,16 @@ void _gtk_rounded_box_path_left (const GtkRounde cairo_t *cr); void _gtk_rounded_box_clip_path (const GtkRoundedBox *box, cairo_t *cr); +gboolean _gtk_rounded_box_intersects_rectangle (const GtkRoundedBox *box, + gdouble x1, + gdouble y1, + gdouble x2, + gdouble y2); +gboolean _gtk_rounded_box_contains_rectangle (const GtkRoundedBox *box, + gdouble x1, + gdouble y1, + gdouble x2, + gdouble y2); G_END_DECLS