#endif
// #include "wx/motif/private.h"
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject)
IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject)
-#endif
// ----------------------------------------------------------------------------
// list types
{
}
-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;