19 #ifndef MIR_GEOMETRY_RECTANGLE_GENERIC_H_
20 #define MIR_GEOMETRY_RECTANGLE_GENERIC_H_
38 template<
typename P,
typename S>
71 if (
size.width == decltype(
size.width){} ||
size.height == decltype(
size.height){})
75 return p.x >=
left() && p.x < br.x &&
76 p.y >=
top() && p.y < br.y;
99 ||
size.width == decltype(
size.width){}
100 ||
size.height == decltype(
size.height){}
101 || r.
size.width == decltype(r.
size.width){}
102 || r.
size.height == decltype(r.
size.height){};
115 template<typename R, typename std::enable_if<std::is_base_of<detail::RectangleBase, R>::value,
bool>::type =
true>
118 auto const max_left = std::max(a.left(), b.left());
119 auto const min_right = std::min(a.right(), b.right());
120 auto const max_top = std::max(a.top(), b.top());
121 auto const min_bottom = std::min(a.bottom(), b.bottom());
123 if (max_left < min_right && max_top < min_bottom)
124 return {{max_left, max_top},
125 {(min_right - max_left).as_value(),
126 (min_bottom - max_top).as_value()}};
131 template<
typename P,
typename S>
137 template<
typename P,
typename S>
143 template<
typename P,
typename S>
146 out <<
'(' << value.
top_left <<
", " << value.
size <<
')';
std::ostream & operator<<(std::ostream &out, W const &value)
Definition: dimensions_generic.h:144
typename GeometricType::template Corresponding< Tag > Corresponding
Definition: dimensions_generic.h:141
constexpr bool operator!=(D const &lhs, D const &rhs)
Definition: displacement_generic.h:77
R intersection_of(R const &a, R const &b)
Definition: rectangle_generic.h:116
constexpr bool operator==(D const &lhs, D const &rhs)
Definition: displacement_generic.h:71
constexpr S::DisplacementType as_displacement(S const &size)
Definition: displacement_generic.h:162
constexpr T< DeltaXTag > as_delta(T< XTag > const &x)
Definition: dimensions_generic.h:276
Definition: splash_session.h:24
Used for determining if a type is a rectangle.
Definition: rectangle_generic.h:34
Definition: rectangle_generic.h:40
Corresponding< P, XTag > right() const
Definition: rectangle_generic.h:107
P bottom_left() const
Definition: rectangle_generic.h:64
Corresponding< P, YTag > top() const
Definition: rectangle_generic.h:108
P bottom_right() const
The bottom right boundary point of the rectangle.
Definition: rectangle_generic.h:54
constexpr Rectangle()=default
constexpr Rectangle(P const &top_left, S const &size)
Definition: rectangle_generic.h:43
P top_left
Definition: rectangle_generic.h:111
bool contains(Rectangle< P, S > const &r) const
Test if the rectangle contains another.
Definition: rectangle_generic.h:85
Corresponding< P, YTag > bottom() const
Definition: rectangle_generic.h:109
Corresponding< P, XTag > left() const
Definition: rectangle_generic.h:106
bool overlaps(Rectangle< P, S > const &r) const
Definition: rectangle_generic.h:93
P top_right() const
Definition: rectangle_generic.h:59
bool contains(P const &p) const
Definition: rectangle_generic.h:69
S size
Definition: rectangle_generic.h:112