X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fgeom.h;h=8e50834bc7084420e79840b09b02577ae5630a18;hb=HEAD;hp=8ac0e550830980d4ea05f612389155278cb891ce;hpb=d68116c9c9b2c9a9925d872141eff8e301ef3bb3;p=chaz%2Fopenbox diff --git a/openbox/geom.h b/openbox/geom.h index 8ac0e550..8e50834b 100644 --- a/openbox/geom.h +++ b/openbox/geom.h @@ -104,6 +104,25 @@ typedef struct _Rect { (r).height = MIN((a).y + (a).height - 1, \ (b).y + (b).height - 1) - (r).y + 1) +/* Returns the shortest manhatten distance between two rects, or 0 if they + intersect. */ +static inline gint rect_manhatten_distance(Rect r, Rect o) +{ + if (RECT_INTERSECTS_RECT(r, o)) + return 0; + + gint min_distance = G_MAXINT; + if (RECT_RIGHT(o) < RECT_LEFT(r)) + min_distance = MIN(min_distance, RECT_LEFT(r) - RECT_RIGHT(o)); + if (RECT_LEFT(o) > RECT_RIGHT(r)) + min_distance = MIN(min_distance, RECT_LEFT(o) - RECT_RIGHT(r)); + if (RECT_BOTTOM(o) < RECT_TOP(r)) + min_distance = MIN(min_distance, RECT_TOP(r) - RECT_BOTTOM(o)); + if (RECT_TOP(o) > RECT_BOTTOM(r)) + min_distance = MIN(min_distance, RECT_TOP(o) - RECT_BOTTOM(r)); + return min_distance; +} + typedef struct _Strut { int left; int top;