1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxRegion class 
   8 // Copyright:   (c) AUTHOR 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  16 #pragma interface "region.h" 
  20 #include "wx/gdiobj.h" 
  22 class WXDLLEXPORT wxRect
; 
  23 class WXDLLEXPORT wxPoint
; 
  25 enum wxRegionContain 
{ 
  26         wxOutRegion 
= 0, wxPartRegion 
= 1, wxInRegion 
= 2 
  29 // So far, for internal use only 
  31 wxRGN_AND
,          // Creates the intersection of the two combined regions. 
  32 wxRGN_COPY
,         // Creates a copy of the region identified by hrgnSrc1. 
  33 wxRGN_DIFF
,         // Combines the parts of hrgnSrc1 that are not part of hrgnSrc2. 
  34 wxRGN_OR
,           // Creates the union of two combined regions. 
  35 wxRGN_XOR           
// Creates the union of two combined regions except for any overlapping areas. 
  38 class WXDLLEXPORT wxRegion 
: public wxGDIObject 
{ 
  39 DECLARE_DYNAMIC_CLASS(wxRegion
); 
  40         friend class WXDLLEXPORT wxRegionIterator
; 
  42     wxRegion(long x
, long y
, long w
, long h
); 
  43     wxRegion(const wxPoint
& topLeft
, const wxPoint
& bottomRight
); 
  44     wxRegion(const wxRect
& rect
); 
  46 /* TODO: implementation 
  47     wxRegion(WXHRGN hRegion); // Hangs on to this region 
  54         inline wxRegion(const wxRegion
& r
) 
  56         inline wxRegion
& operator = (const wxRegion
& r
) 
  57                 { Ref(r
); return (*this); } 
  60         // Clear current region 
  63         // Union rectangle or region with this. 
  64         inline bool Union(long x
, long y
, long width
, long height
) { return Combine(x
, y
, width
, height
, wxRGN_OR
); } 
  65         inline bool Union(const wxRect
& rect
) { return Combine(rect
, wxRGN_OR
); } 
  66         inline bool Union(const wxRegion
& region
) { return Combine(region
, wxRGN_OR
); } 
  68         // Intersect rectangle or region with this. 
  69         inline bool Intersect(long x
, long y
, long width
, long height
) { return Combine(x
, y
, width
, height
, wxRGN_AND
); } 
  70         inline bool Intersect(const wxRect
& rect
)  { return Combine(rect
, wxRGN_AND
); } 
  71         inline bool Intersect(const wxRegion
& region
)  { return Combine(region
, wxRGN_AND
); } 
  73         // Subtract rectangle or region from this: 
  74     // Combines the parts of 'this' that are not part of the second region. 
  75         inline bool Subtract(long x
, long y
, long width
, long height
) { return Combine(x
, y
, width
, height
, wxRGN_DIFF
); } 
  76         inline bool Subtract(const wxRect
& rect
)  { return Combine(rect
, wxRGN_DIFF
); } 
  77         inline bool Subtract(const wxRegion
& region
)  { return Combine(region
, wxRGN_DIFF
); } 
  79         // XOR: the union of two combined regions except for any overlapping areas. 
  80         inline bool Xor(long x
, long y
, long width
, long height
) { return Combine(x
, y
, width
, height
, wxRGN_XOR
); } 
  81         inline bool Xor(const wxRect
& rect
)  { return Combine(rect
, wxRGN_XOR
); } 
  82         inline bool Xor(const wxRegion
& region
)  { return Combine(region
, wxRGN_XOR
); } 
  84         //# Information on region 
  85         // Outer bounds of region 
  86         void GetBox(long& x
, long& y
, long&w
, long &h
) const; 
  87         wxRect 
GetBox() const ; 
  91     inline bool IsEmpty() const { return Empty(); } 
  94         // Does the region contain the point (x,y)? 
  95         wxRegionContain 
Contains(long x
, long y
) const; 
  96         // Does the region contain the point pt? 
  97         wxRegionContain 
Contains(const wxPoint
& pt
) const; 
  98         // Does the region contain the rectangle (x, y, w, h)? 
  99         wxRegionContain 
Contains(long x
, long y
, long w
, long h
) const; 
 100         // Does the region contain the rectangle rect? 
 101         wxRegionContain 
Contains(const wxRect
& rect
) const; 
 104         bool Combine(long x
, long y
, long width
, long height
, wxRegionOp op
); 
 105         bool Combine(const wxRegion
& region
, wxRegionOp op
); 
 106         bool Combine(const wxRect
& rect
, wxRegionOp op
); 
 109 class WXDLLEXPORT wxRegionIterator 
: public wxObject 
{ 
 110 DECLARE_DYNAMIC_CLASS(wxRegionIterator
); 
 113         wxRegionIterator(const wxRegion
& region
); 
 116         void Reset() { m_current 
= 0; } 
 117         void Reset(const wxRegion
& region
); 
 119         operator bool () const { return m_current 
< m_numRects
; } 
 120         bool HaveRects() const { return m_current 
< m_numRects
; } 
 123         void operator ++ (int); 
 128         long GetWidth() const { return GetW(); } 
 130         long GetHeight() const { return GetH(); }