4 #include <lib/gdi/esize.h>
5 #include <lib/gdi/epoint.h>
8 // x2 = x1 + width (AND NOT, NEVER, NEVER EVER +1 or -1 !!!!)
10 class eRect // rectangle class
14 /* eRect() constructs an INVALID rectangle. */
15 eRect() { x1 = y1 = 0; x2 = y2 = -1; }
16 eRect( const ePoint &topleft, const ePoint &bottomright );
18 // we use this contructor very often... do it inline...
19 eRect( const ePoint &topleft, const eSize &size )
23 x2 = (x1+size.width());
24 y2 = (y1+size.height());
27 eRect( int left, int top, int width, int height );
31 eRect normalize() const;
44 void setLeft( int pos );
45 void setTop( int pos );
46 void setRight( int pos );
47 void setBottom( int pos );
51 ePoint topLeft() const;
52 ePoint bottomRight() const;
53 ePoint topRight() const;
54 ePoint bottomLeft() const;
55 ePoint center() const;
57 void rect( int *x, int *y, int *w, int *h ) const;
58 void coords( int *x1, int *y1, int *x2, int *y2 ) const;
60 void moveTopLeft( const ePoint &p );
61 void moveBottomRight( const ePoint &p );
62 void moveTopRight( const ePoint &p );
63 void moveBottomLeft( const ePoint &p );
64 void moveCenter( const ePoint &p );
66 void moveBy( int dx, int dy )
82 void setRect( int x, int y, int w, int h );
83 void setCoords( int x1, int y1, int x2, int y2 );
88 void setWidth( int w );
89 void setHeight( int h );
90 void setSize( const eSize &s );
92 eRect operator|(const eRect &r) const;
93 eRect operator&(const eRect &r) const;
94 eRect& operator|=(const eRect &r);
95 eRect& operator&=(const eRect &r);
97 bool contains( const ePoint &p) const;
98 bool contains( int x, int y) const;
99 bool contains( const eRect &r) const;
100 eRect unite( const eRect &r ) const;
101 eRect intersect( const eRect &r ) const;
102 bool intersects( const eRect &r ) const;
104 friend bool operator==( const eRect &, const eRect & );
105 friend bool operator!=( const eRect &, const eRect & );
107 static eRect emptyRect() { return eRect(0, 0, 0, 0); }
108 static eRect invalidRect() { return eRect(); }
117 bool operator==( const eRect &, const eRect & );
118 bool operator!=( const eRect &, const eRect & );
121 /*****************************************************************************
122 eRect inline member functions
123 *****************************************************************************/
125 inline eRect::eRect( int left, int top, int width, int height )
133 inline bool eRect::empty() const
134 { return x1 == x2 && y1 == y2; }
136 inline bool eRect::valid() const
137 { return x1 <= x2 && y1 <= y2; }
139 inline int eRect::left() const
142 inline int eRect::top() const
145 inline int eRect::right() const
148 inline int eRect::bottom() const
151 inline int &eRect::rLeft()
154 inline int & eRect::rTop()
157 inline int & eRect::rRight()
160 inline int & eRect::rBottom()
163 inline int eRect::x() const
166 inline int eRect::y() const
169 inline void eRect::setLeft( int pos )
172 inline void eRect::setTop( int pos )
175 inline void eRect::setRight( int pos )
178 inline void eRect::setBottom( int pos )
181 inline void eRect::setX( int x )
184 inline void eRect::setY( int y )
187 inline ePoint eRect::topLeft() const
188 { return ePoint(x1, y1); }
190 inline ePoint eRect::bottomRight() const
191 { return ePoint(x2, y2); }
193 inline ePoint eRect::topRight() const
194 { return ePoint(x2, y1); }
196 inline ePoint eRect::bottomLeft() const
197 { return ePoint(x1, y2); }
199 inline ePoint eRect::center() const
200 { return ePoint((x1+x2)/2, (y1+y2)/2); }
202 inline int eRect::width() const
205 inline int eRect::height() const
208 inline eSize eRect::size() const
209 { return eSize(x2-x1, y2-y1); }
211 inline bool eRect::contains( int x, int y) const
213 return (x >= x1) && (x < x2) && (y >= y1) && (y < y2);