|
|
|
@ -963,39 +963,43 @@ namespace Avalonia.Skia |
|
|
|
(originPoint.Y - centerPoint.Y) * radiusX / radiusY + centerPoint.Y); |
|
|
|
|
|
|
|
var origin = originPoint.ToSKPoint(); |
|
|
|
var endOffset = 0.0; |
|
|
|
|
|
|
|
// and then reverse the reference point of the stops
|
|
|
|
var reversedStops = new float[stopOffsets.Length]; |
|
|
|
|
|
|
|
for (var i = 0; i < stopOffsets.Length; i++) |
|
|
|
{ |
|
|
|
var offset = stopOffsets[i]; |
|
|
|
if (endOffset < offset) |
|
|
|
{ |
|
|
|
endOffset = offset; |
|
|
|
} |
|
|
|
reversedStops[i] = offset; |
|
|
|
if (reversedStops[i] > 0 && reversedStops[i] < 1) |
|
|
|
{ |
|
|
|
reversedStops[i] = Math.Abs(1 - offset); |
|
|
|
} |
|
|
|
} |
|
|
|
var endOffset = stopOffsets[stopOffsets.Length - 1]; |
|
|
|
|
|
|
|
var start = origin; |
|
|
|
var radiusStart = 0f; |
|
|
|
var end = center; |
|
|
|
var radiusEnd = (float)radiusX; |
|
|
|
var reverse = MathUtilities.AreClose(1, endOffset); |
|
|
|
var reverse = (centerPoint.X != originPoint.X || centerPoint.Y != originPoint.Y) && endOffset == 1; |
|
|
|
|
|
|
|
if (reverse) |
|
|
|
{ |
|
|
|
// reverse the order of the stops to match D2D
|
|
|
|
(start, radiusStart, end, radiusEnd) = (end, radiusEnd, start, radiusStart); |
|
|
|
|
|
|
|
// reverse the order of the stops to match D2D
|
|
|
|
var count = stopOffsets.Length; |
|
|
|
|
|
|
|
var reversedColors = new SKColor[stopColors.Length]; |
|
|
|
Array.Copy(stopColors, reversedColors, stopColors.Length); |
|
|
|
Array.Reverse(reversedColors); |
|
|
|
// and then reverse the reference point of the stops
|
|
|
|
var reversedStops = new float[count]; |
|
|
|
|
|
|
|
for (var i = 0; i < count; i++) |
|
|
|
{ |
|
|
|
var offset = radialGradient.GradientStops[i].Offset; |
|
|
|
|
|
|
|
offset = 1 - offset; |
|
|
|
|
|
|
|
if (MathUtilities.IsZero(offset)) |
|
|
|
{ |
|
|
|
offset = 0; |
|
|
|
} |
|
|
|
|
|
|
|
var reversedIndex = count - 1 - i; |
|
|
|
|
|
|
|
reversedStops[reversedIndex] = (float)offset; |
|
|
|
reversedColors[reversedIndex] = stopColors[i]; |
|
|
|
} |
|
|
|
|
|
|
|
stopColors = reversedColors; |
|
|
|
stopOffsets = reversedStops; |
|
|
|
} |
|
|
|
|