Rect.inl
1 //
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 
29 template <typename T>
31 Left (0),
32 Top (0),
33 Right (0),
34 Bottom(0)
35 {
36 
37 }
38 
39 
43 template <typename T>
44 Rect<T>::Rect(T LeftCoord, T TopCoord, T RightCoord, T BottomCoord) :
45 Left (LeftCoord),
46 Top (TopCoord),
47 Right (RightCoord),
48 Bottom(BottomCoord)
49 {
50 
51 }
52 
53 
57 template <typename T>
59 {
60  return Right - Left;
61 }
62 
63 
67 template <typename T>
69 {
70  return Bottom - Top;
71 }
72 
73 
77 template <typename T>
78 void Rect<T>::Offset(T OffsetX, T OffsetY)
79 {
80  Left += OffsetX;
81  Right += OffsetX;
82  Top += OffsetY;
83  Bottom += OffsetY;
84 }
85 
86 
90 template <typename T>
91 bool Rect<T>::Contains(T X, T Y) const
92 {
93  return (X >= Left) && (X <= Right) && (Y >= Top) && (Y <= Bottom);
94 }
95 
96 
100 template <typename T>
101 bool 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 }
Rect is an utility class for manipulating rectangles.
Definition: Rect.hpp:41
T Right
Right coordinate of the rectangle.
Definition: Rect.hpp:114
T GetHeight() const
Get the height of the rectangle.
Definition: Rect.inl:68
T GetWidth() const
Get the width of the rectangle.
Definition: Rect.inl:58
void Offset(T OffsetX, T OffsetY)
Move the whole rectangle by the given offset.
Definition: Rect.inl:78
Rect()
Default constructor.
Definition: Rect.inl:30
bool Intersects(const Rect< T > &Rectangle, Rect< T > *OverlappingRect=NULL) const
Check intersection between two rectangles.
Definition: Rect.inl:101
T Bottom
Bottom coordinate of the rectangle.
Definition: Rect.hpp:115
bool Contains(T X, T Y) const
Check if a point is inside the rectangle&#39;s area.
Definition: Rect.inl:91
T Top
Top coordinate of the rectangle.
Definition: Rect.hpp:113
T Left
Left coordinate of the rectangle.
Definition: Rect.hpp:112