Fix reference count in D2D renderer gradient brushes.

See https://github.com/wxWidgets/wxWidgets/pull/1724
This commit is contained in:
Vadim Zeitlin
2020-02-04 02:16:19 +01:00
3 changed files with 43 additions and 47 deletions

View File

@@ -2444,23 +2444,21 @@ protected:
void DoAcquireResource() wxOVERRIDE void DoAcquireResource() wxOVERRIDE
{ {
wxD2DGradientStopsHelper helper(m_linearGradientInfo.stops, GetContext()); wxD2DGradientStopsHelper helper(m_linearGradientInfo.stops, GetContext());
ID2D1LinearGradientBrush *linearGradientBrush;
HRESULT hr = GetContext()->CreateLinearGradientBrush( HRESULT hr = GetContext()->CreateLinearGradientBrush(
D2D1::LinearGradientBrushProperties( D2D1::LinearGradientBrushProperties(
D2D1::Point2F(m_linearGradientInfo.x1, m_linearGradientInfo.y1), D2D1::Point2F(m_linearGradientInfo.x1, m_linearGradientInfo.y1),
D2D1::Point2F(m_linearGradientInfo.x2, m_linearGradientInfo.y2)), D2D1::Point2F(m_linearGradientInfo.x2, m_linearGradientInfo.y2)),
helper.GetGradientStopCollection(), helper.GetGradientStopCollection(),
&linearGradientBrush); &m_nativeResource);
wxCHECK_HRESULT_RET(hr); wxCHECK_HRESULT_RET(hr);
if (! m_linearGradientInfo.matrix.IsNull()) if (! m_linearGradientInfo.matrix.IsNull())
{ {
D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_linearGradientInfo.matrix)->GetMatrix3x2F(); D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_linearGradientInfo.matrix)->GetMatrix3x2F();
matrix.Invert(); matrix.Invert();
linearGradientBrush->SetTransform(matrix); m_nativeResource->SetTransform(matrix);
} }
m_nativeResource = linearGradientBrush;
} }
private: private:
const LinearGradientInfo m_linearGradientInfo; const LinearGradientInfo m_linearGradientInfo;
@@ -2497,7 +2495,6 @@ protected:
void DoAcquireResource() wxOVERRIDE void DoAcquireResource() wxOVERRIDE
{ {
wxD2DGradientStopsHelper helper(m_radialGradientInfo.stops, GetContext()); wxD2DGradientStopsHelper helper(m_radialGradientInfo.stops, GetContext());
ID2D1RadialGradientBrush *radialGradientBrush;
wxDouble xo = m_radialGradientInfo.x1 - m_radialGradientInfo.x2; wxDouble xo = m_radialGradientInfo.x1 - m_radialGradientInfo.x2;
wxDouble yo = m_radialGradientInfo.y1 - m_radialGradientInfo.y2; wxDouble yo = m_radialGradientInfo.y1 - m_radialGradientInfo.y2;
@@ -2508,16 +2505,15 @@ protected:
D2D1::Point2F(xo, yo), D2D1::Point2F(xo, yo),
m_radialGradientInfo.radius, m_radialGradientInfo.radius), m_radialGradientInfo.radius, m_radialGradientInfo.radius),
helper.GetGradientStopCollection(), helper.GetGradientStopCollection(),
&radialGradientBrush); &m_nativeResource);
wxCHECK_HRESULT_RET(hr); wxCHECK_HRESULT_RET(hr);
if (! m_radialGradientInfo.matrix.IsNull()) if (! m_radialGradientInfo.matrix.IsNull())
{ {
D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_radialGradientInfo.matrix)->GetMatrix3x2F(); D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_radialGradientInfo.matrix)->GetMatrix3x2F();
matrix.Invert(); matrix.Invert();
radialGradientBrush->SetTransform(matrix); m_nativeResource->SetTransform(matrix);
} }
m_nativeResource = radialGradientBrush;
} }
private: private: