7561397ce4878c60ab8640697f76d86146d0ca34
[winnie] / src / geom.cc
1 #include "geom.h"
2
3 Rect::Rect()
4 {
5         x = y = width = height = 0;
6 }
7
8 Rect::Rect(int x, int y, int w, int h)
9 {
10         this->x = x;
11         this->y = y;
12         width = w;
13         height = h;
14 }
15
16 static inline int min(int x, int y)
17 {
18         return x < y ? x : y;
19 }
20
21 static inline int max(int x, int y)
22 {
23         return x > y ? x : y;
24 }
25
26 Rect rect_union(const Rect &a, const Rect &b)
27 {
28         Rect uni;
29         uni.x = min(a.x, b.x);
30         uni.y = min(a.y, b.y);
31         uni.width = max(a.x + a.width, b.x + b.width) - uni.x;
32         uni.height = max(a.y + a.height, b.y + b.height) - uni.y;
33
34         return uni;
35 }
36
37 Rect rect_intersection(const Rect &a, const Rect &b)
38 {
39         Rect intersect;
40         intersect.x = max(a.x, b.x);
41         intersect.y = max(a.y, b.y);
42         intersect.width = max(min(a.x + a.width, b.x + b.width) - intersect.x, 0);
43         intersect.height = max(min(a.y + a.height, b.y + b.height) - intersect.y, 0);
44
45         return intersect;
46 }