Line data Source code
1 : /* Copyright (C) 2021 Wildfire Games.
2 : * This file is part of 0 A.D.
3 : *
4 : * 0 A.D. is free software: you can redistribute it and/or modify
5 : * it under the terms of the GNU General Public License as published by
6 : * the Free Software Foundation, either version 2 of the License, or
7 : * (at your option) any later version.
8 : *
9 : * 0 A.D. is distributed in the hope that it will be useful,
10 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 : * GNU General Public License for more details.
13 : *
14 : * You should have received a copy of the GNU General Public License
15 : * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16 : */
17 :
18 : #include "precompiled.h"
19 :
20 : #include "Rect.h"
21 :
22 : #include "maths/Size2D.h"
23 : #include "maths/Vector2D.h"
24 :
25 55 : CRect::CRect() :
26 55 : left(0.f), top(0.f), right(0.f), bottom(0.f)
27 : {
28 55 : }
29 :
30 55 : CRect::CRect(const CRect& rect) :
31 55 : left(rect.left), top(rect.top), right(rect.right), bottom(rect.bottom)
32 : {
33 55 : }
34 :
35 0 : CRect::CRect(const CVector2D& pos) :
36 0 : left(pos.X), top(pos.Y), right(pos.X), bottom(pos.Y)
37 : {
38 0 : }
39 :
40 4 : CRect::CRect(const CSize2D& size) :
41 4 : left(0.f), top(0.f), right(size.Width), bottom(size.Height)
42 : {
43 4 : }
44 :
45 0 : CRect::CRect(const CVector2D& upperleft, const CVector2D& bottomright) :
46 0 : left(upperleft.X), top(upperleft.Y), right(bottomright.X), bottom(bottomright.Y)
47 : {
48 0 : }
49 :
50 0 : CRect::CRect(const CVector2D& pos, const CSize2D& size) :
51 0 : left(pos.X), top(pos.Y), right(pos.X + size.Width), bottom(pos.Y + size.Height)
52 : {
53 0 : }
54 :
55 18 : CRect::CRect(const float l, const float t, const float r, const float b) :
56 18 : left(l), top(t), right(r), bottom(b)
57 : {
58 18 : }
59 :
60 5 : CRect& CRect::operator=(const CRect& a)
61 : {
62 5 : left = a.left;
63 5 : top = a.top;
64 5 : right = a.right;
65 5 : bottom = a.bottom;
66 5 : return *this;
67 : }
68 :
69 17 : bool CRect::operator==(const CRect &a) const
70 : {
71 34 : return (left == a.left &&
72 34 : top == a.top &&
73 47 : right == a.right &&
74 30 : bottom == a.bottom);
75 : }
76 :
77 0 : bool CRect::operator!=(const CRect& a) const
78 : {
79 0 : return !(*this == a);
80 : }
81 :
82 0 : CRect CRect::operator-() const
83 : {
84 0 : return CRect(-left, -top, -right, -bottom);
85 : }
86 :
87 0 : CRect CRect::operator+() const
88 : {
89 0 : return *this;
90 : }
91 :
92 0 : CRect CRect::operator+(const CRect& a) const
93 : {
94 0 : return CRect(left + a.left, top + a.top, right + a.right, bottom + a.bottom);
95 : }
96 :
97 0 : CRect CRect::operator+(const CVector2D& a) const
98 : {
99 0 : return CRect(left + a.X, top + a.Y, right + a.X, bottom + a.Y);
100 : }
101 :
102 0 : CRect CRect::operator+(const CSize2D& a) const
103 : {
104 0 : return CRect(left + a.Width, top + a.Height, right + a.Width, bottom + a.Height);
105 : }
106 :
107 0 : CRect CRect::operator-(const CRect& a) const
108 : {
109 0 : return CRect(left - a.left, top - a.top, right - a.right, bottom - a.bottom);
110 : }
111 :
112 0 : CRect CRect::operator-(const CVector2D& a) const
113 : {
114 0 : return CRect(left - a.X, top - a.Y, right - a.X, bottom - a.Y);
115 : }
116 :
117 0 : CRect CRect::operator-(const CSize2D& a) const
118 : {
119 0 : return CRect(left - a.Width, top - a.Height, right - a.Width, bottom - a.Height);
120 : }
121 :
122 0 : void CRect::operator+=(const CRect& a)
123 : {
124 0 : left += a.left;
125 0 : top += a.top;
126 0 : right += a.right;
127 0 : bottom += a.bottom;
128 0 : }
129 :
130 0 : void CRect::operator+=(const CVector2D& a)
131 : {
132 0 : left += a.X;
133 0 : top += a.Y;
134 0 : right += a.X;
135 0 : bottom += a.Y;
136 0 : }
137 :
138 0 : void CRect::operator+=(const CSize2D& a)
139 : {
140 0 : left += a.Width;
141 0 : top += a.Height;
142 0 : right += a.Width;
143 0 : bottom += a.Height;
144 0 : }
145 :
146 0 : void CRect::operator-=(const CRect& a)
147 : {
148 0 : left -= a.left;
149 0 : top -= a.top;
150 0 : right -= a.right;
151 0 : bottom -= a.bottom;
152 0 : }
153 :
154 0 : void CRect::operator-=(const CVector2D& a)
155 : {
156 0 : left -= a.X;
157 0 : top -= a.Y;
158 0 : right -= a.X;
159 0 : bottom -= a.Y;
160 0 : }
161 :
162 0 : void CRect::operator-=(const CSize2D& a)
163 : {
164 0 : left -= a.Width;
165 0 : top -= a.Height;
166 0 : right -= a.Width;
167 0 : bottom -= a.Height;
168 0 : }
169 :
170 0 : float CRect::GetWidth() const
171 : {
172 0 : return right-left;
173 : }
174 :
175 0 : float CRect::GetHeight() const
176 : {
177 0 : return bottom-top;
178 : }
179 :
180 0 : CSize2D CRect::GetSize() const
181 : {
182 0 : return CSize2D(right - left, bottom - top);
183 : }
184 :
185 0 : CVector2D CRect::TopLeft() const
186 : {
187 0 : return CVector2D(left, top);
188 : }
189 :
190 0 : CVector2D CRect::TopRight() const
191 : {
192 0 : return CVector2D(right, top);
193 : }
194 :
195 0 : CVector2D CRect::BottomLeft() const
196 : {
197 0 : return CVector2D(left, bottom);
198 : }
199 :
200 0 : CVector2D CRect::BottomRight() const
201 : {
202 0 : return CVector2D(right, bottom);
203 : }
204 :
205 0 : CVector2D CRect::CenterPoint() const
206 : {
207 0 : return CVector2D((left + right) / 2.f, (top + bottom) / 2.f);
208 : }
209 :
210 0 : bool CRect::PointInside(const CVector2D& point) const
211 : {
212 0 : return (point.X >= left &&
213 0 : point.X <= right &&
214 0 : point.Y >= top &&
215 0 : point.Y <= bottom);
216 : }
217 :
218 0 : CRect CRect::Scale(float x, float y) const
219 : {
220 0 : return CRect(left * x, top * y, right * x, bottom * y);
221 3 : }
|