fixed operator++() for wxRegioIterator in wxGTK too

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17315 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-09-21 10:38:36 +00:00
parent b8595cfb2a
commit 3f4d464b9b
4 changed files with 106 additions and 124 deletions

View File

@@ -146,11 +146,11 @@ public:
void Reset() { m_current = 0u; } void Reset() { m_current = 0u; }
void Reset(const wxRegion& region); void Reset(const wxRegion& region);
operator bool () const;
bool HaveRects() const; bool HaveRects() const;
operator bool () const { return HaveRects(); }
void operator ++ (); wxRegionIterator& operator ++ ();
void operator ++ (int); wxRegionIterator operator ++ (int);
wxCoord GetX() const; wxCoord GetX() const;
wxCoord GetY() const; wxCoord GetY() const;

View File

@@ -146,11 +146,11 @@ public:
void Reset() { m_current = 0u; } void Reset() { m_current = 0u; }
void Reset(const wxRegion& region); void Reset(const wxRegion& region);
operator bool () const;
bool HaveRects() const; bool HaveRects() const;
operator bool () const { return HaveRects(); }
void operator ++ (); wxRegionIterator& operator ++ ();
void operator ++ (int); wxRegionIterator operator ++ (int);
wxCoord GetX() const; wxCoord GetX() const;
wxCoord GetY() const; wxCoord GetY() const;

View File

@@ -191,25 +191,20 @@ bool wxRegion::Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
if ( !width || !height ) if ( !width || !height )
return TRUE; return TRUE;
if ( !m_refData )
{
InitRect(x, y, width, height);
}
else
{
AllocExclusive();
GdkRectangle rect; GdkRectangle rect;
rect.x = x; rect.x = x;
rect.y = y; rect.y = y;
rect.width = width; rect.width = width;
rect.height = height; rect.height = height;
if (!m_refData)
{
m_refData = new wxRegionRefData();
#ifdef __WXGTK20__
M_REGIONDATA->m_region = gdk_region_rectangle( &rect );
#else
M_REGIONDATA->m_region = gdk_region_union_with_rect(wxGdkRegion(), &rect);
#endif
}
else
{
AllocExclusive();
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_union_with_rect( M_REGIONDATA->m_region, &rect ); gdk_region_union_with_rect( M_REGIONDATA->m_region, &rect );
#else #else
@@ -274,16 +269,11 @@ bool wxRegion::Intersect( const wxRegion& region )
if (!m_refData) if (!m_refData)
{ {
m_refData = new wxRegionRefData(); // intersecting with invalid region doesn't make sense
M_REGIONDATA->m_region = gdk_region_new(); return FALSE;
}
// leave here
return TRUE;
}
else
{
AllocExclusive(); AllocExclusive();
}
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_intersect( M_REGIONDATA->m_region, region.GetRegion() ); gdk_region_intersect( M_REGIONDATA->m_region, region.GetRegion() );
@@ -315,13 +305,11 @@ bool wxRegion::Subtract( const wxRegion& region )
if (!m_refData) if (!m_refData)
{ {
m_refData = new wxRegionRefData(); // subtracting from an invalid region doesn't make sense
M_REGIONDATA->m_region = gdk_region_new(); return FALSE;
} }
else
{
AllocExclusive(); AllocExclusive();
}
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_subtract( M_REGIONDATA->m_region, region.GetRegion() ); gdk_region_subtract( M_REGIONDATA->m_region, region.GetRegion() );
@@ -353,13 +341,10 @@ bool wxRegion::Xor( const wxRegion& region )
if (!m_refData) if (!m_refData)
{ {
m_refData = new wxRegionRefData(); return FALSE;
M_REGIONDATA->m_region = gdk_region_new();
} }
else
{
AllocExclusive(); AllocExclusive();
}
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() ); gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() );
@@ -372,6 +357,18 @@ bool wxRegion::Xor( const wxRegion& region )
return TRUE; return TRUE;
} }
bool wxRegion::Offset( wxCoord x, wxCoord y )
{
if (!m_refData)
return FALSE;
AllocExclusive();
gdk_region_offset( M_REGIONDATA->m_region, x, y );
return TRUE;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxRegion tests // wxRegion tests
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -403,18 +400,6 @@ wxRect wxRegion::GetBox() const
return wxRect( x, y, w, h ); return wxRect( x, y, w, h );
} }
bool wxRegion::Offset( wxCoord x, wxCoord y )
{
if (!m_refData)
return FALSE;
AllocExclusive();
gdk_region_offset( M_REGIONDATA->m_region, x, y );
return TRUE;
}
bool wxRegion::Empty() const bool wxRegion::Empty() const
{ {
if (!m_refData) if (!m_refData)
@@ -495,7 +480,7 @@ struct _XRegion {
_XBox *rects, extents; _XBox *rects, extents;
}; };
#endif #endif // GTK+ 1.x
class wxRIRefData: public wxObjectRefData class wxRIRefData: public wxObjectRefData
{ {
@@ -592,42 +577,48 @@ bool wxRegionIterator::HaveRects() const
return m_current < ((wxRIRefData*)m_refData)->m_numRects; return m_current < ((wxRIRefData*)m_refData)->m_numRects;
} }
wxRegionIterator::operator bool () const wxRegionIterator& wxRegionIterator::operator ++ ()
{ {
return HaveRects(); if (HaveRects())
++m_current;
return *this;
} }
void wxRegionIterator::operator ++ () wxRegionIterator wxRegionIterator::operator ++ (int)
{ {
if (HaveRects()) ++m_current; wxRegionIterator tmp = *this;
} if (HaveRects())
++m_current;
void wxRegionIterator::operator ++ (int) return tmp;
{
if (HaveRects()) ++m_current;
} }
wxCoord wxRegionIterator::GetX() const wxCoord wxRegionIterator::GetX() const
{ {
if( !HaveRects() ) return 0; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].x; return ((wxRIRefData*)m_refData)->m_rects[m_current].x;
} }
wxCoord wxRegionIterator::GetY() const wxCoord wxRegionIterator::GetY() const
{ {
if( !HaveRects() ) return 0; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].y; return ((wxRIRefData*)m_refData)->m_rects[m_current].y;
} }
wxCoord wxRegionIterator::GetW() const wxCoord wxRegionIterator::GetW() const
{ {
if( !HaveRects() ) return -1; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].width; return ((wxRIRefData*)m_refData)->m_rects[m_current].width;
} }
wxCoord wxRegionIterator::GetH() const wxCoord wxRegionIterator::GetH() const
{ {
if( !HaveRects() ) return -1; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].height; return ((wxRIRefData*)m_refData)->m_rects[m_current].height;
} }

View File

@@ -191,25 +191,20 @@ bool wxRegion::Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
if ( !width || !height ) if ( !width || !height )
return TRUE; return TRUE;
if ( !m_refData )
{
InitRect(x, y, width, height);
}
else
{
AllocExclusive();
GdkRectangle rect; GdkRectangle rect;
rect.x = x; rect.x = x;
rect.y = y; rect.y = y;
rect.width = width; rect.width = width;
rect.height = height; rect.height = height;
if (!m_refData)
{
m_refData = new wxRegionRefData();
#ifdef __WXGTK20__
M_REGIONDATA->m_region = gdk_region_rectangle( &rect );
#else
M_REGIONDATA->m_region = gdk_region_union_with_rect(wxGdkRegion(), &rect);
#endif
}
else
{
AllocExclusive();
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_union_with_rect( M_REGIONDATA->m_region, &rect ); gdk_region_union_with_rect( M_REGIONDATA->m_region, &rect );
#else #else
@@ -274,16 +269,11 @@ bool wxRegion::Intersect( const wxRegion& region )
if (!m_refData) if (!m_refData)
{ {
m_refData = new wxRegionRefData(); // intersecting with invalid region doesn't make sense
M_REGIONDATA->m_region = gdk_region_new(); return FALSE;
}
// leave here
return TRUE;
}
else
{
AllocExclusive(); AllocExclusive();
}
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_intersect( M_REGIONDATA->m_region, region.GetRegion() ); gdk_region_intersect( M_REGIONDATA->m_region, region.GetRegion() );
@@ -315,13 +305,11 @@ bool wxRegion::Subtract( const wxRegion& region )
if (!m_refData) if (!m_refData)
{ {
m_refData = new wxRegionRefData(); // subtracting from an invalid region doesn't make sense
M_REGIONDATA->m_region = gdk_region_new(); return FALSE;
} }
else
{
AllocExclusive(); AllocExclusive();
}
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_subtract( M_REGIONDATA->m_region, region.GetRegion() ); gdk_region_subtract( M_REGIONDATA->m_region, region.GetRegion() );
@@ -353,13 +341,10 @@ bool wxRegion::Xor( const wxRegion& region )
if (!m_refData) if (!m_refData)
{ {
m_refData = new wxRegionRefData(); return FALSE;
M_REGIONDATA->m_region = gdk_region_new();
} }
else
{
AllocExclusive(); AllocExclusive();
}
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() ); gdk_region_xor( M_REGIONDATA->m_region, region.GetRegion() );
@@ -372,6 +357,18 @@ bool wxRegion::Xor( const wxRegion& region )
return TRUE; return TRUE;
} }
bool wxRegion::Offset( wxCoord x, wxCoord y )
{
if (!m_refData)
return FALSE;
AllocExclusive();
gdk_region_offset( M_REGIONDATA->m_region, x, y );
return TRUE;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxRegion tests // wxRegion tests
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -403,18 +400,6 @@ wxRect wxRegion::GetBox() const
return wxRect( x, y, w, h ); return wxRect( x, y, w, h );
} }
bool wxRegion::Offset( wxCoord x, wxCoord y )
{
if (!m_refData)
return FALSE;
AllocExclusive();
gdk_region_offset( M_REGIONDATA->m_region, x, y );
return TRUE;
}
bool wxRegion::Empty() const bool wxRegion::Empty() const
{ {
if (!m_refData) if (!m_refData)
@@ -495,7 +480,7 @@ struct _XRegion {
_XBox *rects, extents; _XBox *rects, extents;
}; };
#endif #endif // GTK+ 1.x
class wxRIRefData: public wxObjectRefData class wxRIRefData: public wxObjectRefData
{ {
@@ -592,42 +577,48 @@ bool wxRegionIterator::HaveRects() const
return m_current < ((wxRIRefData*)m_refData)->m_numRects; return m_current < ((wxRIRefData*)m_refData)->m_numRects;
} }
wxRegionIterator::operator bool () const wxRegionIterator& wxRegionIterator::operator ++ ()
{ {
return HaveRects(); if (HaveRects())
++m_current;
return *this;
} }
void wxRegionIterator::operator ++ () wxRegionIterator wxRegionIterator::operator ++ (int)
{ {
if (HaveRects()) ++m_current; wxRegionIterator tmp = *this;
} if (HaveRects())
++m_current;
void wxRegionIterator::operator ++ (int) return tmp;
{
if (HaveRects()) ++m_current;
} }
wxCoord wxRegionIterator::GetX() const wxCoord wxRegionIterator::GetX() const
{ {
if( !HaveRects() ) return 0; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].x; return ((wxRIRefData*)m_refData)->m_rects[m_current].x;
} }
wxCoord wxRegionIterator::GetY() const wxCoord wxRegionIterator::GetY() const
{ {
if( !HaveRects() ) return 0; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].y; return ((wxRIRefData*)m_refData)->m_rects[m_current].y;
} }
wxCoord wxRegionIterator::GetW() const wxCoord wxRegionIterator::GetW() const
{ {
if( !HaveRects() ) return -1; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].width; return ((wxRIRefData*)m_refData)->m_rects[m_current].width;
} }
wxCoord wxRegionIterator::GetH() const wxCoord wxRegionIterator::GetH() const
{ {
if( !HaveRects() ) return -1; wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
return ((wxRIRefData*)m_refData)->m_rects[m_current].height; return ((wxRIRefData*)m_refData)->m_rects[m_current].height;
} }