// wxRegionRefData: private class containing the information about the region
// ----------------------------------------------------------------------------
-class wxRegionRefData : public wxObjectRefData
+class wxRegionRefData : public wxGDIRefData
{
public:
wxRegionRefData()
}
wxRegionRefData(const wxRegionRefData& refData)
- : wxObjectRefData()
+ : wxGDIRefData()
{
m_region = gdk_region_copy(refData.m_region);
}
// 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);
}
// wxRegionIterator
// ----------------------------------------------------------------------------
-class wxRIRefData: public wxObjectRefData
+wxRegionIterator::wxRegionIterator()
{
-public:
- wxRIRefData() { Init(); }
- virtual ~wxRIRefData();
-
- void CreateRects( const wxRegion& r );
-
- void Init() { m_rects = NULL; m_numRects = 0; }
+ Init();
+ Reset();
+}
- wxRect *m_rects;
- size_t m_numRects;
-};
+wxRegionIterator::wxRegionIterator( const wxRegion& region )
+{
+ Init();
+ Reset(region);
+}
-wxRIRefData::~wxRIRefData()
+void wxRegionIterator::Init()
{
- delete [] m_rects;
+ m_rects = NULL;
+ m_numRects = 0;
}
-void wxRIRefData::CreateRects( const wxRegion& region )
+wxRegionIterator::~wxRegionIterator()
{
- delete [] m_rects;
+ wxDELETEA(m_rects);
+}
- Init();
+void wxRegionIterator::CreateRects( const wxRegion& region )
+{
+ wxDELETEA(m_rects);
+ m_numRects = 0;
GdkRegion *gdkregion = region.GetRegion();
if (!gdkregion)
g_free( gdkrects );
}
-wxRegionIterator::wxRegionIterator()
-{
- m_refData = new wxRIRefData();
- Reset();
-}
-
-wxRegionIterator::wxRegionIterator( const wxRegion& region )
-{
- m_refData = new wxRIRefData();
- Reset(region);
-}
-
void wxRegionIterator::Reset( const wxRegion& region )
{
m_region = region;
- ((wxRIRefData*)m_refData)->CreateRects(region);
+ CreateRects(region);
Reset();
}
bool wxRegionIterator::HaveRects() const
{
- return m_current < ((wxRIRefData*)m_refData)->m_numRects;
+ return m_current < m_numRects;
}
wxRegionIterator& wxRegionIterator::operator ++ ()
wxRegionIterator wxRegionIterator::operator ++ (int)
{
wxRegionIterator tmp = *this;
+
if (HaveRects())
++m_current;
{
wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
- return ((wxRIRefData*)m_refData)->m_rects[m_current].x;
+ return m_rects[m_current].x;
}
wxCoord wxRegionIterator::GetY() const
{
wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
- return ((wxRIRefData*)m_refData)->m_rects[m_current].y;
+ return m_rects[m_current].y;
}
wxCoord wxRegionIterator::GetW() const
{
wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
- return ((wxRIRefData*)m_refData)->m_rects[m_current].width;
+ return m_rects[m_current].width;
}
wxCoord wxRegionIterator::GetH() const
{
wxCHECK_MSG( HaveRects(), 0, _T("invalid wxRegionIterator") );
- return ((wxRIRefData*)m_refData)->m_rects[m_current].height;
+ return m_rects[m_current].height;
}
wxRect wxRegionIterator::GetRect() const
{
wxRect r;
if( HaveRects() )
- r = ((wxRIRefData*)m_refData)->m_rects[m_current];
+ r = m_rects[m_current];
return r;
}
+
+wxRegionIterator& wxRegionIterator::operator=(const wxRegionIterator& ri)
+{
+ wxDELETEA(m_rects);
+
+ m_current = ri.m_current;
+ m_numRects = ri.m_numRects;
+ if ( m_numRects )
+ {
+ m_rects = new wxRect[m_numRects];
+ for ( unsigned int n = 0; n < m_numRects; n++ )
+ m_rects[n] = ri.m_rects[n];
+ }
+ else
+ {
+ m_rects = NULL;
+ }
+
+ return *this;
+}