1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/os2/region.h
3// Purpose:     wxRegion class
4// Author:      David Webster
5// Modified by:
6// Created:     10/15/99
7// RCS-ID:      $Id: region.h 43288 2006-11-10 20:35:39Z ABX $
8// Copyright:   (c) David Webster
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_OS2_REGION_H_
13#define _WX_OS2_REGION_H_
14
15#include "wx/list.h"
16#include "wx/os2/private.h"
17
18class WXDLLEXPORT wxRegion : public wxRegionWithCombine
19{
20public:
21    wxRegion( wxCoord x
22             ,wxCoord y
23             ,wxCoord vWidth
24             ,wxCoord vHeight
25            );
26    wxRegion( const wxPoint& rTopLeft
27             ,const wxPoint& rBottomRight
28            );
29    wxRegion(const wxRect& rRect);
30    wxRegion(WXHRGN hRegion, WXHDC hPS); // Hangs on to this region
31    wxRegion(size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
32    wxRegion( const wxBitmap& bmp)
33    {
34        Union(bmp);
35    }
36    wxRegion( const wxBitmap& bmp,
37              const wxColour& transColour, int tolerance = 0)
38    {
39        Union(bmp, transColour, tolerance);
40    }
41
42    wxRegion();
43    virtual ~wxRegion();
44
45    //
46    // Modify region
47    //
48
49    //
50    // Clear current region
51    //
52    virtual void Clear();
53
54    //
55    // Is region empty?
56    //
57    virtual bool IsEmpty() const;
58
59    //
60    // Get internal region handle
61    //
62    WXHRGN GetHRGN() const;
63
64    void   SetPS(HPS hPS);
65
66protected:
67    virtual wxObjectRefData* CreateData(void) const;
68    virtual wxObjectRefData* CloneData(const wxObjectRefData* pData) const;
69
70    virtual bool DoIsEqual(const wxRegion& region) const;
71    virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const;
72    virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const;
73    virtual wxRegionContain DoContainsRect(const wxRect& rect) const;
74
75    virtual bool DoOffset(wxCoord x, wxCoord y);
76    virtual bool DoCombine(const wxRegion& region, wxRegionOp op);
77
78    friend class WXDLLEXPORT wxRegionIterator;
79    DECLARE_DYNAMIC_CLASS(wxRegion);
80
81}; // end of CLASS wxRegion
82
83class WXDLLEXPORT wxRegionIterator : public wxObject
84{
85DECLARE_DYNAMIC_CLASS(wxRegionIterator);
86public:
87    wxRegionIterator();
88    wxRegionIterator(const wxRegion& rRegion);
89    virtual ~wxRegionIterator();
90
91    void Reset(void) { m_lCurrent = 0; }
92    void Reset(const wxRegion& rRegion);
93
94    operator bool (void) const { return m_lCurrent < m_lNumRects; }
95    bool HaveRects(void) const { return m_lCurrent < m_lNumRects; }
96
97    void operator ++ (void);
98    void operator ++ (int);
99
100    wxCoord GetX(void) const;
101    wxCoord GetY(void) const;
102    wxCoord GetW(void) const;
103    wxCoord GetWidth(void) const { return GetW(); }
104    wxCoord GetH(void) const;
105    wxCoord GetHeight(void) const { return GetH(); }
106    wxRect  GetRect(void) const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); }
107
108private:
109    long                            m_lCurrent;
110    long                            m_lNumRects;
111    wxRegion                        m_vRegion;
112    wxRect*                         m_pRects;
113}; // end of wxRegionIterator
114
115#endif // _WX_OS2_REGION_H_
116