• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/amule/wxWidgets-2.8.12/include/wx/mac/classic/
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 41020 2006-09-05 20:47:48Z VZ $
8// Copyright:   (c) Stefan Csomor
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_REGION_H_
13#define _WX_REGION_H_
14
15#include "wx/list.h"
16#include "wx/gdiobj.h"
17#include "wx/gdicmn.h"
18
19class WXDLLEXPORT wxRect;
20class WXDLLEXPORT wxPoint;
21
22// So far, for internal use only
23enum wxRegionOp {
24wxRGN_AND,          // Creates the intersection of the two combined regions.
25wxRGN_COPY,         // Creates a copy of the region identified by hrgnSrc1.
26wxRGN_DIFF,         // Combines the parts of hrgnSrc1 that are not part of hrgnSrc2.
27wxRGN_OR,           // Creates the union of two combined regions.
28wxRGN_XOR           // Creates the union of two combined regions except for any overlapping areas.
29};
30
31class WXDLLEXPORT wxRegion : public wxGDIObject {
32DECLARE_DYNAMIC_CLASS(wxRegion);
33    friend class WXDLLEXPORT wxRegionIterator;
34public:
35    wxRegion(long x, long y, long w, long h);
36    wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight);
37    wxRegion(const wxRect& rect);
38    wxRegion( WXHRGN hRegion );
39    wxRegion();
40    wxRegion( const wxBitmap& bmp)
41    {
42        Union(bmp);
43    }
44    wxRegion( const wxBitmap& bmp,
45              const wxColour& transColour, int tolerance = 0)
46    {
47        Union(bmp, transColour, tolerance);
48    }
49
50    virtual ~wxRegion();
51
52    //# Modify region
53    // Clear current region
54    void Clear();
55
56    // Union rectangle or region with this.
57    bool Union(long x, long y, long width, long height)
58        { return Combine(x, y, width, height, wxRGN_OR); }
59    bool Union(const wxRect& rect)
60        { return Combine(rect, wxRGN_OR); }
61    bool Union(const wxRegion& region)
62        { return Combine(region, wxRGN_OR); }
63
64    // Intersect rectangle or region with this.
65    bool Intersect(long x, long y, long width, long height)
66        { return Combine(x, y, width, height, wxRGN_AND); }
67    bool Intersect(const wxRect& rect)
68        { return Combine(rect, wxRGN_AND); }
69    bool Intersect(const wxRegion& region)
70        { return Combine(region, wxRGN_AND); }
71
72    // Subtract rectangle or region from this:
73    // Combines the parts of 'this' that are not part of the second region.
74    bool Subtract(long x, long y, long width, long height)
75        { return Combine(x, y, width, height, wxRGN_DIFF); }
76    bool Subtract(const wxRect& rect)
77        { return Combine(rect, wxRGN_DIFF); }
78    bool Subtract(const wxRegion& region)
79        { return Combine(region, wxRGN_DIFF); }
80
81    // XOR: the union of two combined regions except for any overlapping areas.
82    bool Xor(long x, long y, long width, long height)
83        { return Combine(x, y, width, height, wxRGN_XOR); }
84    bool Xor(const wxRect& rect)
85        { return Combine(rect, wxRGN_XOR); }
86    bool Xor(const wxRegion& region)
87        { return Combine(region, wxRGN_XOR); }
88
89    //# Information on region
90    // Outer bounds of region
91    void GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const;
92    wxRect GetBox() const ;
93
94    // Is region empty?
95    bool Empty() const;
96    inline bool IsEmpty() const { return Empty(); }
97
98    //# Tests
99    // Does the region contain the point (x,y)?
100    wxRegionContain Contains(long x, long y) const;
101    // Does the region contain the point pt?
102    wxRegionContain Contains(const wxPoint& pt) const;
103    // Does the region contain the rectangle (x, y, w, h)?
104    wxRegionContain Contains(long x, long y, long w, long h) const;
105    // Does the region contain the rectangle rect?
106    wxRegionContain Contains(const wxRect& rect) const;
107
108    // Convert the region to a B&W bitmap with the white pixels being inside
109    // the region.
110    wxBitmap ConvertToBitmap() const;
111
112    // Use the non-transparent pixels of a wxBitmap for the region to combine
113    // with this region.  First version takes transparency from bitmap's mask,
114    // second lets the user specify the colour to be treated as transparent
115    // along with an optional tolerance value.
116    // NOTE: implemented in common/rgncmn.cpp
117    bool Union(const wxBitmap& bmp);
118    bool Union(const wxBitmap& bmp,
119               const wxColour& transColour, int tolerance = 0);
120
121    // Internal
122    bool Combine(long x, long y, long width, long height, wxRegionOp op);
123    bool Combine(const wxRegion& region, wxRegionOp op);
124    bool Combine(const wxRect& rect, wxRegionOp op);
125    const WXHRGN GetWXHRGN() const ;
126};
127
128class WXDLLEXPORT wxRegionIterator : public wxObject
129{
130    DECLARE_DYNAMIC_CLASS(wxRegionIterator)
131
132public:
133    wxRegionIterator();
134    wxRegionIterator(const wxRegion& region);
135    wxRegionIterator(const wxRegionIterator& iterator);
136    virtual ~wxRegionIterator();
137
138    wxRegionIterator& operator=(const wxRegionIterator& iterator);
139
140    void Reset() { m_current = 0; }
141    void Reset(const wxRegion& region);
142
143    operator bool () const { return m_current < m_numRects; }
144    bool HaveRects() const { return m_current < m_numRects; }
145
146    wxRegionIterator& operator++();
147    wxRegionIterator operator++(int);
148
149    long GetX() const;
150    long GetY() const;
151    long GetW() const;
152    long GetWidth() const { return GetW(); }
153    long GetH() const;
154    long GetHeight() const { return GetH(); }
155    wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); }
156private:
157    void SetRects(long numRects, wxRect *rects);
158
159    long     m_current;
160    long     m_numRects;
161    wxRegion m_region;
162    wxRect*  m_rects;
163};
164
165#endif
166    // _WX_REGION_H_
167