X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8d854fa93f8f5a48e383395060063a7931bf0207..41286fd1def19641be3ae5bb9666c84a1c0b5525:/src/os2/region.cpp diff --git a/src/os2/region.cpp b/src/os2/region.cpp index 112fccc32f..733998bbf7 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( @@ -395,8 +399,9 @@ 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 ); @@ -555,6 +560,51 @@ WXHRGN wxRegion::GetHRGN() const return (WXHRGN) M_REGION; } +// +// Set a new PS, this means we have to recreate the old region in the new +// PS +// +void wxRegion::SetPS( + HPS hPS +) +{ + RGNRECT vRgnData; + PRECTL pRect = NULL; + + if (::GpiQueryRegionRects( ((wxRegionRefData*)m_refData)->m_hPS + ,((wxRegionRefData*)m_refData)->m_hRegion + ,NULL + ,&vRgnData + ,NULL + )) + { + pRect = new RECTL[vRgnData.crcReturned]; + vRgnData.crc = vRgnData.crcReturned; + vRgnData.ircStart = 1; + if (::GpiQueryRegionRects( ((wxRegionRefData*)m_refData)->m_hPS + ,((wxRegionRefData*)m_refData)->m_hRegion + ,NULL + ,&vRgnData + ,pRect + )) + { + // + // First destroy the region out of the old PS + // and then create it in the new and set the new to current + // + ::GpiDestroyRegion( ((wxRegionRefData*)m_refData)->m_hPS + ,M_REGION + ); + ((wxRegionRefData*)m_refData)->m_hRegion = ::GpiCreateRegion( hPS + ,vRgnData.crcReturned + ,pRect + ); + ((wxRegionRefData*)m_refData)->m_hPS = hPS; + } + delete [] pRect; + } +} // end of wxRegion::SetPS + /////////////////////////////////////////////////////////////////////////////// // // // wxRegionIterator //