/////////////////////////////////////////////////////////////////////////////
-// Name: region.cpp
+// Name: src/mgl/region.cpp
// Purpose: Region handling for wxWidgets/MGL
// Author: Vaclav Slavik
// RCS-ID: $Id$
}
wxRegion::wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
-{
+{
m_refData = new wxRegionRefData;
MGLRect rect(x, y, x + w, y + h);
M_REGION = rect;
// Outer bounds of region
void wxRegion::GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const
{
- if (m_refData)
+ if (m_refData)
{
rect_t rect;
rect = M_REGION.getBounds();
y = rect.top;
w = rect.right - rect.left;
h = rect.bottom - rect.top;
- }
- else
+ }
+ else
{
x = y = w = h = 0;
}
// Is region empty?
bool wxRegion::Empty() const
{
- if (!m_refData) return TRUE;
- return M_REGION.isEmpty();
+ if (!m_refData)
+ return true;
+
+ return (bool)(M_REGION.isEmpty());
}
//-----------------------------------------------------------------------------
{
AllocExclusive();
M_REGION.offset(x, y);
- return TRUE;
+ return true;
}
// Union rectangle or region with this.
{
AllocExclusive();
M_REGION += MGLRect(x, y, x + width, y + height);
- return TRUE;
+ return true;
}
bool wxRegion::Union(const wxRegion& region)
{
AllocExclusive();
M_REGION += M_REGION_OF(region);
- return TRUE;
+ return true;
}
// Intersect rectangle or region with this.
{
AllocExclusive();
M_REGION &= MGLRect(x, y, x + width, y + height);
- return TRUE;
+ return true;
}
bool wxRegion::Intersect(const wxRegion& region)
{
AllocExclusive();
M_REGION &= M_REGION_OF(region);
- return TRUE;
+ return true;
}
// Subtract rectangle or region from this:
{
AllocExclusive();
M_REGION -= MGLRect(x, y, x + width, y + height);
- return TRUE;
+ return true;
}
bool wxRegion::Subtract(const wxRegion& region)
{
AllocExclusive();
M_REGION -= M_REGION_OF(region);
- return TRUE;
+ return true;
}
// XOR: the union of two combined regions except for any overlapping areas.
MGLRegion rg1 = M_REGION + rect,
rg2 = M_REGION & rect;
M_REGION = rg1 - rg2;
- return TRUE;
+ return true;
}
bool wxRegion::Xor(const wxRegion& region)
MGLRegion rg1 = M_REGION + M_REGION_OF(region),
rg2 = M_REGION & M_REGION_OF(region);
M_REGION = rg1 - rg2;
- return TRUE;
+ return true;
}
MGLRect rect(x, y, x + w, y + h);
MGLRegion rg;
-
+
// 1) is the rectangle entirely covered by the region?
rg = MGLRegion(rect) - M_REGION;
if (rg.isEmpty()) return wxInRegion;
-
+
// 2) is the rectangle completely outside the region?
rg = M_REGION & rect; // intersection
if (rg.isEmpty()) return wxOutRegion;
virtual bool OnInit()
{
gs_mutexIterator = new wxMutex();
- return TRUE;
+ return true;
}
virtual void OnExit()
{
*/
wxRegionIterator::wxRegionIterator() : m_currentNode(NULL)
{
- m_rects.DeleteContents(TRUE);
+ m_rects.DeleteContents(true);
}
wxRegionIterator::~wxRegionIterator()
*/
wxRegionIterator::wxRegionIterator(const wxRegion& region)
{
- m_rects.DeleteContents(TRUE);
+ m_rects.DeleteContents(true);
Reset(region);
}
/*
* Reset iterator for a new /e region.
*/
-
+
static wxRegionRectList *gs_rectList;
static void MGLAPI wxMGL_region_callback(const rect_t *r)
{
- gs_rectList->Append(new wxRect(r->left, r->top,
+ gs_rectList->Append(new wxRect(r->left, r->top,
r->right - r->left, r->bottom - r->top));
}
-
+
void wxRegionIterator::Reset(const wxRegion& region)
{
m_currentNode = NULL;
if (!region.Empty())
{
#if wxUSE_THREADS
- wxMutexLocker(*gs_mutexIterator);
+ wxMutexLocker lock(*gs_mutexIterator);
#endif
gs_rectList = &m_rects;
M_REGION_OF(region).traverse(wxMGL_region_callback);