all repos — openbox @ 9b23dff16cd85461da6f99aa95a79422cffd72f8

openbox fork - make it a bit more like ryudo

otk/rect.cc (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "rect.hh"

namespace otk {

void Rect::setX(int x) {
  _x2 += x - _x1;
  _x1 = x;
}


void Rect::setY(int y)
{
  _y2 += y - _y1;
  _y1 = y;
}


void Rect::setPos(int x, int y) {
  _x2 += x - _x1;
  _x1 = x;
  _y2 += y - _y1;
  _y1 = y;
}


void Rect::setWidth(unsigned int w) {
  _x2 = w + _x1 - 1;
}


void Rect::setHeight(unsigned int h) {
  _y2 = h + _y1 - 1;
}


void Rect::setSize(unsigned int w, unsigned int h) {
  _x2 = w + _x1 - 1;
  _y2 = h + _y1 - 1;
}


void Rect::setRect(int x, int y, unsigned int w, unsigned int h) {
  *this = Rect(x, y, w, h);
}


void Rect::setCoords(int l, int t, int r, int b) {
  _x1 = l;
  _y1 = t;
  _x2 = r;
  _y2 = b;
}


Rect Rect::operator|(const Rect &a) const {
  Rect b;

  b._x1 = std::min(_x1, a._x1);
  b._y1 = std::min(_y1, a._y1);
  b._x2 = std::max(_x2, a._x2);
  b._y2 = std::max(_y2, a._y2);

  return b;
}


Rect Rect::operator&(const Rect &a) const {
  Rect b;

  b._x1 = std::max(_x1, a._x1);
  b._y1 = std::max(_y1, a._y1);
  b._x2 = std::min(_x2, a._x2);
  b._y2 = std::min(_y2, a._y2);

  return b;
}


bool Rect::intersects(const Rect &a) const {
  return std::max(_x1, a._x1) <= std::min(_x2, a._x2) &&
         std::max(_y1, a._y1) <= std::min(_y2, a._y2);
}


bool Rect::contains(int x, int y) const {
  return x >= _x1 && x <= _x2 &&
         y >= _y1 && y <= _y2;
}


bool Rect::contains(const Rect& a) const {
  return a._x1 >= _x1 && a._x2 <= _x2 &&
         a._y1 >= _y1 && a._y2 <= _y2;
}

}