]>
git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/region.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        wx/gtk/region.h 
   4 // Author:      Robert Roebling 
   6 // Copyright:   (c) 1998 Robert Roebling 
   7 // Licence:     wxWindows licence 
   8 ///////////////////////////////////////////////////////////////////////////// 
  10 #ifndef _WX_GTK_REGION_H_ 
  11 #define _WX_GTK_REGION_H_ 
  13 #if defined(__GNUG__) && !defined(__APPLE__) 
  18 #include "wx/gdiobj.h" 
  19 #include "wx/gdicmn.h" 
  21 //----------------------------------------------------------------------------- 
  23 //----------------------------------------------------------------------------- 
  27 //----------------------------------------------------------------------------- 
  29 //----------------------------------------------------------------------------- 
  38 // So far, for internal use only 
  41    wxRGN_AND
,          // Creates the intersection of the two combined regions. 
  42    wxRGN_COPY
,         // Creates a copy of the region identified by hrgnSrc1. 
  43    wxRGN_DIFF
,         // Combines the parts of hrgnSrc1 that are not part of hrgnSrc2. 
  44    wxRGN_OR
,           // Creates the union of two combined regions. 
  45    wxRGN_XOR           
// Creates the union of two combined regions except for any overlapping areas. 
  48 // ---------------------------------------------------------------------------- 
  50 // ---------------------------------------------------------------------------- 
  52 class wxRegion 
: public wxGDIObject
 
  57     wxRegion( wxCoord x
, wxCoord y
, wxCoord w
, wxCoord h 
) 
  62     wxRegion( const wxPoint
& topLeft
, const wxPoint
& bottomRight 
) 
  64         InitRect(topLeft
.x
, topLeft
.y
, 
  65                  bottomRight
.x 
- topLeft
.x
, bottomRight
.y 
- topLeft
.y
); 
  68     wxRegion( const wxRect
& rect 
) 
  70         InitRect(rect
.x
, rect
.y
, rect
.width
, rect
.height
); 
  73     wxRegion( size_t n
, const wxPoint 
*points
, int fillStyle 
= wxODDEVEN_RULE 
); 
  75     wxRegion( const wxBitmap
& bmp
, 
  76               const wxColour
& transColour 
= wxNullColour
, 
  79         Union(bmp
, transColour
, tolerance
); 
  84     wxRegion( const wxRegion
& region 
) 
  87     wxRegion
& operator = ( const wxRegion
& region 
) { Ref(region
); return *this; } 
  89     bool Ok() const { return m_refData 
!= NULL
; } 
  91     bool operator == ( const wxRegion
& region 
); 
  92     bool operator != ( const wxRegion
& region 
) { return !(*this == region
); } 
  96     bool Offset( wxCoord x
, wxCoord y 
); 
  98     bool Union( wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height 
); 
  99     bool Union( const wxRect
& rect 
); 
 100     bool Union( const wxRegion
& region 
); 
 102     bool Intersect( wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height 
); 
 103     bool Intersect( const wxRect
& rect 
); 
 104     bool Intersect( const wxRegion
& region 
); 
 106     bool Subtract( wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height 
); 
 107     bool Subtract( const wxRect
& rect 
); 
 108     bool Subtract( const wxRegion
& region 
); 
 110     bool Xor( wxCoord x
, wxCoord y
, wxCoord width
, wxCoord height 
); 
 111     bool Xor( const wxRect
& rect 
); 
 112     bool Xor( const wxRegion
& region 
); 
 114     void GetBox( wxCoord
& x
, wxCoord
& y
, wxCoord
&w
, wxCoord 
&h 
) const; 
 115     wxRect 
GetBox() const ; 
 118     bool IsEmpty() const { return Empty(); } 
 120     wxRegionContain 
Contains( wxCoord x
, wxCoord y 
) const; 
 121     wxRegionContain 
Contains( wxCoord x
, wxCoord y
, wxCoord w
, wxCoord h 
) const; 
 122     wxRegionContain 
Contains(const wxPoint
& pt
) const; 
 123     wxRegionContain 
Contains(const wxRect
& rect
) const; 
 125     // Convert the region to a B&W bitmap with the white pixels being inside 
 127     wxBitmap 
ConvertToBitmap() const; 
 129     // Use the non-transparent pixels of a wxBitmap for the region to combine 
 130     // with this region.  If the bitmap has a mask then it will be used, 
 131     // otherwise the colour to be treated as transparent may be specified, 
 132     // along with an optional tolerance value. 
 133     bool Union(const wxBitmap
& bmp
, 
 134                const wxColour
& transColour 
= wxNullColour
, 
 139     // Init with GdkRegion, set ref count to 2 so that 
 140     // the C++ class will not destroy the region! 
 141     wxRegion( GdkRegion 
*region 
); 
 143     GdkRegion 
*GetRegion() const; 
 147     virtual wxObjectRefData 
*CreateRefData() const; 
 148     virtual wxObjectRefData 
*CloneRefData(const wxObjectRefData 
*data
) const; 
 150     // common part of ctors for a rectangle region 
 151     void InitRect(wxCoord x
, wxCoord y
, wxCoord w
, wxCoord h
); 
 154     DECLARE_DYNAMIC_CLASS(wxRegion
); 
 157 // ---------------------------------------------------------------------------- 
 158 // wxRegionIterator: decomposes a region into rectangles 
 159 // ---------------------------------------------------------------------------- 
 161 class wxRegionIterator
: public wxObject
 
 165     wxRegionIterator(const wxRegion
& region
); 
 167     void Reset() { m_current 
= 0u; } 
 168     void Reset(const wxRegion
& region
); 
 170     bool HaveRects() const; 
 171     operator bool () const { return HaveRects(); } 
 173     wxRegionIterator
& operator ++ (); 
 174     wxRegionIterator 
operator ++ (int); 
 176     wxCoord 
GetX() const; 
 177     wxCoord 
GetY() const; 
 178     wxCoord 
GetW() const; 
 179     wxCoord 
GetWidth() const { return GetW(); } 
 180     wxCoord 
GetH() const; 
 181     wxCoord 
GetHeight() const { return GetH(); } 
 182     wxRect 
GetRect() const; 
 189     DECLARE_DYNAMIC_CLASS(wxRegionIterator
);