Merge branch 'd2d-gradient' of https://github.com/MaartenBent/wxWidgets
Fix reference count in D2D renderer gradient brushes. See https://github.com/wxWidgets/wxWidgets/pull/1724
This commit is contained in:
@@ -371,11 +371,11 @@ public:
|
||||
wxGraphicsPenInfo& Width(wxDouble width)
|
||||
{ m_width = width; return *this; }
|
||||
|
||||
wxGraphicsPenInfo&
|
||||
wxGraphicsPenInfo&
|
||||
LinearGradient(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2,
|
||||
const wxColour& c1, const wxColour& c2,
|
||||
const wxGraphicsMatrix& matrix = wxNullGraphicsMatrix)
|
||||
{
|
||||
{
|
||||
m_gradientType = wxGRADIENT_LINEAR;
|
||||
m_x1 = x1;
|
||||
m_y1 = y1;
|
||||
@@ -384,14 +384,14 @@ public:
|
||||
m_stops.SetStartColour(c1);
|
||||
m_stops.SetEndColour(c2);
|
||||
m_matrix = matrix;
|
||||
return *this;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
wxGraphicsPenInfo&
|
||||
wxGraphicsPenInfo&
|
||||
LinearGradient(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2,
|
||||
const wxGraphicsGradientStops& stops,
|
||||
const wxGraphicsMatrix& matrix = wxNullGraphicsMatrix)
|
||||
{
|
||||
{
|
||||
m_gradientType = wxGRADIENT_LINEAR;
|
||||
m_x1 = x1;
|
||||
m_y1 = y1;
|
||||
@@ -399,42 +399,42 @@ public:
|
||||
m_y2 = y2;
|
||||
m_stops = stops;
|
||||
m_matrix = matrix;
|
||||
return *this;
|
||||
return *this;
|
||||
}
|
||||
|
||||
wxGraphicsPenInfo&
|
||||
wxGraphicsPenInfo&
|
||||
RadialGradient(wxDouble startX, wxDouble startY,
|
||||
wxDouble endX, wxDouble endY, wxDouble radius,
|
||||
wxDouble endX, wxDouble endY, wxDouble radius,
|
||||
const wxColour& oColor, const wxColour& cColor,
|
||||
const wxGraphicsMatrix& matrix = wxNullGraphicsMatrix)
|
||||
{
|
||||
{
|
||||
m_gradientType = wxGRADIENT_RADIAL;
|
||||
m_x1 = startX;
|
||||
m_y1 = startY;
|
||||
m_x2 = endX;
|
||||
m_y1 = startY;
|
||||
m_x2 = endX;
|
||||
m_y2 = endY;
|
||||
m_radius = radius;
|
||||
m_stops.SetStartColour(oColor);
|
||||
m_stops.SetEndColour(cColor);
|
||||
m_matrix = matrix;
|
||||
return *this;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
wxGraphicsPenInfo&
|
||||
wxGraphicsPenInfo&
|
||||
RadialGradient(wxDouble startX, wxDouble startY,
|
||||
wxDouble endX, wxDouble endY,
|
||||
wxDouble endX, wxDouble endY,
|
||||
wxDouble radius, const wxGraphicsGradientStops& stops,
|
||||
const wxGraphicsMatrix& matrix = wxNullGraphicsMatrix)
|
||||
{
|
||||
{
|
||||
m_gradientType = wxGRADIENT_RADIAL;
|
||||
m_x1 = startX;
|
||||
m_y1 = startY;
|
||||
m_x2 = endX;
|
||||
m_x1 = startX;
|
||||
m_y1 = startY;
|
||||
m_x2 = endX;
|
||||
m_y2 = endY;
|
||||
m_radius = radius;
|
||||
m_stops = stops;
|
||||
m_matrix = matrix;
|
||||
return *this;
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Accessors
|
||||
|
@@ -745,7 +745,7 @@ wxGDIPlusPenBrushBaseData::CreateLinearGradientBrush(
|
||||
}
|
||||
|
||||
SetGradientStops(brush, stops);
|
||||
m_brush = brush;
|
||||
m_brush = brush;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -769,7 +769,7 @@ wxGDIPlusPenBrushBaseData::CreateRadialGradientBrush(
|
||||
brush->SetSurroundColors(&col, &count);
|
||||
|
||||
// TODO: There doesn't seem to be an equivallent for SetWrapMode, so
|
||||
// the area outside of the gradient's radius is not getting painted.
|
||||
// the area outside of the gradient's radius is not getting painted.
|
||||
|
||||
// Apply the matrix if there is one
|
||||
if ( !matrix.IsNull() )
|
||||
|
@@ -1890,7 +1890,7 @@ void wxD2DPathData::Transform(const wxGraphicsMatrixData* matrix)
|
||||
// constraints this can be fully done only if open figure was empty.
|
||||
// So, Transform() can be safely called if path doesn't contain the open
|
||||
// sub-path or if open sub-path is empty.
|
||||
|
||||
|
||||
// Close current geometry.
|
||||
Flush();
|
||||
|
||||
@@ -2427,15 +2427,15 @@ public:
|
||||
const wxDouble y2;
|
||||
const wxGraphicsGradientStops stops;
|
||||
const wxGraphicsMatrix matrix;
|
||||
LinearGradientInfo(wxDouble& x1_, wxDouble& y1_,
|
||||
wxDouble& x2_, wxDouble& y2_,
|
||||
LinearGradientInfo(wxDouble& x1_, wxDouble& y1_,
|
||||
wxDouble& x2_, wxDouble& y2_,
|
||||
const wxGraphicsGradientStops& stops_,
|
||||
const wxGraphicsMatrix& matrix_)
|
||||
: x1(x1_), y1(y1_), x2(x2_), y2(y2_), stops(stops_), matrix(matrix_) {}
|
||||
};
|
||||
|
||||
wxD2DLinearGradientBrushResourceHolder(wxDouble& x1, wxDouble& y1,
|
||||
wxDouble& x2, wxDouble& y2,
|
||||
wxD2DLinearGradientBrushResourceHolder(wxDouble& x1, wxDouble& y1,
|
||||
wxDouble& x2, wxDouble& y2,
|
||||
const wxGraphicsGradientStops& stops,
|
||||
const wxGraphicsMatrix& matrix)
|
||||
: m_linearGradientInfo(x1, y1, x2, y2, stops, matrix) {}
|
||||
@@ -2444,23 +2444,21 @@ protected:
|
||||
void DoAcquireResource() wxOVERRIDE
|
||||
{
|
||||
wxD2DGradientStopsHelper helper(m_linearGradientInfo.stops, GetContext());
|
||||
ID2D1LinearGradientBrush *linearGradientBrush;
|
||||
|
||||
HRESULT hr = GetContext()->CreateLinearGradientBrush(
|
||||
D2D1::LinearGradientBrushProperties(
|
||||
D2D1::Point2F(m_linearGradientInfo.x1, m_linearGradientInfo.y1),
|
||||
D2D1::Point2F(m_linearGradientInfo.x2, m_linearGradientInfo.y2)),
|
||||
helper.GetGradientStopCollection(),
|
||||
&linearGradientBrush);
|
||||
&m_nativeResource);
|
||||
wxCHECK_HRESULT_RET(hr);
|
||||
|
||||
if (! m_linearGradientInfo.matrix.IsNull())
|
||||
{
|
||||
D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_linearGradientInfo.matrix)->GetMatrix3x2F();
|
||||
matrix.Invert();
|
||||
linearGradientBrush->SetTransform(matrix);
|
||||
m_nativeResource->SetTransform(matrix);
|
||||
}
|
||||
m_nativeResource = linearGradientBrush;
|
||||
}
|
||||
private:
|
||||
const LinearGradientInfo m_linearGradientInfo;
|
||||
@@ -2478,17 +2476,17 @@ public:
|
||||
const wxGraphicsGradientStops stops;
|
||||
const wxGraphicsMatrix matrix;
|
||||
|
||||
RadialGradientInfo(wxDouble x1_, wxDouble y1_,
|
||||
wxDouble x2_, wxDouble y2_,
|
||||
wxDouble r,
|
||||
RadialGradientInfo(wxDouble x1_, wxDouble y1_,
|
||||
wxDouble x2_, wxDouble y2_,
|
||||
wxDouble r,
|
||||
const wxGraphicsGradientStops& stops_,
|
||||
const wxGraphicsMatrix& matrix_)
|
||||
: x1(x1_), y1(y1_), x2(x2_), y2(y2_), radius(r), stops(stops_), matrix(matrix_) {}
|
||||
};
|
||||
|
||||
wxD2DRadialGradientBrushResourceHolder(wxDouble& x1, wxDouble& y1,
|
||||
wxDouble& x2, wxDouble& y2,
|
||||
wxDouble& r,
|
||||
wxD2DRadialGradientBrushResourceHolder(wxDouble& x1, wxDouble& y1,
|
||||
wxDouble& x2, wxDouble& y2,
|
||||
wxDouble& r,
|
||||
const wxGraphicsGradientStops& stops,
|
||||
const wxGraphicsMatrix& matrix)
|
||||
: m_radialGradientInfo(x1, y1, x2, y2, r, stops, matrix) {}
|
||||
@@ -2497,7 +2495,6 @@ protected:
|
||||
void DoAcquireResource() wxOVERRIDE
|
||||
{
|
||||
wxD2DGradientStopsHelper helper(m_radialGradientInfo.stops, GetContext());
|
||||
ID2D1RadialGradientBrush *radialGradientBrush;
|
||||
|
||||
wxDouble xo = m_radialGradientInfo.x1 - m_radialGradientInfo.x2;
|
||||
wxDouble yo = m_radialGradientInfo.y1 - m_radialGradientInfo.y2;
|
||||
@@ -2508,16 +2505,15 @@ protected:
|
||||
D2D1::Point2F(xo, yo),
|
||||
m_radialGradientInfo.radius, m_radialGradientInfo.radius),
|
||||
helper.GetGradientStopCollection(),
|
||||
&radialGradientBrush);
|
||||
&m_nativeResource);
|
||||
wxCHECK_HRESULT_RET(hr);
|
||||
|
||||
if (! m_radialGradientInfo.matrix.IsNull())
|
||||
{
|
||||
D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_radialGradientInfo.matrix)->GetMatrix3x2F();
|
||||
matrix.Invert();
|
||||
radialGradientBrush->SetTransform(matrix);
|
||||
m_nativeResource->SetTransform(matrix);
|
||||
}
|
||||
m_nativeResource = radialGradientBrush;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -2535,14 +2531,14 @@ public:
|
||||
|
||||
wxD2DBrushData(wxGraphicsRenderer* renderer);
|
||||
|
||||
void CreateLinearGradientBrush(wxDouble x1, wxDouble y1,
|
||||
wxDouble x2, wxDouble y2,
|
||||
void CreateLinearGradientBrush(wxDouble x1, wxDouble y1,
|
||||
wxDouble x2, wxDouble y2,
|
||||
const wxGraphicsGradientStops& stops,
|
||||
const wxGraphicsMatrix& matrix = wxNullGraphicsMatrix);
|
||||
|
||||
void CreateRadialGradientBrush(wxDouble startX, wxDouble startY,
|
||||
wxDouble endX, wxDouble endY,
|
||||
wxDouble radius,
|
||||
void CreateRadialGradientBrush(wxDouble startX, wxDouble startY,
|
||||
wxDouble endX, wxDouble endY,
|
||||
wxDouble radius,
|
||||
const wxGraphicsGradientStops& stops,
|
||||
const wxGraphicsMatrix& matrix = wxNullGraphicsMatrix);
|
||||
|
||||
|
Reference in New Issue
Block a user