Add support for setting the transform on Direct2D gradient brushes
This commit is contained in:
@@ -2445,14 +2445,23 @@ 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.direction.GetX(), m_linearGradientInfo.direction.GetY()),
|
D2D1::Point2F(m_linearGradientInfo.direction.GetX(), m_linearGradientInfo.direction.GetY()),
|
||||||
D2D1::Point2F(m_linearGradientInfo.direction.GetWidth(), m_linearGradientInfo.direction.GetHeight())),
|
D2D1::Point2F(m_linearGradientInfo.direction.GetWidth(), m_linearGradientInfo.direction.GetHeight())),
|
||||||
helper.GetGradientStopCollection(),
|
helper.GetGradientStopCollection(),
|
||||||
&m_nativeResource);
|
&linearGradientBrush);
|
||||||
wxCHECK_HRESULT_RET(hr);
|
wxCHECK_HRESULT_RET(hr);
|
||||||
|
|
||||||
|
if (! m_linearGradientInfo.matrix.IsNull())
|
||||||
|
{
|
||||||
|
D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_linearGradientInfo.matrix)->GetMatrix3x2F();
|
||||||
|
matrix.Invert();
|
||||||
|
linearGradientBrush->SetTransform(matrix);
|
||||||
|
}
|
||||||
|
m_nativeResource = linearGradientBrush;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
const LinearGradientInfo m_linearGradientInfo;
|
const LinearGradientInfo m_linearGradientInfo;
|
||||||
@@ -2486,18 +2495,27 @@ protected:
|
|||||||
void DoAcquireResource() wxOVERRIDE
|
void DoAcquireResource() wxOVERRIDE
|
||||||
{
|
{
|
||||||
wxD2DGradientStopsHelper helper(m_radialGradientInfo.stops, GetContext());
|
wxD2DGradientStopsHelper helper(m_radialGradientInfo.stops, GetContext());
|
||||||
|
ID2D1RadialGradientBrush *radialGradientBrush;
|
||||||
|
|
||||||
int xo = m_radialGradientInfo.direction.GetLeft() - m_radialGradientInfo.direction.GetWidth();
|
int xo = m_radialGradientInfo.direction.GetLeft() - m_radialGradientInfo.direction.GetWidth();
|
||||||
int yo = m_radialGradientInfo.direction.GetTop() - m_radialGradientInfo.direction.GetHeight();
|
int yo = m_radialGradientInfo.direction.GetTop() - m_radialGradientInfo.direction.GetHeight();
|
||||||
|
|
||||||
HRESULT hr = GetContext()->CreateRadialGradientBrush(
|
HRESULT hr = GetContext()->CreateRadialGradientBrush(
|
||||||
D2D1::RadialGradientBrushProperties(
|
D2D1::RadialGradientBrushProperties(
|
||||||
D2D1::Point2F(m_radialGradientInfo.direction.GetLeft(), m_radialGradientInfo.direction.GetTop()),
|
D2D1::Point2F(m_radialGradientInfo.direction.GetLeft(), m_radialGradientInfo.direction.GetTop()),
|
||||||
D2D1::Point2F(xo, yo),
|
D2D1::Point2F(xo, yo),
|
||||||
m_radialGradientInfo.radius, m_radialGradientInfo.radius),
|
m_radialGradientInfo.radius, m_radialGradientInfo.radius),
|
||||||
helper.GetGradientStopCollection(),
|
helper.GetGradientStopCollection(),
|
||||||
&m_nativeResource);
|
&radialGradientBrush);
|
||||||
wxCHECK_HRESULT_RET(hr);
|
wxCHECK_HRESULT_RET(hr);
|
||||||
|
|
||||||
|
if (! m_radialGradientInfo.matrix.IsNull())
|
||||||
|
{
|
||||||
|
D2D1::Matrix3x2F matrix = wxGetD2DMatrixData(m_radialGradientInfo.matrix)->GetMatrix3x2F();
|
||||||
|
matrix.Invert();
|
||||||
|
radialGradientBrush->SetTransform(matrix);
|
||||||
|
}
|
||||||
|
m_nativeResource = radialGradientBrush;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Reference in New Issue
Block a user