1998-05-20 10:01:55 -04:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: region.h
|
|
|
|
// Purpose:
|
|
|
|
// Author: Robert Roebling
|
1998-10-29 13:03:18 -05:00
|
|
|
// Id: $Id$
|
|
|
|
// Copyright: (c) 1998 Robert Roebling
|
1998-05-20 10:01:55 -04:00
|
|
|
// Licence: wxWindows licence
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#ifndef __REGIONH__
|
|
|
|
#define __REGIONH__
|
|
|
|
|
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma interface
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "wx/list.h"
|
|
|
|
#include "wx/gdiobj.h"
|
|
|
|
#include "wx/gdicmn.h"
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// classes
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class wxRegion;
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// constants
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
enum wxRegionContain
|
|
|
|
{
|
|
|
|
wxOutRegion = 0, wxPartRegion = 1, wxInRegion = 2
|
|
|
|
};
|
|
|
|
|
|
|
|
// So far, for internal use only
|
|
|
|
enum wxRegionOp {
|
|
|
|
wxRGN_AND, // Creates the intersection of the two combined regions.
|
|
|
|
wxRGN_COPY, // Creates a copy of the region identified by hrgnSrc1.
|
|
|
|
wxRGN_DIFF, // Combines the parts of hrgnSrc1 that are not part of hrgnSrc2.
|
|
|
|
wxRGN_OR, // Creates the union of two combined regions.
|
|
|
|
wxRGN_XOR // Creates the union of two combined regions except for any overlapping areas.
|
|
|
|
};
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// wxRegion
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class wxRegion : public wxGDIObject
|
|
|
|
{
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxRegion);
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
wxRegion( long x, long y, long w, long h );
|
|
|
|
wxRegion( const wxPoint& topLeft, const wxPoint& bottomRight );
|
|
|
|
wxRegion( const wxRect& rect );
|
1999-10-06 14:11:57 -04:00
|
|
|
wxRegion();
|
|
|
|
~wxRegion();
|
1998-05-20 10:01:55 -04:00
|
|
|
|
1998-11-26 04:56:02 -05:00
|
|
|
inline wxRegion( const wxRegion& r ): wxGDIObject()
|
1998-05-20 10:01:55 -04:00
|
|
|
{ Ref(r); }
|
|
|
|
inline wxRegion& operator = ( const wxRegion& r )
|
|
|
|
{ Ref(r); return (*this); }
|
|
|
|
|
1998-11-26 11:11:46 -05:00
|
|
|
bool operator == ( const wxRegion& region );
|
|
|
|
bool operator != ( const wxRegion& region );
|
|
|
|
|
1999-10-06 14:11:57 -04:00
|
|
|
void Clear();
|
1998-05-20 10:01:55 -04:00
|
|
|
|
|
|
|
bool Union( long x, long y, long width, long height );
|
|
|
|
bool Union( const wxRect& rect );
|
|
|
|
bool Union( const wxRegion& region );
|
|
|
|
|
|
|
|
bool Intersect( long x, long y, long width, long height );
|
|
|
|
bool Intersect( const wxRect& rect );
|
|
|
|
bool Intersect( const wxRegion& region );
|
|
|
|
|
|
|
|
bool Subtract( long x, long y, long width, long height );
|
|
|
|
bool Subtract( const wxRect& rect );
|
|
|
|
bool Subtract( const wxRegion& region );
|
|
|
|
|
|
|
|
bool Xor( long x, long y, long width, long height );
|
|
|
|
bool Xor( const wxRect& rect );
|
|
|
|
bool Xor( const wxRegion& region );
|
|
|
|
|
|
|
|
void GetBox( long& x, long& y, long&w, long &h ) const;
|
1999-10-06 14:11:57 -04:00
|
|
|
wxRect GetBox() const ;
|
1998-05-20 10:01:55 -04:00
|
|
|
|
1999-10-06 14:11:57 -04:00
|
|
|
bool Empty() const;
|
|
|
|
bool IsEmpty() const { return Empty(); }
|
1998-05-20 10:01:55 -04:00
|
|
|
|
|
|
|
wxRegionContain Contains( long x, long y ) const;
|
|
|
|
wxRegionContain Contains( long x, long y, long w, long h ) const;
|
1998-09-02 13:53:48 -04:00
|
|
|
wxRegionContain Contains(const wxPoint& pt) const;
|
|
|
|
wxRegionContain Contains(const wxRect& rect) const;
|
1998-05-20 10:01:55 -04:00
|
|
|
|
|
|
|
public:
|
1998-09-02 13:53:48 -04:00
|
|
|
|
|
|
|
wxList *GetRectList() const;
|
1999-10-06 14:11:57 -04:00
|
|
|
GdkRegion *GetRegion() const;
|
1998-05-20 10:01:55 -04:00
|
|
|
};
|
|
|
|
|
1998-09-02 13:53:48 -04:00
|
|
|
class wxRegionIterator: public wxObject
|
|
|
|
{
|
1999-10-11 06:05:36 -04:00
|
|
|
public:
|
1999-10-06 14:11:57 -04:00
|
|
|
wxRegionIterator();
|
1998-09-02 13:53:48 -04:00
|
|
|
wxRegionIterator(const wxRegion& region);
|
|
|
|
|
1999-10-06 14:11:57 -04:00
|
|
|
void Reset() { m_current = 0; }
|
1998-09-02 13:53:48 -04:00
|
|
|
void Reset(const wxRegion& region);
|
|
|
|
|
1999-10-06 14:11:57 -04:00
|
|
|
operator bool () const;
|
|
|
|
bool HaveRects() const;
|
1998-09-02 13:53:48 -04:00
|
|
|
|
1999-10-06 14:11:57 -04:00
|
|
|
void operator ++ ();
|
1998-09-02 13:53:48 -04:00
|
|
|
void operator ++ (int);
|
|
|
|
|
1999-10-06 14:11:57 -04:00
|
|
|
long GetX() const;
|
|
|
|
long GetY() const;
|
|
|
|
long GetW() const;
|
|
|
|
long GetWidth() const { return GetW(); }
|
|
|
|
long GetH() const;
|
|
|
|
long GetHeight() const { return GetH(); }
|
1998-11-04 17:29:37 -05:00
|
|
|
wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); }
|
1998-09-02 13:53:48 -04:00
|
|
|
|
1999-10-11 06:05:36 -04:00
|
|
|
private:
|
|
|
|
long m_current;
|
|
|
|
wxRegion m_region;
|
|
|
|
|
|
|
|
private:
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxRegionIterator);
|
1998-09-02 13:53:48 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
1998-05-20 10:01:55 -04:00
|
|
|
#endif
|
|
|
|
// __REGIONH__
|