X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a6384ca1e6e9a84f755dbca28875a5e89267766..05e0b047d879cdbfade7f2ab346c0acdf3e29f96:/src/generic/regiong.cpp diff --git a/src/generic/regiong.cpp b/src/generic/regiong.cpp index e5595ff19e..9511c83df2 100644 --- a/src/generic/regiong.cpp +++ b/src/generic/regiong.cpp @@ -176,12 +176,12 @@ protected: // wxRegionRefData // ======================================================================== -class wxRegionRefData : public wxObjectRefData, +class wxRegionRefData : public wxGDIRefData, public REGION { public: wxRegionRefData() - : wxObjectRefData(), + : wxGDIRefData(), REGION() { size = 1; @@ -194,7 +194,7 @@ public: } wxRegionRefData(const wxPoint& topLeft, const wxPoint& bottomRight) - : wxObjectRefData(), + : wxGDIRefData(), REGION() { rects = (BOX*)malloc(sizeof(BOX)); @@ -208,7 +208,7 @@ public: } wxRegionRefData(const wxRect& rect) - : wxObjectRefData(), + : wxGDIRefData(), REGION(rect) { rects = (BOX*)malloc(sizeof(BOX)); @@ -216,7 +216,7 @@ public: } wxRegionRefData(const wxRegionRefData& refData) - : wxObjectRefData(), + : wxGDIRefData(), REGION() { size = refData.size; @@ -226,7 +226,7 @@ public: extents = refData.extents; } - ~wxRegionRefData() + virtual ~wxRegionRefData() { free(rects); } @@ -276,110 +276,82 @@ void wxRegionGeneric::Clear() UnRef(); } -wxObjectRefData *wxRegionGeneric::CreateRefData() const +wxGDIRefData *wxRegionGeneric::CreateGDIRefData() const { return new wxRegionRefData; } -wxObjectRefData *wxRegionGeneric::CloneRefData(const wxObjectRefData *data) const +wxGDIRefData *wxRegionGeneric::CloneGDIRefData(const wxGDIRefData *data) const { return new wxRegionRefData(*(wxRegionRefData *)data); } -bool wxRegionGeneric::operator== (const wxRegionGeneric& region) const +bool wxRegionGeneric::DoIsEqual(const wxRegion& region) const { - wxASSERT(m_refData && region.m_refData); return REGION::XEqualRegion(M_REGIONDATA,M_REGIONDATA_OF(region)); } -wxRect wxRegionGeneric::GetBox() const +bool wxRegionGeneric::DoGetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const { - wxASSERT(m_refData); - wxRect rect; - REGION::XClipBox(M_REGIONDATA,&rect); - return rect; -} + if ( !m_refData ) + return false; -void wxRegionGeneric::GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const -{ - wxASSERT(m_refData); wxRect rect; REGION::XClipBox(M_REGIONDATA,&rect); x = rect.x; y = rect.y; w = rect.width; h = rect.height; + return true; } // ---------------------------------------------------------------------------- // wxRegionGeneric operations // ---------------------------------------------------------------------------- -bool wxRegionGeneric::Union(const wxRect& rect) -/* XUnionRectWithRegion */ +bool wxRegionGeneric::DoUnionWithRect(const wxRect& rect) { - if (!rect.width || !rect.height) - return false; + if ( rect.IsEmpty() ) + { + // nothing to do + return true; + } AllocExclusive(); REGION region(rect); return REGION::XUnionRegion(®ion,M_REGIONDATA,M_REGIONDATA); } -bool wxRegionGeneric::Union(const wxRegionGeneric& region) +bool wxRegionGeneric::DoUnionWithRegion(const wxRegion& region) { AllocExclusive(); return REGION::XUnionRegion(M_REGIONDATA_OF(region),M_REGIONDATA,M_REGIONDATA); } -bool wxRegionGeneric::Intersect(const wxRect& rect) -{ - if (!rect.width || !rect.height) - return false; - AllocExclusive(); - REGION region(rect); - - return REGION::XIntersectRegion(®ion,M_REGIONDATA,M_REGIONDATA); -} - -bool wxRegionGeneric::Intersect(const wxRegionGeneric& region) +bool wxRegionGeneric::DoIntersect(const wxRegion& region) { AllocExclusive(); return REGION::XIntersectRegion(M_REGIONDATA_OF(region),M_REGIONDATA,M_REGIONDATA); } -bool wxRegionGeneric::Subtract(const wxRect& rect) +bool wxRegionGeneric::DoSubtract(const wxRegion& region) { - if (!rect.width || !rect.height) - return false; - AllocExclusive(); - REGION region(rect); - - return REGION::XSubtractRegion(®ion,M_REGIONDATA,M_REGIONDATA); -} + if ( region.IsEmpty() ) + { + // nothing to do + return true; + } -bool wxRegionGeneric::Subtract(const wxRegionGeneric& region) -{ return REGION::XSubtractRegion(M_REGIONDATA_OF(region),M_REGIONDATA,M_REGIONDATA); } -bool wxRegionGeneric::Xor(const wxRect& rect) -{ - if (!rect.width || !rect.height) - return false; - AllocExclusive(); - REGION region(rect); - - return REGION::XXorRegion(®ion,M_REGIONDATA,M_REGIONDATA); -} - -bool wxRegionGeneric::Xor(const wxRegionGeneric& region) +bool wxRegionGeneric::DoXor(const wxRegion& region) { AllocExclusive(); return REGION::XXorRegion(M_REGIONDATA_OF(region),M_REGIONDATA,M_REGIONDATA); } -bool wxRegionGeneric::Offset(wxCoord x, wxCoord y) +bool wxRegionGeneric::DoOffset(wxCoord x, wxCoord y) { AllocExclusive(); return REGION::XOffsetRegion(M_REGIONDATA, x, y); @@ -389,35 +361,21 @@ bool wxRegionGeneric::Offset(wxCoord x, wxCoord y) // wxRegionGeneric comparison // ---------------------------------------------------------------------------- -bool wxRegionGeneric::Empty() const +bool wxRegionGeneric::IsEmpty() const { wxASSERT(m_refData); return REGION::XEmptyRegion(M_REGIONDATA); } // Does the region contain the point (x,y)? -wxRegionContain wxRegionGeneric::Contains(long x, long y) const -{ - wxASSERT(m_refData); - return REGION::XPointInRegion(M_REGIONDATA,x,y)?wxInRegion:wxOutRegion; -} - -// Does the region contain the point pt? -wxRegionContain wxRegionGeneric::Contains(const wxPoint& pt) const -{ - wxASSERT(m_refData); - return REGION::XPointInRegion(M_REGIONDATA,pt.x,pt.y)?wxInRegion:wxOutRegion; -} - -// Does the region contain the rectangle (x, y, w, h)? -wxRegionContain wxRegionGeneric::Contains(long x, long y, long w, long h) const +wxRegionContain wxRegionGeneric::DoContainsPoint(wxCoord x, wxCoord y) const { wxASSERT(m_refData); - return REGION::XRectInRegion(M_REGIONDATA,x,y,w,h); + return REGION::XPointInRegion(M_REGIONDATA,x,y) ? wxInRegion : wxOutRegion; } // Does the region contain the rectangle rect? -wxRegionContain wxRegionGeneric::Contains(const wxRect& rect) const +wxRegionContain wxRegionGeneric::DoContainsRect(const wxRect& rect) const { wxASSERT(m_refData); return REGION::XRectInRegion(M_REGIONDATA,rect.x,rect.y,rect.width,rect.height);