2019-01-09 04:06:04 +03:00
|
|
|
#include "Rect.h"
|
|
|
|
#include <AK/StdLibExtras.h>
|
|
|
|
|
|
|
|
void Rect::intersect(const Rect& other)
|
|
|
|
{
|
|
|
|
int l = max(left(), other.left());
|
|
|
|
int r = min(right(), other.right());
|
|
|
|
int t = max(top(), other.top());
|
|
|
|
int b = min(bottom(), other.bottom());
|
|
|
|
|
2019-01-21 01:42:36 +03:00
|
|
|
if (l > r || t > b) {
|
2019-01-09 04:06:04 +03:00
|
|
|
m_location = { };
|
|
|
|
m_size = { };
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-01-16 19:54:06 +03:00
|
|
|
m_location.set_x(l);
|
|
|
|
m_location.set_y(t);
|
|
|
|
m_size.set_width((r - l) + 1);
|
|
|
|
m_size.set_height((b - t) + 1);
|
2019-01-09 04:06:04 +03:00
|
|
|
}
|
2019-01-13 02:04:23 +03:00
|
|
|
|
|
|
|
Rect Rect::united(const Rect& other) const
|
|
|
|
{
|
2019-01-18 06:37:49 +03:00
|
|
|
if (is_null())
|
|
|
|
return other;
|
|
|
|
if (other.is_null())
|
|
|
|
return *this;
|
2019-01-13 02:04:23 +03:00
|
|
|
Rect rect;
|
|
|
|
rect.set_left(min(left(), other.left()));
|
|
|
|
rect.set_top(min(top(), other.top()));
|
|
|
|
rect.set_right(max(right(), other.right()));
|
|
|
|
rect.set_bottom(max(bottom(), other.bottom()));
|
|
|
|
return rect;
|
|
|
|
}
|