00001
00005
00006 #ifndef _H_IMG_Rect
00007 #define _H_IMG_Rect
00008
00009 #include "IMG_Types.h"
00010 #include "IMG_Line.h"
00011
00021
00022 class IMG_Rect {
00023 public:
00024
00032 IMG_Rect(TInt32 l=0, TInt32 t=0, TInt32 r=0, TInt32 b=0)
00033 : m_l(l), m_t(t), m_r(r), m_b(b) {}
00034
00039 IMG_Rect(const IMG_Rect& r)
00040 : m_l(r.m_l), m_t(r.m_t), m_r(r.m_r), m_b(r.m_b) {}
00041
00045 virtual ~IMG_Rect() {};
00046
00051 virtual inline TInt32 getWidth() const;
00052
00057 virtual inline TInt32 getHeight() const;
00058
00066 virtual inline void set(TInt32 l, TInt32 t, TInt32 r, TInt32 b);
00067
00073 virtual inline bool isEmpty() const;
00074
00080 virtual inline bool isValid() const;
00081
00087 virtual void inset(TInt32 i);
00088
00094 virtual inline void unionRect(const IMG_Rect& r);
00095
00101 virtual inline void unionPoint(TInt32 x, TInt32 y);
00102
00110 virtual inline bool isInside(TInt32 x, TInt32 y) const;
00111
00117 virtual TVisibility getVisibility(IMG_Rect& r) const;
00118
00124 virtual TVisibility getVisibility(IMG_Line& l) const;
00125
00132 virtual void setCenter(TInt32 cx, TInt32 cy);
00133
00143 virtual void setCenter(TInt32 cx, TInt32 cy, TInt32 w, TInt32 h);
00144
00152 virtual bool clip(IMG_Rect& r) const;
00153
00161 virtual bool clip(IMG_Line& l) const;
00162
00164 TInt32 m_l;
00166 TInt32 m_t;
00168 TInt32 m_r;
00170 TInt32 m_b;
00171 };
00172
00173
00174 inline TInt32 IMG_Rect::getWidth() const
00175 {
00176 return m_r - m_l;
00177 }
00178
00179 inline TInt32 IMG_Rect::getHeight() const
00180 {
00181 return m_b - m_t;
00182 }
00183
00184 inline void IMG_Rect::set(TInt32 l, TInt32 t, TInt32 r, TInt32 b)
00185 {
00186 m_l = l; m_t = t; m_r = r; m_b = b;
00187 }
00188
00189 inline bool IMG_Rect::isEmpty() const
00190 {
00191 return (getWidth() == 0) || (getHeight() == 0);
00192 }
00193
00194 inline bool IMG_Rect::isValid() const
00195 {
00196 return (m_l <= m_r) && (m_t <= m_b);
00197 }
00198
00199 inline void IMG_Rect::unionRect(const IMG_Rect& r)
00200 {
00201 if (r.m_l < m_l) m_l = r.m_l;
00202 if (r.m_r > m_r) m_r = r.m_r;
00203 if (r.m_t < m_t) m_t = r.m_t;
00204 if (r.m_b > m_b) m_b = r.m_b;
00205 }
00206
00207 inline void IMG_Rect::unionPoint(TInt32 x, TInt32 y)
00208 {
00209 if (x < m_l) m_l = x;
00210 if (x > m_r) m_r = x;
00211 if (y < m_t) m_t = y;
00212 if (y > m_b) m_b = y;
00213 }
00214
00215 inline bool IMG_Rect::isInside(TInt32 x, TInt32 y) const
00216 {
00217 return (x >= m_l) && (x <= m_r) && (y >= m_t) && (y <= m_b);
00218 }
00219
00220 #endif // _H_IMG_Rect