|
|
@@ -36,11 +36,12 @@ namespace Avalonia.Animation.Transitions
|
|
|
}
|
|
|
|
|
|
private ColorInterpolationMode _interpolationMode;
|
|
|
-
|
|
|
+
|
|
|
public override IObservable<SolidColorBrush> DoTransition(IObservable<double> progress, SolidColorBrush oldValue, SolidColorBrush newValue)
|
|
|
{
|
|
|
- var oldColor = new Vector4(oldValue.Color.A, oldValue.Color.R, oldValue.Color.G, oldValue.Color.B);
|
|
|
- var newColor = new Vector4(newValue.Color.A, newValue.Color.R, newValue.Color.G, newValue.Color.B);
|
|
|
+
|
|
|
+ var oldColor = new Vector4(oldValue.Color.R, oldValue.Color.G, oldValue.Color.B, oldValue.Color.A);
|
|
|
+ var newColor = new Vector4(newValue.Color.R, newValue.Color.G, newValue.Color.B, oldValue.Color.A);
|
|
|
oldColor = oldColor / 255f;
|
|
|
newColor = newColor / 255f;
|
|
|
var deltaColor = newColor - oldColor;
|
|
|
@@ -48,10 +49,10 @@ namespace Avalonia.Animation.Transitions
|
|
|
switch (InterpolationMode)
|
|
|
{
|
|
|
case ColorInterpolationMode.PremultipliedRGB:
|
|
|
-
|
|
|
- var premultOV = new Vector4(1, oldColor.W, oldColor.W, oldColor.W);
|
|
|
- var premultNV = new Vector4(1, newColor.W, newColor.W, newColor.W);
|
|
|
-
|
|
|
+
|
|
|
+ var premultOV = new Vector4(oldColor.W, oldColor.W, oldColor.W, 1);
|
|
|
+ var premultNV = new Vector4(newColor.W, newColor.W, newColor.W, 1);
|
|
|
+
|
|
|
oldColor *= premultOV;
|
|
|
newColor *= premultNV;
|
|
|
|
|
|
@@ -72,10 +73,11 @@ namespace Avalonia.Animation.Transitions
|
|
|
return new SolidColorBrush(Color.FromVector4(interpolatedColor, true));
|
|
|
});
|
|
|
default:
|
|
|
- throw new NotImplementedException($"{Enum.GetName(typeof(ColorInterpolationMode), InterpolationMode)} color interpolation is not supported.");
|
|
|
+ throw new NotImplementedException($"'{Enum.GetName(typeof(ColorInterpolationMode), InterpolationMode)}' color interpolation is not supported.");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
}
|