]> git.saurik.com Git - wxWidgets.git/blob - include/wx/mgl/region.h
add a critical section protecting ms_prev variables (replaces patch 1819224)
[wxWidgets.git] / include / wx / mgl / region.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/mgl/region.h
3 // Purpose: wxRegion class
4 // Author: Vaclav Slavik
5 // Created: 2001/03/12
6 // RCS-ID: $Id$
7 // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifndef _WX_MGL_REGION_H_
12 #define _WX_MGL_REGION_H_
13
14 #include "wx/list.h"
15
16 class MGLRegion;
17
18 class WXDLLEXPORT wxRegion : public wxRegionBase
19 {
20 public:
21 wxRegion();
22 wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h);
23 wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight);
24 wxRegion(const wxRect& rect);
25 wxRegion(const MGLRegion& region);
26 wxRegion(size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
27 wxRegion(const wxBitmap& bmp)
28 {
29 Union(bmp);
30 }
31 wxRegion(const wxBitmap& bmp,
32 const wxColour& transColour, int tolerance = 0)
33 {
34 Union(bmp, transColour, tolerance);
35 }
36
37 virtual ~wxRegion();
38
39 // wxRegionBase methods
40 virtual void Clear();
41 virtual bool IsEmpty() const;
42
43 // implementation from now on:
44 const MGLRegion& GetMGLRegion() const;
45
46 protected:
47 // ref counting code
48 virtual wxObjectRefData *CreateRefData() const;
49 virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
50
51 // wxRegionBase pure virtuals
52 virtual bool DoIsEqual(const wxRegion& region) const;
53 virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const;
54 virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const;
55 virtual wxRegionContain DoContainsRect(const wxRect& rect) const;
56
57 virtual bool DoOffset(wxCoord x, wxCoord y);
58 virtual bool DoUnionWithRect(const wxRect& rect);
59 virtual bool DoUnionWithRegion(const wxRegion& region);
60 virtual bool DoIntersect(const wxRegion& region);
61 virtual bool DoSubtract(const wxRegion& region);
62 virtual bool DoXor(const wxRegion& region);
63
64 private:
65 DECLARE_DYNAMIC_CLASS(wxRegion);
66 friend class WXDLLIMPEXP_FWD_CORE wxRegionIterator;
67 };
68
69
70 WX_DECLARE_EXPORTED_LIST(wxRect, wxRegionRectList);
71
72 class WXDLLEXPORT wxRegionIterator : public wxObject
73 {
74 public:
75 wxRegionIterator(void);
76 wxRegionIterator(const wxRegion& region);
77 virtual ~wxRegionIterator(void);
78
79 void Reset(void) { m_currentNode = NULL; }
80 void Reset(const wxRegion& region);
81
82 operator bool (void) const { return (m_currentNode != NULL); }
83
84 bool HaveRects(void) const { return (m_currentNode != NULL); }
85
86 void operator ++ (void);
87 void operator ++ (int);
88
89 wxCoord GetX(void) const;
90 wxCoord GetY(void) const;
91 wxCoord GetW(void) const;
92 wxCoord GetWidth(void) const { return GetW(); }
93 wxCoord GetH(void) const;
94 wxCoord GetHeight(void) const { return GetH(); }
95 wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); }
96
97 private:
98 wxRegionRectList m_rects;
99 wxRegionRectList::Node *m_currentNode;
100
101 DECLARE_DYNAMIC_CLASS(wxRegionIterator);
102 };
103
104 #endif // _WX_MGL_REGION_H_