00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025
00029 template <typename T>
00030 sfRect<T>::sfRect() :
00031 Left (0),
00032 Top (0),
00033 Right (0),
00034 Bottom(0)
00035 {
00036
00037 }
00038
00039
00043 template <typename T>
00044 sfRect<T>::sfRect(T LeftCoord, T TopCoord, T RightCoord, T BottomCoord) :
00045 Left (LeftCoord),
00046 Top (TopCoord),
00047 Right (RightCoord),
00048 Bottom(BottomCoord)
00049 {
00050
00051 }
00052
00053
00057 template <typename T>
00058 T sfRect<T>::GetWidth() const
00059 {
00060 return Right - Left;
00061 }
00062
00063
00067 template <typename T>
00068 T sfRect<T>::GetHeight() const
00069 {
00070 return Bottom - Top;
00071 }
00072
00073
00077 template <typename T>
00078 bool sfRect<T>::Contains(T X, T Y) const
00079 {
00080 return (X >= Left) && (X <= Right) && (Y >= Top) && (Y <= Bottom);
00081 }
00082
00083
00087 template <typename T>
00088 bool sfRect<T>::Intersects(const sfRect<T>& Rect, sfRect<T>* OverlappingRect) const
00089 {
00090
00091 sfRect Overlapping(std::max(Left, Rect.Left),
00092 std::max(Top, Rect.Top),
00093 std::min(Right, Rect.Right),
00094 std::min(Bottom, Rect.Bottom));
00095
00096
00097 if ((Overlapping.Left < Overlapping.Right) && (Overlapping.Top < Overlapping.Bottom))
00098 {
00099 if (OverlappingRect)
00100 *OverlappingRect = Overlapping;
00101 return true;
00102 }
00103 else
00104 {
00105 if (OverlappingRect)
00106 *OverlappingRect = sfRect(0, 0, 0, 0);
00107 return false;
00108 }
00109 }