Rect.inl
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25
29template <typename T>
30Rect<T>::Rect() :
31Left (0),
32Top (0),
33Right (0),
34Bottom(0)
35{
36
37}
38
39
43template <typename T>
44Rect<T>::Rect(T LeftCoord, T TopCoord, T RightCoord, T BottomCoord) :
45Left (LeftCoord),
46Top (TopCoord),
47Right (RightCoord),
48Bottom(BottomCoord)
49{
50
51}
52
53
57template <typename T>
58T Rect<T>::GetWidth() const
59{
60 return Right - Left;
61}
62
63
67template <typename T>
68T Rect<T>::GetHeight() const
69{
70 return Bottom - Top;
71}
72
73
77template <typename T>
78void Rect<T>::Offset(T OffsetX, T OffsetY)
79{
80 Left += OffsetX;
81 Right += OffsetX;
82 Top += OffsetY;
83 Bottom += OffsetY;
84}
85
86
90template <typename T>
91bool Rect<T>::Contains(T X, T Y) const
92{
93 return (X >= Left) && (X <= Right) && (Y >= Top) && (Y <= Bottom);
94}
95
96
100template <typename T>
101bool Rect<T>::Intersects(const Rect<T>& Rectangle, Rect<T>* OverlappingRect) const
102{
103 // Compute overlapping rect
104 Rect Overlapping(std::max(Left, Rectangle.Left),
105 std::max(Top, Rectangle.Top),
106 std::min(Right, Rectangle.Right),
107 std::min(Bottom, Rectangle.Bottom));
108
109 // If overlapping rect is valid, then there is intersection
110 if ((Overlapping.Left < Overlapping.Right) && (Overlapping.Top < Overlapping.Bottom))
111 {
112 if (OverlappingRect)
113 *OverlappingRect = Overlapping;
114 return true;
115 }
116 else
117 {
118 if (OverlappingRect)
119 *OverlappingRect = Rect(0, 0, 0, 0);
120 return false;
121 }
122}
@ Left
Left arrow.
Definition Event.hpp:114
@ Right
Right arrow.
Definition Event.hpp:115