X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/442275372dda9517ce11c6a57728d69bef62f259..bbee1b4abc13379569607df8f6985ec68dc12231:/src/os2/region.cpp diff --git a/src/os2/region.cpp b/src/os2/region.cpp index bc036241c2..5404bf64db 100644 --- a/src/os2/region.cpp +++ b/src/os2/region.cpp @@ -4,7 +4,7 @@ // Author: David Webster // Modified by: // Created: 10/15/99 -// RCS-ID: $Id$ +// RCS-ID: $Id$ // Copyright: (c) Davdi Webster // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -12,14 +12,15 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/app.h" #include "wx/os2/region.h" #include "wx/gdicmn.h" #include "wx/window.h" #include "wx/os2/private.h" - IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject) - IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject) + IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject) + IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject) //----------------------------------------------------------------------------- // wxRegionRefData implementation @@ -30,6 +31,7 @@ public: wxRegionRefData() { m_hRegion = 0; + m_hPS = 0; } wxRegionRefData(const wxRegionRefData& rData) @@ -88,11 +90,13 @@ wxRegion::wxRegion() } // end of wxRegion::wxRegion wxRegion::wxRegion( - WXHRGN hRegion + WXHRGN hRegion, + WXHDC hPS ) { m_refData = new wxRegionRefData; M_REGION = (HRGN) hRegion; + (((wxRegionRefData*)m_refData)->m_hPS) = hPS; } // end of wxRegion::wxRegion wxRegion::wxRegion( @@ -216,10 +220,44 @@ wxRegion::~wxRegion() { } // end of wxRegion::~wxRegion +wxObjectRefData *wxRegion::CreateData() const +{ + return new wxRegionRefData; +} + +wxObjectRefData *wxRegion::CloneData(const wxObjectRefData *data) const +{ + return new wxRegionRefData(*(wxRegionRefData *)data); +} + //----------------------------------------------------------------------------- //# Modify region //----------------------------------------------------------------------------- +bool wxRegion::Offset( + wxCoord x +, wxCoord y +) +{ + if ( !x && !y ) + { + // nothing to do + return TRUE; + } + + AllocExclusive(); + +#if 0 + if ( ::OffsetRgn(GetHrgn(), x, y) == ERROR ) + { + wxLogLastError(_T("OffsetRgn")); + + return FALSE; + } +#endif + return TRUE; +} + // // Clear current region // @@ -239,20 +277,7 @@ bool wxRegion::Combine( , wxRegionOp eOp ) { - // - // Don't change shared data - // - if (!m_refData) - { - m_refData = new wxRegionRefData(); - } - else if (m_refData->GetRefCount() > 1) - { - wxRegionRefData* pRef = (wxRegionRefData*)m_refData; - - UnRef(); - m_refData = new wxRegionRefData(*pRef); - } + AllocExclusive(); // // If ref count is 1, that means it's 'ours' anyway so no action. @@ -317,20 +342,7 @@ bool wxRegion::Combine( if (rRegion.Empty()) return FALSE; - // - // Don't change shared data - // - if (!m_refData) - { - m_refData = new wxRegionRefData(); - } - else if (m_refData->GetRefCount() > 1) - { - wxRegionRefData* pRef = (wxRegionRefData*)m_refData; - - UnRef(); - m_refData = new wxRegionRefData(*pRef); - } + AllocExclusive(); LONG lMode = 0; @@ -395,13 +407,14 @@ void wxRegion::GetBox( if (m_refData) { RECTL vRect; + APIRET rc; - ::GpiQueryRegionBox( ((wxRegionRefData*)m_refData)->m_hPS + rc = ::GpiQueryRegionBox( ((wxRegionRefData*)m_refData)->m_hPS ,M_REGION ,&vRect ); x = vRect.xLeft; - y = vRect.yTop; + y = vRect.yBottom; vWidth = vRect.xRight - vRect.xLeft; vHeight = vRect.yTop - vRect.yBottom; }