1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/gtk1/region.h
3 // Purpose:
4 // Author:      Robert Roebling
5 // Copyright:   (c) 1998 Robert Roebling
6 // Licence:     wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8 
9 #ifndef _WX_GTK_REGION_H_
10 #define _WX_GTK_REGION_H_
11 
12 #include "wx/list.h"
13 
14 // ----------------------------------------------------------------------------
15 // wxRegion
16 // ----------------------------------------------------------------------------
17 
18 class WXDLLIMPEXP_CORE wxRegion : public wxRegionBase
19 {
20 public:
wxRegion()21     wxRegion() { }
22 
wxRegion(wxCoord x,wxCoord y,wxCoord w,wxCoord h)23     wxRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h )
24     {
25         InitRect(x, y, w, h);
26     }
27 
wxRegion(const wxPoint & topLeft,const wxPoint & bottomRight)28     wxRegion( const wxPoint& topLeft, const wxPoint& bottomRight )
29     {
30         InitRect(topLeft.x, topLeft.y,
31                  bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);
32     }
33 
wxRegion(const wxRect & rect)34     wxRegion( const wxRect& rect )
35     {
36         InitRect(rect.x, rect.y, rect.width, rect.height);
37     }
38 
39     wxRegion( size_t n, const wxPoint *points, wxPolygonFillMode fillStyle = wxODDEVEN_RULE );
40 
wxRegion(const wxBitmap & bmp)41     wxRegion( const wxBitmap& bmp)
42     {
43         Union(bmp);
44     }
45     wxRegion( const wxBitmap& bmp,
46               const wxColour& transColour, int tolerance = 0)
47     {
48         Union(bmp, transColour, tolerance);
49     }
50 
51     virtual ~wxRegion();
52 
53     // wxRegionBase methods
54     virtual void Clear();
55     virtual bool IsEmpty() const;
56 
57 public:
58     // Init with GdkRegion, set ref count to 2 so that
59     // the C++ class will not destroy the region!
60     wxRegion( GdkRegion *region );
61 
62     GdkRegion *GetRegion() const;
63 
64 protected:
65     virtual wxGDIRefData *CreateGDIRefData() const;
66     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
67 
68     // wxRegionBase pure virtuals
69     virtual bool DoIsEqual(const wxRegion& region) const;
70     virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const;
71     virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const;
72     virtual wxRegionContain DoContainsRect(const wxRect& rect) const;
73 
74     virtual bool DoOffset(wxCoord x, wxCoord y);
75     virtual bool DoUnionWithRect(const wxRect& rect);
76     virtual bool DoUnionWithRegion(const wxRegion& region);
77     virtual bool DoIntersect(const wxRegion& region);
78     virtual bool DoSubtract(const wxRegion& region);
79     virtual bool DoXor(const wxRegion& region);
80 
81     // common part of ctors for a rectangle region
82     void InitRect(wxCoord x, wxCoord y, wxCoord w, wxCoord h);
83 
84 private:
85     wxDECLARE_DYNAMIC_CLASS(wxRegion);
86 };
87 
88 // ----------------------------------------------------------------------------
89 // wxRegionIterator: decomposes a region into rectangles
90 // ----------------------------------------------------------------------------
91 
92 class WXDLLIMPEXP_CORE wxRegionIterator: public wxObject
93 {
94 public:
95     wxRegionIterator();
96     wxRegionIterator(const wxRegion& region);
97 
Reset()98     void Reset() { m_current = 0u; }
99     void Reset(const wxRegion& region);
100 
101     bool HaveRects() const;
102     operator bool () const { return HaveRects(); }
103 
104     wxRegionIterator& operator ++ ();
105     wxRegionIterator operator ++ (int);
106 
107     wxCoord GetX() const;
108     wxCoord GetY() const;
109     wxCoord GetW() const;
GetWidth()110     wxCoord GetWidth() const { return GetW(); }
111     wxCoord GetH() const;
GetHeight()112     wxCoord GetHeight() const { return GetH(); }
113     wxRect GetRect() const;
114 
115 private:
116     size_t   m_current;
117     wxRegion m_region;
118 
119 private:
120     wxDECLARE_DYNAMIC_CLASS(wxRegionIterator);
121 };
122 
123 
124 #endif
125         // _WX_GTK_REGION_H_
126