]> git.saurik.com Git - wxWidgets.git/blame - include/wx/gtk/region.h
Apply choice patch for proper handling of clearing
[wxWidgets.git] / include / wx / gtk / region.h
CommitLineData
c801d85f 1/////////////////////////////////////////////////////////////////////////////
5fc7ede9 2// Name: wx/gtk/region.h
c801d85f
KB
3// Purpose:
4// Author: Robert Roebling
58614078
RR
5// Id: $Id$
6// Copyright: (c) 1998 Robert Roebling
65571936 7// Licence: wxWindows licence
c801d85f
KB
8/////////////////////////////////////////////////////////////////////////////
9
5fc7ede9
VZ
10#ifndef _WX_GTK_REGION_H_
11#define _WX_GTK_REGION_H_
c801d85f 12
12028905 13#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
c801d85f
KB
14#pragma interface
15#endif
16
17#include "wx/list.h"
18#include "wx/gdiobj.h"
19#include "wx/gdicmn.h"
20
21//-----------------------------------------------------------------------------
22// classes
23//-----------------------------------------------------------------------------
24
25class wxRegion;
26
27//-----------------------------------------------------------------------------
28// constants
29//-----------------------------------------------------------------------------
30
5fc7ede9 31enum wxRegionContain
c801d85f 32{
1e6feb95
VZ
33 wxOutRegion = 0,
34 wxPartRegion = 1,
e1208c31 35 wxInRegion = 2
c801d85f
KB
36};
37
38// So far, for internal use only
1e6feb95 39enum wxRegionOp
e1208c31
RR
40{
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.
c801d85f
KB
46};
47
1e6feb95 48// ----------------------------------------------------------------------------
c801d85f 49// wxRegion
1e6feb95 50// ----------------------------------------------------------------------------
c801d85f 51
5fc7ede9 52class wxRegion : public wxGDIObject
c801d85f 53{
e1208c31 54public:
9fe4c99c 55 wxRegion() { }
1542ea39 56
9fe4c99c
VZ
57 wxRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h )
58 {
59 InitRect(x, y, w, h);
60 }
61
62 wxRegion( const wxPoint& topLeft, const wxPoint& bottomRight )
63 {
64 InitRect(topLeft.x, topLeft.y,
65 bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
66 }
67
68 wxRegion( const wxRect& rect )
69 {
70 InitRect(rect.x, rect.y, rect.width, rect.height);
71 }
72
73 wxRegion( size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
1542ea39 74
85f6b408
VS
75 wxRegion( const wxBitmap& bmp)
76 {
77 Union(bmp);
78 }
1542ea39 79 wxRegion( const wxBitmap& bmp,
85f6b408 80 const wxColour& transColour, int tolerance = 0)
1542ea39
RD
81 {
82 Union(bmp, transColour, tolerance);
83 }
84
c89f5c02 85 ~wxRegion();
c801d85f 86
d84afea9
GD
87 wxRegion( const wxRegion& region )
88 : wxGDIObject()
89 { Ref(region); }
c89f5c02
RR
90 wxRegion& operator = ( const wxRegion& region ) { Ref(region); return *this; }
91
92 bool Ok() const { return m_refData != NULL; }
c801d85f 93
76ed8f8d 94 bool operator == ( const wxRegion& region );
c89f5c02 95 bool operator != ( const wxRegion& region ) { return !(*this == region); }
5fc7ede9 96
07818da8 97 void Clear();
9fe4c99c 98
35917d22 99 bool Offset( wxCoord x, wxCoord y );
c801d85f 100
5fc7ede9 101 bool Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
c801d85f
KB
102 bool Union( const wxRect& rect );
103 bool Union( const wxRegion& region );
104
5fc7ede9 105 bool Intersect( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
c801d85f
KB
106 bool Intersect( const wxRect& rect );
107 bool Intersect( const wxRegion& region );
108
5fc7ede9 109 bool Subtract( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
c801d85f
KB
110 bool Subtract( const wxRect& rect );
111 bool Subtract( const wxRegion& region );
112
5fc7ede9 113 bool Xor( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
c801d85f
KB
114 bool Xor( const wxRect& rect );
115 bool Xor( const wxRegion& region );
116
5fc7ede9 117 void GetBox( wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h ) const;
07818da8 118 wxRect GetBox() const ;
c801d85f 119
07818da8
VZ
120 bool Empty() const;
121 bool IsEmpty() const { return Empty(); }
c801d85f 122
5fc7ede9
VZ
123 wxRegionContain Contains( wxCoord x, wxCoord y ) const;
124 wxRegionContain Contains( wxCoord x, wxCoord y, wxCoord w, wxCoord h ) const;
8429bec1
RR
125 wxRegionContain Contains(const wxPoint& pt) const;
126 wxRegionContain Contains(const wxRect& rect) const;
5fc7ede9 127
819451b6 128 // Convert the region to a B&W bitmap with the white pixels being inside
1542ea39
RD
129 // the region.
130 wxBitmap ConvertToBitmap() const;
131
132 // Use the non-transparent pixels of a wxBitmap for the region to combine
85f6b408
VS
133 // with this region. First version takes transparency from bitmap's mask,
134 // second lets the user specify the colour to be treated as transparent
1542ea39 135 // along with an optional tolerance value.
85f6b408
VS
136 // NOTE: implemented in common/rgncmn.cpp
137 bool Union(const wxBitmap& bmp);
1542ea39 138 bool Union(const wxBitmap& bmp,
85f6b408 139 const wxColour& transColour, int tolerance = 0);
1542ea39
RD
140
141
e1208c31 142public:
331a0b6b
RR
143 // Init with GdkRegion, set ref count to 2 so that
144 // the C++ class will not destroy the region!
145 wxRegion( GdkRegion *region );
1542ea39 146
07818da8 147 GdkRegion *GetRegion() const;
1e6feb95
VZ
148
149protected:
e0f0b197
RR
150 // ref counting code
151 virtual wxObjectRefData *CreateRefData() const;
152 virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
1542ea39 153
9fe4c99c
VZ
154 // common part of ctors for a rectangle region
155 void InitRect(wxCoord x, wxCoord y, wxCoord w, wxCoord h);
156
e1208c31 157private:
1e6feb95 158 DECLARE_DYNAMIC_CLASS(wxRegion);
c801d85f
KB
159};
160
1e6feb95
VZ
161// ----------------------------------------------------------------------------
162// wxRegionIterator: decomposes a region into rectangles
163// ----------------------------------------------------------------------------
164
5fc7ede9 165class wxRegionIterator: public wxObject
8429bec1 166{
738f9e5a 167public:
07818da8 168 wxRegionIterator();
8429bec1
RR
169 wxRegionIterator(const wxRegion& region);
170
6f2a55e3 171 void Reset() { m_current = 0u; }
8429bec1
RR
172 void Reset(const wxRegion& region);
173
07818da8 174 bool HaveRects() const;
2b5f62a0 175 operator bool () const { return HaveRects(); }
8429bec1 176
2b5f62a0
VZ
177 wxRegionIterator& operator ++ ();
178 wxRegionIterator operator ++ (int);
8429bec1 179
b02da6b1
VZ
180 wxCoord GetX() const;
181 wxCoord GetY() const;
182 wxCoord GetW() const;
183 wxCoord GetWidth() const { return GetW(); }
184 wxCoord GetH() const;
185 wxCoord GetHeight() const { return GetH(); }
1e6feb95 186 wxRect GetRect() const;
8429bec1 187
738f9e5a 188private:
6f2a55e3
VZ
189 size_t m_current;
190 wxRegion m_region;
738f9e5a
RR
191
192private:
193 DECLARE_DYNAMIC_CLASS(wxRegionIterator);
8429bec1
RR
194};
195
196
c801d85f 197#endif
5fc7ede9 198 // _WX_GTK_REGION_H_