Check if path geometry contents was successfully transferred while cloning wxD2DPathData.

Since only geometry with closed sink (immutable) can be transferred to another geometry object with ID2D1PathGeometry::Stream() so we have to check if actual transfer succeeded and return NULL if not.
This commit is contained in:
Artur Wieczorek 2016-05-12 21:34:53 +02:00
parent bd55ce4d37
commit 360416dfed

View File

@ -1073,7 +1073,21 @@ wxD2DPathData::wxGraphicsObjectRefData* wxD2DPathData::Clone() const
wxD2DPathData* newPathData = new wxD2DPathData(GetRenderer(), m_direct2dfactory);
newPathData->EnsureGeometryOpen();
m_pathGeometry->Stream(newPathData->m_geometrySink);
// Only geometry with closed sink (immutable)
// can be transferred to another geometry object with
// ID2D1PathGeometry::Stream() so we have to check
// if actual transfer succeeded.
// Transfer geometry to the new geometry sink.
HRESULT hr = m_pathGeometry->Stream(newPathData->m_geometrySink);
wxASSERT_MSG( SUCCEEDED(hr), wxS("Current geometry is in invalid state") );
if ( FAILED(hr) )
{
delete newPathData;
return NULL;
}
// Copy auxiliary data.
newPathData->m_currentPoint = m_currentPoint;
newPathData->m_transformMatrix = m_transformMatrix;
newPathData->m_figureOpened = m_figureOpened;