]> Dogcows Code - chaz/openbox/blobdiff - openbox/geom.h
add some interesection shit, and RECT_LEFT/RIGHT/TOP/BOTTOM
[chaz/openbox] / openbox / geom.h
index ed24f62bd89509a6743904316284947f410e2201..14fb96c7212250b70509559faede60590da9396d 100644 (file)
@@ -22,8 +22,13 @@ typedef struct _Rect {
     int height;
 } Rect;
 
+#define RECT_LEFT(r) ((r).x)
+#define RECT_TOP(r) ((r).y)
+#define RECT_RIGHT(r) ((r).x + (r).width - 1)
+#define RECT_BOTTOM(r) ((r).y + (r).height - 1)
+
 #define RECT_SET_POINT(r, nx, ny) \
-    (r).x = (ny), (r).y = (ny)
+    (r).x = (nx), (r).y = (ny)
 #define RECT_SET_SIZE(r, w, h) \
     (r).width = (w), (r).height = (h)
 #define RECT_SET(r, nx, ny, w, h) \
@@ -33,9 +38,9 @@ typedef struct _Rect {
                            (r1).width == (r2).width && \
                             (r1).height == (r2).height)
 
-#define RECT_CONTAINS(r, x, y) \
-    ((x) >= (r).x && (x) < (r).x + (r).width && \
-     (y) >= (r).y && (y) < (r).y + (r).height)
+#define RECT_CONTAINS(r, px, py) \
+    ((px) >= (r).x && (px) < (r).x + (r).width && \
+     (py) >= (r).y && (py) < (r).y + (r).height)
 #define RECT_CONTAINS_RECT(r, o) \
     ((o).x >= (r).x && (o).x + (o).width <= (r).x + (r).width && \
      (o).y >= (r).y && (o).y + (o).height <= (r).y + (r).height)
@@ -43,6 +48,14 @@ typedef struct _Rect {
     ((o).x < (r).x + (r).width && (o).x + (o).width > (r).x && \
      (o).y < (r).y + (r).height && (o).y + (o).height > (r).y)
 
+#define RECT_SET_INTERSECTION(r, a, b) \
+    ((r).x = MAX((a).x, (b).x), \
+     (r).y = MAX((a).y, (b).y), \
+     (r).width = MIN((a).x + (a).width - 1, \
+                     (b).x + (b).width - 1) - (r).x + 1, \
+     (r).height = MIN((a).y + (a).height - 1, \
+                      (b).y + (b).height - 1) - (r).y + 1)
+
 typedef struct _Strut {
     int left;
     int top;
This page took 0.023826 seconds and 4 git commands to generate.