M_REGIONDATA->m_region = gdk_region_copy( region );
}
-wxRegion::wxRegion( size_t n, const wxPoint *points,
+wxRegion::wxRegion( size_t n, const wxPoint *points,
wxPolygonFillMode fillStyle )
{
GdkPoint *gdkpoints = new GdkPoint[n];
bool wxRegion::DoUnionWithRegion( const wxRegion& region )
{
- wxCHECK_MSG( region.Ok(), false, _T("invalid region") );
+ wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") );
if (!m_refData)
{
- m_refData = new wxRegionRefData();
- M_REGIONDATA->m_region = gdk_region_new();
+ m_refData = new wxRegionRefData(*M_REGIONDATA_OF(region));
}
else
{
AllocExclusive();
+ gdk_region_union( M_REGIONDATA->m_region, region.GetRegion() );
}
- gdk_region_union( M_REGIONDATA->m_region, region.GetRegion() );
-
return true;
}
bool wxRegion::DoIntersect( const wxRegion& region )
{
- wxCHECK_MSG( region.Ok(), false, _T("invalid region") );
+ wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") );
if (!m_refData)
{
bool wxRegion::DoSubtract( const wxRegion& region )
{
- wxCHECK_MSG( region.Ok(), false, _T("invalid region") );
+ wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") );
if (!m_refData)
{
bool wxRegion::DoXor( const wxRegion& region )
{
- wxCHECK_MSG( region.Ok(), false, _T("invalid region") );
+ wxCHECK_MSG( region.IsOk(), false, wxT("invalid region") );
if (!m_refData)
{
- return false;
+ // XOR-ing with an invalid region is the same as XOR-ing with an empty
+ // one, i.e. it is simply a copy.
+ m_refData = new wxRegionRefData(*M_REGIONDATA_OF(region));
}
+ else
+ {
+ AllocExclusive();
- AllocExclusive();
-
- gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() );
+ gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() );
+ }
return true;
}
bool wxRegion::DoOffset( wxCoord x, wxCoord y )
{
- if (!m_refData)
- return false;
+ wxCHECK_MSG( m_refData, false, wxS("invalid region") );
AllocExclusive();
wxCoord wxRegionIterator::GetX() const
{
- wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
+ wxCHECK_MSG( HaveRects(), 0, wxT("invalid wxRegionIterator") );
return m_rects[m_current].x;
}
wxCoord wxRegionIterator::GetY() const
{
- wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
+ wxCHECK_MSG( HaveRects(), 0, wxT("invalid wxRegionIterator") );
return m_rects[m_current].y;
}
wxCoord wxRegionIterator::GetW() const
{
- wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
+ wxCHECK_MSG( HaveRects(), 0, wxT("invalid wxRegionIterator") );
return m_rects[m_current].width;
}
wxCoord wxRegionIterator::GetH() const
{
- wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
+ wxCHECK_MSG( HaveRects(), 0, wxT("invalid wxRegionIterator") );
return m_rects[m_current].height;
}