]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/region.cpp
include stddef.h to get ptrdiff_t decl (IRIX compilation problem)
[wxWidgets.git] / src / motif / region.cpp
index 1bc220fc30813f88feccecca90f0cf8ac4c804c2..1bec3f26ceaf7892ce1ee4ce8daefaf8180de912 100644 (file)
 #endif
 // #include "wx/motif/private.h"
 
 #endif
 // #include "wx/motif/private.h"
 
-#if !USE_SHARED_LIBRARY
     IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject)
     IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject)
     IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject)
     IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject)
-#endif
 
 // ----------------------------------------------------------------------------
 // list types
 
 // ----------------------------------------------------------------------------
 // list types
@@ -139,7 +137,7 @@ wxRegion::wxRegion()
 {
 }
 
 {
 }
 
-wxRegion::wxRegion(long x, long y, long w, long h)
+wxRegion::wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
 {
     m_refData = new wxRegionRefData;
 
 {
     m_refData = new wxRegionRefData;
 
@@ -202,8 +200,17 @@ void wxRegion::Clear()
 }
 
 //! Combine rectangle (x, y, w, h) with this.
 }
 
 //! 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();
     // Don't change shared data
     if (!m_refData) {
         m_refData = new wxRegionRefData();
@@ -296,7 +303,7 @@ bool wxRegion::Combine(const wxRect& rect, wxRegionOp op)
 //-----------------------------------------------------------------------------
 
 // Outer bounds of region
 //-----------------------------------------------------------------------------
 
 // 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;
 {
     if (m_refData) {
         XRectangle rect;
@@ -312,7 +319,7 @@ void wxRegion::GetBox(long& x, long& y, long&w, long &h) const
 
 wxRect wxRegion::GetBox() const
 {
 
 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);
 }
     GetBox(x, y, w, h);
     return wxRect(x, y, w, h);
 }
@@ -328,7 +335,7 @@ bool wxRegion::Empty() const
 //-----------------------------------------------------------------------------
 
 // Does the region contain the point (x,y)?
 //-----------------------------------------------------------------------------
 
 // 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;
 {
     if (!m_refData)
         return wxOutRegion;
@@ -349,7 +356,7 @@ wxRegionContain wxRegion::Contains(const wxPoint& pt) const
 }
 
 // Does the region contain the rectangle (x, y, w, h)?
 }
 
 // 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;
@@ -367,7 +374,7 @@ wxRegionContain wxRegion::Contains(const wxRect& rect) 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();
     x = rect.x;
     y = rect.y;
     w = rect.GetWidth();
@@ -464,8 +471,7 @@ void wxRegionIterator::Reset(const wxRegion& region)
             m_numRects = count;
             m_rects = new wxRect[m_numRects];
 
             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_rects[i] = rects[i];
 
            /*
@@ -509,28 +515,28 @@ void wxRegionIterator::operator ++ (int)
         ++m_current;
 }
 
         ++m_current;
 }
 
-long wxRegionIterator::GetX() const
+wxCoord wxRegionIterator::GetX() const
 {
     if (m_current < m_numRects)
         return m_rects[m_current].x;
     return 0;
 }
 
 {
     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;
 }
 
 {
     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;
 }
 
 {
     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;
 {
     if (m_current < m_numRects)
         return m_rects[m_current].height;