17 #ifndef MIR_GEOMETRY_RECTANGLE_GENERIC_H_
18 #define MIR_GEOMETRY_RECTANGLE_GENERIC_H_
36 template<
typename P,
typename S>
69 if (
size.width == decltype(
size.width){} ||
size.height == decltype(
size.height){})
73 return p.x >=
left() && p.x < br.x &&
74 p.y >=
top() && p.y < br.y;
97 ||
size.width == decltype(
size.width){}
98 ||
size.height == decltype(
size.height){}
99 || r.
size.width == decltype(r.
size.width){}
100 || r.
size.height == decltype(r.
size.height){};
113 template<typename R, typename std::enable_if<std::is_base_of<detail::RectangleBase, R>::value,
bool>::type =
true>
116 auto const max_left = std::max(a.left(), b.left());
117 auto const min_right = std::min(a.right(), b.right());
118 auto const max_top = std::max(a.top(), b.top());
119 auto const min_bottom = std::min(a.bottom(), b.bottom());
121 if (max_left < min_right && max_top < min_bottom)
122 return {{max_left, max_top},
123 {(min_right - max_left).as_value(),
124 (min_bottom - max_top).as_value()}};
129 template<
typename P,
typename S>
135 template<
typename P,
typename S>
141 template<
typename P,
typename S>
144 out <<
'(' << value.
top_left <<
", " << value.
size <<
')';
std::ostream & operator<<(std::ostream &out, W const &value)
Definition: dimensions_generic.h:142
typename GeometricType::template Corresponding< Tag > Corresponding
Definition: dimensions_generic.h:139
constexpr bool operator!=(D const &lhs, D const &rhs)
Definition: displacement_generic.h:75
R intersection_of(R const &a, R const &b)
Definition: rectangle_generic.h:114
constexpr bool operator==(D const &lhs, D const &rhs)
Definition: displacement_generic.h:69
constexpr S::DisplacementType as_displacement(S const &size)
Definition: displacement_generic.h:160
constexpr T< DeltaXTag > as_delta(T< XTag > const &x)
Definition: dimensions_generic.h:274
Definition: splash_session.h:22
Used for determining if a type is a rectangle.
Definition: rectangle_generic.h:32
Definition: rectangle_generic.h:38
Corresponding< P, XTag > right() const
Definition: rectangle_generic.h:105
P bottom_left() const
Definition: rectangle_generic.h:62
Corresponding< P, YTag > top() const
Definition: rectangle_generic.h:106
P bottom_right() const
The bottom right boundary point of the rectangle.
Definition: rectangle_generic.h:52
constexpr Rectangle()=default
constexpr Rectangle(P const &top_left, S const &size)
Definition: rectangle_generic.h:41
P top_left
Definition: rectangle_generic.h:109
bool contains(Rectangle< P, S > const &r) const
Test if the rectangle contains another.
Definition: rectangle_generic.h:83
Corresponding< P, YTag > bottom() const
Definition: rectangle_generic.h:107
Corresponding< P, XTag > left() const
Definition: rectangle_generic.h:104
bool overlaps(Rectangle< P, S > const &r) const
Definition: rectangle_generic.h:91
P top_right() const
Definition: rectangle_generic.h:57
bool contains(P const &p) const
Definition: rectangle_generic.h:67
S size
Definition: rectangle_generic.h:110