- //
- // 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);
- }
-
- //
- // If ref count is 1, that means it's 'ours' anyway so no action.
- //
- RECTL vRect;
-
- vRect.xLeft = x;
- vRect.xRight = x + vWidth;
- vRect.yBottom = y;
- vRect.yTop = y + vHeight;
-
- HRGN hRgn = ::GpiCreateRegion( ((wxRegionRefData*)m_refData)->m_hPS
- ,1
- ,&vRect
- );
- LONG lMode = 0L;
-
- switch (eOp)
- {
- case wxRGN_AND:
- lMode = CRGN_AND;
- break;
-
- case wxRGN_OR:
- lMode = CRGN_OR;
- break;
-
- case wxRGN_XOR:
- lMode = CRGN_XOR;
- break;
-
- case wxRGN_DIFF:
- lMode = CRGN_DIFF;
- break;
-
- case wxRGN_COPY:
- default:
- lMode = CRGN_COPY;
- break;
- }
- bool bSuccess = ::GpiCombineRegion( ((wxRegionRefData*)m_refData)->m_hPS
- ,M_REGION
- ,M_REGION
- ,hRgn
- ,lMode
- );
- ::GpiDestroyRegion ( ((wxRegionRefData*)m_refData)->m_hPS
- ,hRgn
- );
-
- return bSuccess;
+ return Combine(wxRegion(x, y, vWidth, vHeight), eOp);