/////////////////////////////////////////////////////////////////////////////
// File: region.cpp
// Purpose: Region class
-// Author: Markus Holzem/Julian Smart
+// Author: Julian Smart
// Created: Fri Oct 24 10:46:34 MET 1997
-// RCS-ID: $Id$
-// Copyright: (c) 1997 Markus Holzem/Julian Smart
+// RCS-ID: $Id$
+// Copyright: (c) 1997 Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
void wxRegionRefData::SetRects(const wxRectList& rectList)
{
DeleteRects();
- m_usingRects = (rectList.Number() > 0);
+ m_usingRects = (rectList.GetCount() > 0);
if (m_usingRects)
{
- m_rectCount = rectList.Number();
+ m_rectCount = rectList.GetCount();
m_rects = new wxRect[m_rectCount];
}
{
}
-wxRegion::wxRegion(long x, long y, long w, long h)
+wxRegion::wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
{
m_refData = new wxRegionRefData;
}
//! Combine rectangle (x, y, w, h) with this.
-bool wxRegion::Combine(long x, long y, long width, long height, wxRegionOp op)
+bool
+wxRegion::Combine(wxCoord x, wxCoord y,
+ wxCoord width, wxCoord height,
+ wxRegionOp op)
{
+ // work around for XUnionRectWithRegion() bug: taking a union with an empty
+ // rect results in an empty region (at least XFree 3.3.6 and 4.0 have this
+ // problem)
+ if ( op == wxRGN_OR && (!width || !height) )
+ return TRUE;
+
// Don't change shared data
if (!m_refData) {
m_refData = new wxRegionRefData();
//-----------------------------------------------------------------------------
// Outer bounds of region
-void wxRegion::GetBox(long& x, long& y, long&w, long &h) const
+void wxRegion::GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const
{
if (m_refData) {
XRectangle rect;
wxRect wxRegion::GetBox() const
{
- long x, y, w, h;
+ wxCoord x, y, w, h;
GetBox(x, y, w, h);
return wxRect(x, y, w, h);
}
//-----------------------------------------------------------------------------
// Does the region contain the point (x,y)?
-wxRegionContain wxRegion::Contains(long WXUNUSED(x), long WXUNUSED(y)) const
+wxRegionContain wxRegion::Contains(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) const
{
if (!m_refData)
return wxOutRegion;
}
// Does the region contain the rectangle (x, y, w, h)?
-wxRegionContain wxRegion::Contains(long x, long y, long w, long h) const
+wxRegionContain wxRegion::Contains(wxCoord x, wxCoord y, wxCoord w, wxCoord h) const
{
if (!m_refData)
return wxOutRegion;
if (!m_refData)
return wxOutRegion;
- long x, y, w, h;
+ wxCoord x, y, w, h;
x = rect.x;
y = rect.y;
w = rect.GetWidth();
m_numRects = count;
m_rects = new wxRect[m_numRects];
- int i = 0;
- for (i = 0; i < m_numRects; i++)
+ for (size_t i = 0; i < m_numRects; i++)
m_rects[i] = rects[i];
/*
++m_current;
}
-long wxRegionIterator::GetX() const
+wxCoord wxRegionIterator::GetX() const
{
if (m_current < m_numRects)
return m_rects[m_current].x;
return 0;
}
-long wxRegionIterator::GetY() const
+wxCoord wxRegionIterator::GetY() const
{
if (m_current < m_numRects)
return m_rects[m_current].y;
return 0;
}
-long wxRegionIterator::GetW() const
+wxCoord wxRegionIterator::GetW() const
{
if (m_current < m_numRects)
return m_rects[m_current].width ;
return 0;
}
-long wxRegionIterator::GetH() const
+wxCoord wxRegionIterator::GetH() const
{
if (m_current < m_numRects)
return m_rects[m_current].height;