1998-05-20 14:01:55 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
2000-01-05 15:16:57 +00:00
|
|
|
// Name: wx/gtk/region.h
|
1998-05-20 14:01:55 +00:00
|
|
|
// Purpose:
|
|
|
|
// Author: Robert Roebling
|
1998-10-29 18:03:18 +00:00
|
|
|
// Id: $Id$
|
|
|
|
// Copyright: (c) 1998 Robert Roebling
|
2000-01-05 15:16:57 +00:00
|
|
|
// Licence: wxWindows licence
|
1998-05-20 14:01:55 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
#ifndef _WX_GTK_REGION_H_
|
|
|
|
#define _WX_GTK_REGION_H_
|
1998-05-20 14:01:55 +00:00
|
|
|
|
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma interface
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "wx/list.h"
|
|
|
|
#include "wx/gdiobj.h"
|
|
|
|
#include "wx/gdicmn.h"
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// classes
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class wxRegion;
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// constants
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
enum wxRegionContain
|
1998-05-20 14:01:55 +00:00
|
|
|
{
|
2001-06-26 20:59:19 +00:00
|
|
|
wxOutRegion = 0,
|
|
|
|
wxPartRegion = 1,
|
2000-03-04 16:23:26 +00:00
|
|
|
wxInRegion = 2
|
1998-05-20 14:01:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// So far, for internal use only
|
2001-06-26 20:59:19 +00:00
|
|
|
enum wxRegionOp
|
2000-03-04 16:23:26 +00:00
|
|
|
{
|
|
|
|
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.
|
1998-05-20 14:01:55 +00:00
|
|
|
};
|
|
|
|
|
2001-06-26 20:59:19 +00:00
|
|
|
// ----------------------------------------------------------------------------
|
1998-05-20 14:01:55 +00:00
|
|
|
// wxRegion
|
2001-06-26 20:59:19 +00:00
|
|
|
// ----------------------------------------------------------------------------
|
1998-05-20 14:01:55 +00:00
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
class wxRegion : public wxGDIObject
|
1998-05-20 14:01:55 +00:00
|
|
|
{
|
2000-03-04 16:23:26 +00:00
|
|
|
public:
|
2001-08-27 14:56:55 +00:00
|
|
|
wxRegion();
|
2000-01-05 15:16:57 +00:00
|
|
|
wxRegion( wxCoord x, wxCoord y, wxCoord w, wxCoord h );
|
1998-05-20 14:01:55 +00:00
|
|
|
wxRegion( const wxPoint& topLeft, const wxPoint& bottomRight );
|
|
|
|
wxRegion( const wxRect& rect );
|
2001-08-27 14:56:55 +00:00
|
|
|
wxRegion(size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE );
|
2001-06-26 20:59:19 +00:00
|
|
|
virtual ~wxRegion();
|
1998-05-20 14:01:55 +00:00
|
|
|
|
2001-06-26 20:59:19 +00:00
|
|
|
wxRegion( const wxRegion& r ) { Ref(r); }
|
|
|
|
wxRegion& operator = ( const wxRegion& r ) { Ref(r); return *this; }
|
1998-05-20 14:01:55 +00:00
|
|
|
|
1998-11-26 16:11:46 +00:00
|
|
|
bool operator == ( const wxRegion& region );
|
|
|
|
bool operator != ( const wxRegion& region );
|
2000-01-05 15:16:57 +00:00
|
|
|
|
1999-10-06 18:11:57 +00:00
|
|
|
void Clear();
|
1998-05-20 14:01:55 +00:00
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
bool Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
1998-05-20 14:01:55 +00:00
|
|
|
bool Union( const wxRect& rect );
|
|
|
|
bool Union( const wxRegion& region );
|
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
bool Intersect( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
1998-05-20 14:01:55 +00:00
|
|
|
bool Intersect( const wxRect& rect );
|
|
|
|
bool Intersect( const wxRegion& region );
|
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
bool Subtract( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
1998-05-20 14:01:55 +00:00
|
|
|
bool Subtract( const wxRect& rect );
|
|
|
|
bool Subtract( const wxRegion& region );
|
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
bool Xor( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
1998-05-20 14:01:55 +00:00
|
|
|
bool Xor( const wxRect& rect );
|
|
|
|
bool Xor( const wxRegion& region );
|
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
void GetBox( wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h ) const;
|
1999-10-06 18:11:57 +00:00
|
|
|
wxRect GetBox() const ;
|
1998-05-20 14:01:55 +00:00
|
|
|
|
1999-10-06 18:11:57 +00:00
|
|
|
bool Empty() const;
|
|
|
|
bool IsEmpty() const { return Empty(); }
|
1998-05-20 14:01:55 +00:00
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
wxRegionContain Contains( wxCoord x, wxCoord y ) const;
|
|
|
|
wxRegionContain Contains( wxCoord x, wxCoord y, wxCoord w, wxCoord h ) const;
|
1998-09-02 17:53:48 +00:00
|
|
|
wxRegionContain Contains(const wxPoint& pt) const;
|
|
|
|
wxRegionContain Contains(const wxRect& rect) const;
|
2000-01-05 15:16:57 +00:00
|
|
|
|
2000-03-04 16:23:26 +00:00
|
|
|
public:
|
2000-01-05 15:16:57 +00:00
|
|
|
wxList *GetRectList() const;
|
1999-10-06 18:11:57 +00:00
|
|
|
GdkRegion *GetRegion() const;
|
2001-06-26 20:59:19 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
// helper of Intersect()
|
|
|
|
bool IntersectRegionOnly(const wxRegion& reg);
|
|
|
|
|
|
|
|
// call this before modifying the region
|
|
|
|
void Unshare();
|
|
|
|
|
2000-03-04 16:23:26 +00:00
|
|
|
private:
|
2001-06-26 20:59:19 +00:00
|
|
|
DECLARE_DYNAMIC_CLASS(wxRegion);
|
1998-05-20 14:01:55 +00:00
|
|
|
};
|
|
|
|
|
2001-06-26 20:59:19 +00:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxRegionIterator: decomposes a region into rectangles
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
2000-01-05 15:16:57 +00:00
|
|
|
class wxRegionIterator: public wxObject
|
1998-09-02 17:53:48 +00:00
|
|
|
{
|
1999-10-11 10:05:36 +00:00
|
|
|
public:
|
1999-10-06 18:11:57 +00:00
|
|
|
wxRegionIterator();
|
1998-09-02 17:53:48 +00:00
|
|
|
wxRegionIterator(const wxRegion& region);
|
|
|
|
|
2000-01-06 15:42:32 +00:00
|
|
|
void Reset() { m_current = 0u; }
|
1998-09-02 17:53:48 +00:00
|
|
|
void Reset(const wxRegion& region);
|
|
|
|
|
1999-10-06 18:11:57 +00:00
|
|
|
operator bool () const;
|
|
|
|
bool HaveRects() const;
|
1998-09-02 17:53:48 +00:00
|
|
|
|
1999-10-06 18:11:57 +00:00
|
|
|
void operator ++ ();
|
1998-09-02 17:53:48 +00:00
|
|
|
void operator ++ (int);
|
|
|
|
|
1999-11-02 18:41:23 +00:00
|
|
|
wxCoord GetX() const;
|
|
|
|
wxCoord GetY() const;
|
|
|
|
wxCoord GetW() const;
|
|
|
|
wxCoord GetWidth() const { return GetW(); }
|
|
|
|
wxCoord GetH() const;
|
|
|
|
wxCoord GetHeight() const { return GetH(); }
|
2001-06-26 20:59:19 +00:00
|
|
|
wxRect GetRect() const;
|
1998-09-02 17:53:48 +00:00
|
|
|
|
1999-10-11 10:05:36 +00:00
|
|
|
private:
|
2000-01-06 15:42:32 +00:00
|
|
|
size_t m_current;
|
|
|
|
wxRegion m_region;
|
1999-10-11 10:05:36 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxRegionIterator);
|
1998-09-02 17:53:48 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
1998-05-20 14:01:55 +00:00
|
|
|
#endif
|
2000-01-05 15:16:57 +00:00
|
|
|
// _WX_GTK_REGION_H_
|