1/////////////////////////////////////////////////////////////////////////////
2// Name:        region.h
3// Purpose:     wxRegion class
4// Author:      Stefan Csomor
5// Modified by:
6// Created:     1998-01-01
7// RCS-ID:      $Id: region.h 41429 2006-09-25 11:47:23Z VZ $
8// Copyright:   (c) Stefan Csomor
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_MAC_CARBON_REGION_H_
13#define _WX_MAC_CARBON_REGION_H_
14
15#include "wx/list.h"
16
17class WXDLLEXPORT wxRegion : public wxRegionWithCombine
18{
19public:
20    wxRegion(long x, long y, long w, long h);
21    wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight);
22    wxRegion(const wxRect& rect);
23    wxRegion( WXHRGN hRegion );
24    wxRegion(size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
25    wxRegion();
26    wxRegion(const wxBitmap& bmp)
27    {
28        Union(bmp);
29    }
30    wxRegion(const wxBitmap& bmp,
31             const wxColour& transColour, int tolerance = 0)
32    {
33        Union(bmp, transColour, tolerance);
34    }
35
36    virtual ~wxRegion();
37
38    // wxRegionBase methods
39    virtual void Clear();
40    virtual bool IsEmpty() const;
41
42    // Internal
43    const WXHRGN GetWXHRGN() const ;
44
45protected:
46    virtual bool DoIsEqual(const wxRegion& region) const;
47    virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const;
48    virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const;
49    virtual wxRegionContain DoContainsRect(const wxRect& rect) const;
50
51    virtual bool DoOffset(wxCoord x, wxCoord y);
52    virtual bool DoCombine(const wxRegion& region, wxRegionOp op);
53
54private:
55    DECLARE_DYNAMIC_CLASS(wxRegion)
56    friend class WXDLLEXPORT wxRegionIterator;
57};
58
59class WXDLLEXPORT wxRegionIterator : public wxObject
60{
61public:
62    wxRegionIterator();
63    wxRegionIterator(const wxRegion& region);
64    wxRegionIterator(const wxRegionIterator& iterator);
65    virtual ~wxRegionIterator();
66
67    wxRegionIterator& operator=(const wxRegionIterator& iterator);
68
69    void Reset() { m_current = 0; }
70    void Reset(const wxRegion& region);
71
72    operator bool () const { return m_current < m_numRects; }
73    bool HaveRects() const { return m_current < m_numRects; }
74
75    wxRegionIterator& operator++();
76    wxRegionIterator operator++(int);
77
78    long GetX() const;
79    long GetY() const;
80    long GetW() const;
81    long GetWidth() const { return GetW(); }
82    long GetH() const;
83    long GetHeight() const { return GetH(); }
84    wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); }
85
86private:
87    void SetRects(long numRects, wxRect *rects);
88
89    long     m_current;
90    long     m_numRects;
91    wxRegion m_region;
92    wxRect*  m_rects;
93
94    DECLARE_DYNAMIC_CLASS(wxRegionIterator)
95};
96
97#endif // _WX_MAC_CARBON_REGION_H_
98