@@ -964,34 +964,39 @@ private static void ConfigureGradientBrush(ref PaintWrapper paintWrapper, Rect t
964
964
( originPoint . Y - centerPoint . Y ) * radiusX / radiusY + centerPoint . Y ) ;
965
965
966
966
var origin = originPoint . ToSKPoint ( ) ;
967
-
968
- // reverse the order of the stops to match D2D
969
- var reversedColors = new SKColor [ stopColors . Length ] ;
970
- Array . Copy ( stopColors , reversedColors , stopColors . Length ) ;
971
- Array . Reverse ( reversedColors ) ;
967
+
968
+ var endOffset = 0.0 ;
972
969
973
970
// and then reverse the reference point of the stops
974
971
var reversedStops = new float [ stopOffsets . Length ] ;
975
972
for ( var i = 0 ; i < stopOffsets . Length ; i ++ )
976
973
{
977
- reversedStops [ i ] = stopOffsets [ i ] ;
974
+ var offset = stopOffsets [ i ] ;
975
+
976
+ if ( endOffset < offset )
977
+ {
978
+ endOffset = offset ;
979
+ }
980
+
981
+ reversedStops [ i ] = offset ;
982
+
978
983
if ( reversedStops [ i ] > 0 && reversedStops [ i ] < 1 )
979
984
{
980
- reversedStops [ i ] = Math . Abs ( 1 - stopOffsets [ i ] ) ;
985
+ reversedStops [ i ] = Math . Abs ( 1 - offset ) ;
981
986
}
982
987
}
983
988
984
989
// compose with a background colour of the final stop to match D2D's behaviour of filling with the final color
985
990
using ( var shader = SKShader . CreateCompose (
986
- SKShader . CreateColor ( reversedColors [ 0 ] ) ,
987
- transform . HasValue
988
- ? SKShader . CreateTwoPointConicalGradient ( center , ( float ) radiusX , origin , 0 ,
989
- reversedColors , reversedStops , tileMode , transform . Value . ToSKMatrix ( ) )
990
- : SKShader . CreateTwoPointConicalGradient ( center , ( float ) radiusX , origin , 0 ,
991
- reversedColors , reversedStops , tileMode )
992
-
993
- )
994
- )
991
+ SKShader . CreateColor ( stopColors [ 0 ] ) ,
992
+ transform . HasValue
993
+ ? SKShader . CreateTwoPointConicalGradient ( start , radiusStart , end , radiusEnd ,
994
+ stopColors , stopOffsets , tileMode , transform . Value . ToSKMatrix ( ) )
995
+ : SKShader . CreateTwoPointConicalGradient ( start , radiusStart , end , radiusEnd ,
996
+ stopColors , stopOffsets , tileMode )
997
+
998
+ )
999
+ )
995
1000
{
996
1001
paintWrapper . Paint . Shader = shader ;
997
1002
}
0 commit comments