great copy ctor/assignment operators cleanup by Paul Cornett (patch 1307665)
[wxWidgets.git] / include / wx / gtk / region.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/region.h
3 // Purpose:
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10 #ifndef _WX_GTK_REGION_H_
11 #define _WX_GTK_REGION_H_
12
13 #include "wx/list.h"
14 #include "wx/gdiobj.h"
15 #include "wx/gdicmn.h"
16
17 //-----------------------------------------------------------------------------
18 // classes
19 //-----------------------------------------------------------------------------
20
21 class WXDLLIMPEXP_CORE wxRegion;
22
23 //-----------------------------------------------------------------------------
24 // constants
25 //-----------------------------------------------------------------------------
26
27 enum wxRegionContain
28 {
29 wxOutRegion = 0,
30 wxPartRegion = 1,
31 wxInRegion = 2
32 };
33
34 // So far, for internal use only
35 enum wxRegionOp
36 {
37 wxRGN_AND, // Creates the intersection of the two combined regions.
38 wxRGN_COPY, // Creates a copy of the region identified by hrgnSrc1.
39 wxRGN_DIFF, // Combines the parts of hrgnSrc1 that are not part of hrgnSrc2.
40 wxRGN_OR, // Creates the union of two combined regions.
41 wxRGN_XOR // Creates the union of two combined regions except for any overlapping areas.
42 };
43
44 // ----------------------------------------------------------------------------
45 // wxRegion
46 // ----------------------------------------------------------------------------
47
48 class WXDLLIMPEXP_CORE wxRegion : public wxGDIObject
49 {
50 public:
51 wxRegion() { }
52
53 wxRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h )
54 {
55 InitRect(x, y, w, h);
56 }
57
58 wxRegion( const wxPoint& topLeft, const wxPoint& bottomRight )
59 {
60 InitRect(topLeft.x, topLeft.y,
61 bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
62 }
63
64 wxRegion( const wxRect& rect )
65 {
66 InitRect(rect.x, rect.y, rect.width, rect.height);
67 }
68
69 wxRegion( size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
70
71 wxRegion( const wxBitmap& bmp)
72 {
73 Union(bmp);
74 }
75 wxRegion( const wxBitmap& bmp,
76 const wxColour& transColour, int tolerance = 0)
77 {
78 Union(bmp, transColour, tolerance);
79 }
80
81 ~wxRegion();
82
83 bool Ok() const { return m_refData != NULL; }
84
85 bool operator == ( const wxRegion& region ) const;
86 bool operator != ( const wxRegion& region ) const { return !(*this == region); }
87
88 void Clear();
89
90 bool Offset( wxCoord x, wxCoord y );
91
92 bool Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
93 bool Union( const wxRect& rect );
94 bool Union( const wxRegion& region );
95
96 bool Intersect( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
97 bool Intersect( const wxRect& rect );
98 bool Intersect( const wxRegion& region );
99
100 bool Subtract( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
101 bool Subtract( const wxRect& rect );
102 bool Subtract( const wxRegion& region );
103
104 bool Xor( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
105 bool Xor( const wxRect& rect );
106 bool Xor( const wxRegion& region );
107
108 void GetBox( wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h ) const;
109 wxRect GetBox() const ;
110
111 bool Empty() const;
112 bool IsEmpty() const { return Empty(); }
113
114 wxRegionContain Contains( wxCoord x, wxCoord y ) const;
115 wxRegionContain Contains( wxCoord x, wxCoord y, wxCoord w, wxCoord h ) const;
116 wxRegionContain Contains(const wxPoint& pt) const;
117 wxRegionContain Contains(const wxRect& rect) const;
118
119 // Convert the region to a B&W bitmap with the white pixels being inside
120 // the region.
121 wxBitmap ConvertToBitmap() const;
122
123 // Use the non-transparent pixels of a wxBitmap for the region to combine
124 // with this region. First version takes transparency from bitmap's mask,
125 // second lets the user specify the colour to be treated as transparent
126 // along with an optional tolerance value.
127 // NOTE: implemented in common/rgncmn.cpp
128 bool Union(const wxBitmap& bmp);
129 bool Union(const wxBitmap& bmp,
130 const wxColour& transColour, int tolerance = 0);
131
132
133 public:
134 // Init with GdkRegion, set ref count to 2 so that
135 // the C++ class will not destroy the region!
136 wxRegion( GdkRegion *region );
137
138 GdkRegion *GetRegion() const;
139
140 protected:
141 // ref counting code
142 virtual wxObjectRefData *CreateRefData() const;
143 virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
144
145 // common part of ctors for a rectangle region
146 void InitRect(wxCoord x, wxCoord y, wxCoord w, wxCoord h);
147
148 private:
149 DECLARE_DYNAMIC_CLASS(wxRegion)
150 };
151
152 // ----------------------------------------------------------------------------
153 // wxRegionIterator: decomposes a region into rectangles
154 // ----------------------------------------------------------------------------
155
156 class WXDLLIMPEXP_CORE wxRegionIterator: public wxObject
157 {
158 public:
159 wxRegionIterator();
160 wxRegionIterator(const wxRegion& region);
161
162 void Reset() { m_current = 0u; }
163 void Reset(const wxRegion& region);
164
165 bool HaveRects() const;
166 operator bool () const { return HaveRects(); }
167
168 wxRegionIterator& operator ++ ();
169 wxRegionIterator operator ++ (int);
170
171 wxCoord GetX() const;
172 wxCoord GetY() const;
173 wxCoord GetW() const;
174 wxCoord GetWidth() const { return GetW(); }
175 wxCoord GetH() const;
176 wxCoord GetHeight() const { return GetH(); }
177 wxRect GetRect() const;
178
179 private:
180 size_t m_current;
181 wxRegion m_region;
182
183 private:
184 DECLARE_DYNAMIC_CLASS(wxRegionIterator)
185 };
186
187
188 #endif
189 // _WX_GTK_REGION_H_