- m_brush = new LinearGradientBrush( PointF( x1,y1) , PointF( x2,y2),
- Color( c1.Alpha(), c1.Red(),c1.Green() , c1.Blue() ),
- Color( c2.Alpha(), c2.Red(),c2.Green() , c2.Blue() ));
+ const unsigned numStops = stops.GetCount();
+ if ( numStops <= 2 )
+ {
+ // initial and final colours are set during the brush creation, nothing
+ // more to do
+ return;
+ }
+
+ wxVector<Color> colors(numStops);
+ wxVector<REAL> positions(numStops);
+
+ for ( unsigned i = 0; i < numStops; i++ )
+ {
+ wxGraphicsGradientStop stop = stops.Item(i);
+
+ colors[i] = wxColourToColor(stop.GetColour());
+ positions[i] = stop.GetPosition();
+ }
+
+ brush->SetInterpolationColors(&colors[0], &positions[0], numStops);
+}
+
+void
+wxGDIPlusBrushData::CreateLinearGradientBrush(wxDouble x1, wxDouble y1,
+ wxDouble x2, wxDouble y2,
+ const wxGraphicsGradientStops& stops)
+{
+ LinearGradientBrush * const
+ brush = new LinearGradientBrush(PointF(x1, y1) , PointF(x2, y2),
+ wxColourToColor(stops.GetStartColour()),
+ wxColourToColor(stops.GetEndColour()));
+ m_brush = brush;
+
+ SetGradientStops(brush, stops);