The Great wxRegion Refactoring:
1. added wxRegionBase class and derive all wxRegions from it 2. also added wxRegionWithCombine for the ports providing Combine() method (MSW, OS2 and Mac) to reduce code duplication further 3. made sure region comparison works the same way in all ports (except those not implementing it) and added IsEqual() method git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41429 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -10,28 +10,11 @@
|
||||
#ifndef _WX_GTK_REGION_H_
|
||||
#define _WX_GTK_REGION_H_
|
||||
|
||||
#include "wx/gdiobj.h"
|
||||
#include "wx/gdicmn.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// constants
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// 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 WXDLLIMPEXP_CORE wxRegion : public wxGDIObject
|
||||
class WXDLLIMPEXP_CORE wxRegion : public wxRegionBase
|
||||
{
|
||||
public:
|
||||
wxRegion() { }
|
||||
@@ -66,55 +49,9 @@ public:
|
||||
|
||||
virtual ~wxRegion();
|
||||
|
||||
bool Ok() const { return m_refData != NULL; }
|
||||
|
||||
bool operator == ( const wxRegion& region ) const;
|
||||
bool operator != ( const wxRegion& region ) const { return !(*this == region); }
|
||||
|
||||
void Clear();
|
||||
|
||||
bool Offset( wxCoord x, wxCoord y );
|
||||
|
||||
bool Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
||||
bool Union( const wxRect& rect );
|
||||
bool Union( const wxRegion& region );
|
||||
|
||||
bool Intersect( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
||||
bool Intersect( const wxRect& rect );
|
||||
bool Intersect( const wxRegion& region );
|
||||
|
||||
bool Subtract( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
||||
bool Subtract( const wxRect& rect );
|
||||
bool Subtract( const wxRegion& region );
|
||||
|
||||
bool Xor( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
|
||||
bool Xor( const wxRect& rect );
|
||||
bool Xor( const wxRegion& region );
|
||||
|
||||
void GetBox( wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h ) const;
|
||||
wxRect GetBox() const ;
|
||||
|
||||
bool Empty() const;
|
||||
bool IsEmpty() const { return Empty(); }
|
||||
|
||||
wxRegionContain Contains( wxCoord x, wxCoord y ) const;
|
||||
wxRegionContain Contains( wxCoord x, wxCoord y, wxCoord w, wxCoord h ) const;
|
||||
wxRegionContain Contains(const wxPoint& pt) const;
|
||||
wxRegionContain Contains(const wxRect& rect) const;
|
||||
|
||||
// Convert the region to a B&W bitmap with the white pixels being inside
|
||||
// the region.
|
||||
wxBitmap ConvertToBitmap() const;
|
||||
|
||||
// Use the non-transparent pixels of a wxBitmap for the region to combine
|
||||
// with this region. First version takes transparency from bitmap's mask,
|
||||
// second lets the user specify the colour to be treated as transparent
|
||||
// along with an optional tolerance value.
|
||||
// NOTE: implemented in common/rgncmn.cpp
|
||||
bool Union(const wxBitmap& bmp);
|
||||
bool Union(const wxBitmap& bmp,
|
||||
const wxColour& transColour, int tolerance = 0);
|
||||
|
||||
// wxRegionBase methods
|
||||
virtual void Clear();
|
||||
virtual bool IsEmpty() const;
|
||||
|
||||
public:
|
||||
// Init with GdkRegion, set ref count to 2 so that
|
||||
@@ -128,6 +65,19 @@ protected:
|
||||
virtual wxObjectRefData *CreateRefData() const;
|
||||
virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
|
||||
|
||||
// wxRegionBase pure virtuals
|
||||
virtual bool DoIsEqual(const wxRegion& region) const;
|
||||
virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const;
|
||||
virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const;
|
||||
virtual wxRegionContain DoContainsRect(const wxRect& rect) const;
|
||||
|
||||
virtual bool DoOffset(wxCoord x, wxCoord y);
|
||||
virtual bool DoUnionWithRect(const wxRect& rect);
|
||||
virtual bool DoUnionWithRegion(const wxRegion& region);
|
||||
virtual bool DoIntersect(const wxRegion& region);
|
||||
virtual bool DoSubtract(const wxRegion& region);
|
||||
virtual bool DoXor(const wxRegion& region);
|
||||
|
||||
// common part of ctors for a rectangle region
|
||||
void InitRect(wxCoord x, wxCoord y, wxCoord w, wxCoord h);
|
||||
|
||||
|
Reference in New Issue
Block a user