From ff4c24f0a498e2922b20160482fa2c60ca8d9c40 Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Tue, 7 Sep 2010 17:00:49 +0100 Subject: [PATCH] geometry: Adds a clutter_geometry_intersects API This adds a public function named clutter_geometry_intersects which determines if two geometries intersect or not returning TRUE if so else FALSE. --- clutter/clutter-actor.c | 26 ++++++++++++++++++++++ clutter/clutter-types.h | 8 ++++--- doc/reference/clutter/clutter-sections.txt | 1 + 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index 2cce49883..7ab07b836 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -8724,6 +8724,32 @@ clutter_geometry_union (const ClutterGeometry *geometry_a, result->height = y_2 - y_1; } +/** + * clutter_geometry_intersects: + * @geometry0: The first geometry to test + * @geometry1: The second geometry to test + * + * Determines if @geometry0 and geometry1 intersect returning %TRUE if + * they do else %FALSE. + * + * Return value: %TRUE of @geometry0 and geometry1 intersect else + * %FALSE. + * + * Since: 1.4 + */ +gboolean +clutter_geometry_intersects (const ClutterGeometry *geometry0, + const ClutterGeometry *geometry1) +{ + if (geometry1->x >= (geometry0->x + (gint)geometry0->width) || + geometry1->y >= (geometry0->y + (gint)geometry0->height) || + (geometry1->x + (gint)geometry1->width) <= geometry0->x || + (geometry1->y + (gint)geometry1->height) <= geometry0->y) + return FALSE; + else + return TRUE; +} + /* * ClutterVertices */ diff --git a/clutter/clutter-types.h b/clutter/clutter-types.h index 215d92ef0..b528f9ffc 100644 --- a/clutter/clutter-types.h +++ b/clutter/clutter-types.h @@ -188,9 +188,11 @@ struct _ClutterGeometry GType clutter_geometry_get_type (void) G_GNUC_CONST; -void clutter_geometry_union (const ClutterGeometry *geometry_a, - const ClutterGeometry *geometry_b, - ClutterGeometry *result); +void clutter_geometry_union (const ClutterGeometry *geometry_a, + const ClutterGeometry *geometry_b, + ClutterGeometry *result); +gboolean clutter_geometry_intersects (const ClutterGeometry *geometry0, + const ClutterGeometry *geometry1); /** * ClutterKnot: diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt index 854c3ac2b..c22800085 100644 --- a/doc/reference/clutter/clutter-sections.txt +++ b/doc/reference/clutter/clutter-sections.txt @@ -465,6 +465,7 @@ clutter_vertex_equal ClutterGeometry clutter_geometry_union +clutter_geometry_intersects CLUTTER_TYPE_GEOMETRY