// Author: David Webster
// Modified by:
// Created: 10/15/99
-// RCS-ID: $Id$
+// RCS-ID: $Id$
// Copyright: (c) Davdi Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// 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
wxRegionRefData()
{
m_hRegion = 0;
+ m_hPS = 0;
}
wxRegionRefData(const wxRegionRefData& rData)
} // 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(
if (m_refData)
{
RECTL vRect;
+ APIRET rc;
- ::GpiQueryRegionBox( ((wxRegionRefData*)m_refData)->m_hPS
+ rc = ::GpiQueryRegionBox( ((wxRegionRefData*)m_refData)->m_hPS
,M_REGION
,&vRect
);
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 //