diff --git a/src/Avalonia.Animation/Animation.cs b/src/Avalonia.Animation/Animation.cs
index d15a9b78bb..3b4afa637a 100644
--- a/src/Avalonia.Animation/Animation.cs
+++ b/src/Avalonia.Animation/Animation.cs
@@ -105,8 +105,7 @@ namespace Avalonia.Animation
Property = setter.Property,
Cue = keyframe.Cue,
KeyTime = keyframe.KeyTime,
- timeSpanSet = keyframe.timeSpanSet,
- cueSet = keyframe.cueSet,
+ TimingMode = keyframe.TimingMode,
Value = setter.Value
};
diff --git a/src/Avalonia.Animation/AnimatorKeyFrame.cs b/src/Avalonia.Animation/AnimatorKeyFrame.cs
index 02457cb9aa..74061d76db 100644
--- a/src/Avalonia.Animation/AnimatorKeyFrame.cs
+++ b/src/Avalonia.Animation/AnimatorKeyFrame.cs
@@ -16,7 +16,7 @@ namespace Avalonia.Animation
public Type Handler;
public Cue Cue;
public TimeSpan KeyTime;
- internal bool timeSpanSet, cueSet;
+ internal KeyFrameTimingMode TimingMode;
public AvaloniaProperty Property;
public object Value;
}
diff --git a/src/Avalonia.Animation/AnimatorStateMachine`1.cs b/src/Avalonia.Animation/AnimatorStateMachine`1.cs
index 16d081d83d..1a51b897c0 100644
--- a/src/Avalonia.Animation/AnimatorStateMachine`1.cs
+++ b/src/Avalonia.Animation/AnimatorStateMachine`1.cs
@@ -246,6 +246,9 @@ namespace Avalonia.Animation
_targetObserver.OnCompleted();
handled = true;
break;
+ default:
+ handled = true;
+ break;
}
}
}
diff --git a/src/Avalonia.Animation/Animator`1.cs b/src/Avalonia.Animation/Animator`1.cs
index 7036355ab4..dde69cbd65 100644
--- a/src/Avalonia.Animation/Animator`1.cs
+++ b/src/Avalonia.Animation/Animator`1.cs
@@ -19,7 +19,7 @@ namespace Avalonia.Animation
///
/// List of type-converted keyframes.
///
- private readonly IDictionary _convertedKeyframes = new SortedDictionary();
+ private readonly SortedList _convertedKeyframes = new SortedList();
private bool _isVerfifiedAndConverted;
@@ -134,7 +134,7 @@ namespace Avalonia.Animation
Cue _normalizedCue = k.Cue;
- if (k.timeSpanSet)
+ if (k.TimingMode == KeyFrameTimingMode.TimeSpan)
{
_normalizedCue = new Cue(k.KeyTime.Ticks / animation.Duration.Ticks);
}
diff --git a/src/Avalonia.Animation/Cue.cs b/src/Avalonia.Animation/Cue.cs
index fe36b13495..5a95c108e3 100644
--- a/src/Avalonia.Animation/Cue.cs
+++ b/src/Avalonia.Animation/Cue.cs
@@ -10,7 +10,7 @@ namespace Avalonia.Animation
/// A Cue object for .
///
[TypeConverter(typeof(CueTypeConverter))]
- public struct Cue : IEquatable, IEquatable
+ public readonly struct Cue : IEquatable, IEquatable
{
///
/// The normalized percent value, ranging from 0.0 to 1.0
diff --git a/src/Avalonia.Animation/KeyFrame.cs b/src/Avalonia.Animation/KeyFrame.cs
index 46be119c36..ea04aa0aab 100644
--- a/src/Avalonia.Animation/KeyFrame.cs
+++ b/src/Avalonia.Animation/KeyFrame.cs
@@ -7,6 +7,11 @@ using Avalonia.Collections;
namespace Avalonia.Animation
{
+ internal enum KeyFrameTimingMode
+ {
+ TimeSpan = 1,
+ Cue
+ }
///
/// Stores data regarding a specific key
@@ -14,7 +19,6 @@ namespace Avalonia.Animation
///
public class KeyFrame : AvaloniaList
{
- internal bool timeSpanSet, cueSet;
private TimeSpan _ktimeSpan;
private Cue _kCue;
@@ -30,6 +34,8 @@ namespace Avalonia.Animation
{
}
+ internal KeyFrameTimingMode TimingMode { get; private set; }
+
///
/// Gets or sets the key time of this .
///
@@ -42,11 +48,11 @@ namespace Avalonia.Animation
}
set
{
- if (cueSet)
+ if (TimingMode == KeyFrameTimingMode.Cue)
{
throw new InvalidOperationException($"You can only set either {nameof(KeyTime)} or {nameof(Cue)}.");
}
- timeSpanSet = true;
+ TimingMode = KeyFrameTimingMode.TimeSpan;
_ktimeSpan = value;
}
}
@@ -63,11 +69,11 @@ namespace Avalonia.Animation
}
set
{
- if (timeSpanSet)
+ if (TimingMode == KeyFrameTimingMode.TimeSpan)
{
throw new InvalidOperationException($"You can only set either {nameof(KeyTime)} or {nameof(Cue)}.");
}
- cueSet = true;
+ TimingMode = KeyFrameTimingMode.Cue;
_kCue = value;
}
}