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