use ContextMenuActions
[enigma2.git] / lib / gdi / erect.h
index 9eaa7906786b87d2372e03e50db6290a5ec1a369..d95b8c0f6caf184ffd3b4256eda7dac19cbf204b 100644 (file)
@@ -11,7 +11,8 @@ class eRect // rectangle class
 {
        friend class gRegion;
 public:
-       eRect() { x1 = y1 = x2 = y2 = 0; }
+                       /* eRect() constructs an INVALID rectangle. */
+       eRect() { x1 = y1 = 0; x2 = y2 = -1; }
        eRect( const ePoint &topleft, const ePoint &bottomright );
 
        // we use this contructor very often... do it inline...
@@ -25,9 +26,8 @@ public:
 
        eRect( int left, int top, int width, int height );
 
-       bool isNull()   const;
-       bool isEmpty()  const;
-       bool isValid()  const;
+       bool empty()    const;
+       bool valid()    const;
        eRect normalize()       const;
 
        int left()      const;
@@ -52,6 +52,18 @@ public:
        ePoint bottomRight() const;
        ePoint topRight()        const;
        ePoint bottomLeft()      const;
+
+               /* the sole intention of these functions
+                  is to allow painting frames without 
+                  messing around with the coordinates.
+                  they point to the last pixel included
+                  in the rectangle (which means that 1 is
+                  subtracted from the right and bottom 
+                  coordinates  */
+       ePoint topLeft1()        const;
+       ePoint bottomRight1() const;
+       ePoint topRight1()       const;
+       ePoint bottomLeft1()     const;
        ePoint center()  const;
 
        void rect( int *x, int *y, int *w, int *h ) const;
@@ -103,7 +115,10 @@ public:
 
        friend bool operator==( const eRect &, const eRect & );
        friend bool operator!=( const eRect &, const eRect & );
-
+       
+       static eRect emptyRect() { return eRect(0, 0, 0, 0); }
+       static eRect invalidRect() { return eRect(); }
+       
 private:
        int x1;
        int y1;
@@ -115,28 +130,6 @@ bool operator==( const eRect &, const eRect & );
 bool operator!=( const eRect &, const eRect & );
 
 
-/*****************************************************************************
-  eRect stream functions
- *****************************************************************************/
-namespace std
-{
-       inline ostream &operator<<( ostream & s, const eRect & r )
-       {
-               s << r.left()  << r.top()
-                 << r.right() << r.bottom();
-
-               return s;
-       }
-
-       inline istream &operator>>( istream & s, eRect & r )
-       {
-               int x1, y1, x2, y2;
-               s >> x1 >> y1 >> x2 >> y2;
-               r.setCoords( x1, y1, x2, y2 );
-               return s;
-       }
-}
-
 /*****************************************************************************
   eRect inline member functions
  *****************************************************************************/
@@ -149,13 +142,10 @@ inline eRect::eRect( int left, int top, int width, int height )
        y2 = top+height;
 }
 
-inline bool eRect::isNull() const
-{ return x2 == x1 && y2 == y1; }
+inline bool eRect::empty() const
+{ return x1 == x2 || y1 == y2; }
 
-inline bool eRect::isEmpty() const
-{ return x1 >= x2 || y1 >= y2; }
-
-inline bool eRect::isValid() const
+inline bool eRect::valid() const
 { return x1 <= x2 && y1 <= y2; }
 
 inline int eRect::left() const
@@ -218,6 +208,18 @@ inline ePoint eRect::topRight() const
 inline ePoint eRect::bottomLeft() const
 { return ePoint(x1, y2); }
 
+inline ePoint eRect::topLeft1() const
+{ return ePoint(x1, y1); }
+
+inline ePoint eRect::bottomRight1() const
+{ return ePoint(x2-1, y2-1); }
+
+inline ePoint eRect::topRight1() const
+{ return ePoint(x2-1, y1); }
+
+inline ePoint eRect::bottomLeft1() const
+{ return ePoint(x1, y2-1); }
+
 inline ePoint eRect::center() const
 { return ePoint((x1+x2)/2, (y1+y2)/2); }