|
|
@ -83,7 +83,7 @@ namespace Avalonia.Animation |
|
|
private void InterpretKeyframes() |
|
|
private void InterpretKeyframes() |
|
|
{ |
|
|
{ |
|
|
var handlerList = new List<(Type type, AvaloniaProperty property)>(); |
|
|
var handlerList = new List<(Type type, AvaloniaProperty property)>(); |
|
|
var kfList = new List<AnimatorKeyFrame>(); |
|
|
var animatorKeyFrames = new List<AnimatorKeyFrame>(); |
|
|
|
|
|
|
|
|
foreach (var keyframe in this) |
|
|
foreach (var keyframe in this) |
|
|
{ |
|
|
{ |
|
|
@ -99,38 +99,43 @@ namespace Avalonia.Animation |
|
|
if (!handlerList.Contains((handler, setter.Property))) |
|
|
if (!handlerList.Contains((handler, setter.Property))) |
|
|
handlerList.Add((handler, setter.Property)); |
|
|
handlerList.Add((handler, setter.Property)); |
|
|
|
|
|
|
|
|
|
|
|
var cue = keyframe.Cue; |
|
|
|
|
|
|
|
|
|
|
|
if (keyframe.TimingMode == KeyFrameTimingMode.TimeSpan) |
|
|
|
|
|
{ |
|
|
|
|
|
cue = new Cue(keyframe.KeyTime.Ticks / Duration.Ticks); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
var newKF = new AnimatorKeyFrame() |
|
|
var newKF = new AnimatorKeyFrame() |
|
|
{ |
|
|
{ |
|
|
Handler = handler, |
|
|
AnimatorType = handler, |
|
|
Property = setter.Property, |
|
|
Property = setter.Property, |
|
|
Cue = keyframe.Cue, |
|
|
Cue = cue, |
|
|
KeyTime = keyframe.KeyTime, |
|
|
|
|
|
TimingMode = keyframe.TimingMode, |
|
|
|
|
|
Value = setter.Value |
|
|
Value = setter.Value |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
kfList.Add(newKF); |
|
|
animatorKeyFrames.Add(newKF); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var newAnimatorInstances = new List<(Type handler, AvaloniaProperty prop, IAnimator inst)>(); |
|
|
var newAnimatorInstances = new List<IAnimator>(); |
|
|
|
|
|
|
|
|
foreach (var (handlerType, property) in handlerList) |
|
|
foreach (var (handlerType, property) in handlerList) |
|
|
{ |
|
|
{ |
|
|
var newInstance = (IAnimator)Activator.CreateInstance(handlerType); |
|
|
var newInstance = (IAnimator)Activator.CreateInstance(handlerType); |
|
|
newInstance.Property = property; |
|
|
newInstance.Property = property; |
|
|
newAnimatorInstances.Add((handlerType, property, newInstance)); |
|
|
newAnimatorInstances.Add(newInstance); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
foreach (var kf in kfList) |
|
|
foreach (var keyframe in animatorKeyFrames) |
|
|
{ |
|
|
{ |
|
|
var parent = newAnimatorInstances.First(p => p.handler == kf.Handler && |
|
|
var animator = newAnimatorInstances.First(a => a.GetType() == keyframe.AnimatorType && |
|
|
p.prop == kf.Property); |
|
|
a.Property == keyframe.Property); |
|
|
parent.inst.Add(kf); |
|
|
animator.Add(keyframe); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
foreach(var instance in newAnimatorInstances) |
|
|
foreach(var instance in newAnimatorInstances) |
|
|
_animators.Add(instance.inst); |
|
|
_animators.Add(instance); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|