X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4322df68b099e5e983acc0a3dad4ad5841b57b5..f72ed385786eccca7a73cbace9bae975e3a2ae21:/src/gtk/region.cpp diff --git a/src/gtk/region.cpp b/src/gtk/region.cpp index 964ae16316..cf1d5d363b 100644 --- a/src/gtk/region.cpp +++ b/src/gtk/region.cpp @@ -32,7 +32,7 @@ // wxRegionRefData: private class containing the information about the region // ---------------------------------------------------------------------------- -class wxRegionRefData : public wxObjectRefData +class wxRegionRefData : public wxGDIRefData { public: wxRegionRefData() @@ -41,7 +41,7 @@ public: } wxRegionRefData(const wxRegionRefData& refData) - : wxObjectRefData() + : wxGDIRefData() { m_region = gdk_region_copy(refData.m_region); } @@ -90,7 +90,8 @@ wxRegion::wxRegion( GdkRegion *region ) M_REGIONDATA->m_region = gdk_region_copy( region ); } -wxRegion::wxRegion( size_t n, const wxPoint *points, int fillStyle ) +wxRegion::wxRegion( size_t n, const wxPoint *points, + wxPolygonFillMode fillStyle ) { GdkPoint *gdkpoints = new GdkPoint[n]; for ( size_t i = 0 ; i < n ; i++ ) @@ -119,12 +120,12 @@ wxRegion::~wxRegion() // m_refData unrefed in ~wxObject } -wxObjectRefData *wxRegion::CreateRefData() const +wxGDIRefData *wxRegion::CreateGDIRefData() const { return new wxRegionRefData; } -wxObjectRefData *wxRegion::CloneRefData(const wxObjectRefData *data) const +wxGDIRefData *wxRegion::CloneGDIRefData(const wxGDIRefData *data) const { return new wxRegionRefData(*(wxRegionRefData *)data); } @@ -178,26 +179,24 @@ bool wxRegion::DoUnionWithRect(const wxRect& r) 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) { @@ -214,7 +213,7 @@ bool wxRegion::DoIntersect( const wxRegion& region ) 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) { @@ -231,24 +230,27 @@ bool wxRegion::DoSubtract( const wxRegion& region ) 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(); @@ -327,7 +329,7 @@ wxRegionContain wxRegion::DoContainsRect(const wxRect& r) const GdkRegion *wxRegion::GetRegion() const { if (!m_refData) - return (GdkRegion*) NULL; + return NULL; return M_REGIONDATA->m_region; } @@ -421,28 +423,28 @@ wxRegionIterator wxRegionIterator::operator ++ (int) 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; }