#ifndef WX_PRECOMP
#include "wx/gdicmn.h"
+ #include "wx/dcmemory.h"
#endif
#include "wx/osx/private.h"
// wxRegion
//-----------------------------------------------------------------------------
-/*!
- * Create an empty region.
- */
-wxRegion::wxRegion()
-{
- m_refData = new wxRegionRefData();
-}
-
wxRegion::wxRegion(WXHRGN hRegion )
{
wxCFRef< HIShapeRef > shape( (HIShapeRef) hRegion );
wxRegion::wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight)
{
m_refData = new wxRegionRefData(topLeft.x , topLeft.y ,
- topLeft.x - bottomRight.x ,
- topLeft.y - bottomRight.y);
+ bottomRight.x - topLeft.x,
+ bottomRight.y - topLeft.y);
}
wxRegion::wxRegion(const wxRect& rect)
// Move the region
bool wxRegion::DoOffset(wxCoord x, wxCoord y)
{
- wxCHECK_MSG( M_REGION, false, wxT("invalid wxRegion") );
+ wxCHECK_MSG( m_refData, false, wxT("invalid wxRegion") );
if ( !x && !y )
// nothing to do
{
wxCHECK_MSG( region.IsOk(), false, wxT("invalid wxRegion") );
+ // Handle the special case of not initialized (e.g. default constructed)
+ // region as we can't use HIShape functions if we don't have any shape.
+ if ( !m_refData )
+ {
+ switch ( op )
+ {
+ case wxRGN_COPY:
+ case wxRGN_OR:
+ case wxRGN_XOR:
+ // These operations make sense with a null region.
+ *this = region;
+ return true;
+
+ case wxRGN_AND:
+ case wxRGN_DIFF:
+ // Those ones don't really make sense so just leave this region
+ // empty/invalid.
+ return false;
+ }
+
+ wxFAIL_MSG( wxT("Unknown region operation") );
+ return false;
+ }
+
AllocExclusive();
switch (op)