diff --git a/src/Avalonia.Animation/Animatable.cs b/src/Avalonia.Animation/Animatable.cs index 03a7a32e02..516f383b92 100644 --- a/src/Avalonia.Animation/Animatable.cs +++ b/src/Avalonia.Animation/Animatable.cs @@ -18,25 +18,10 @@ namespace Avalonia.Animation public static readonly StyledProperty ClockProperty = AvaloniaProperty.Register(nameof(Clock), inherits: true); - /// - /// Defines the property. - /// - public static readonly DirectProperty PlayStateProperty = - AvaloniaProperty.RegisterDirect( - nameof(PlayState), - o => o.PlayState, - (o, v) => o.PlayState = v); - - private PlayState _playState = PlayState.Run; - - /// - /// Gets or sets the state of the animation for this - /// control. - /// - public PlayState PlayState + public IClock Clock { - get { return _playState; } - set { SetAndRaise(PlayStateProperty, ref _playState, value); } + get => GetValue(ClockProperty); + set => SetValue(ClockProperty, value); } /// @@ -72,7 +57,7 @@ namespace Avalonia.Animation if (match != null) { - match.Apply(this, Clock.GlobalClock, e.OldValue, e.NewValue); + match.Apply(this, Clock ?? Avalonia.Animation.Clock.GlobalClock, e.OldValue, e.NewValue); } } } diff --git a/src/Avalonia.Animation/AnimationInstance`1.cs b/src/Avalonia.Animation/AnimationInstance`1.cs index fe84dd879a..99ebbe752a 100644 --- a/src/Avalonia.Animation/AnimationInstance`1.cs +++ b/src/Avalonia.Animation/AnimationInstance`1.cs @@ -34,7 +34,7 @@ namespace Avalonia.Animation private Action _onCompleteAction; private Func _interpolator; private IDisposable _timerSubscription; - private readonly Clock _clock; + private readonly IClock _clock; public AnimationInstance(Animation animation, Animatable control, Animator animator, Clock clock, Action OnComplete, Func Interpolator) { @@ -117,7 +117,7 @@ namespace Avalonia.Animation private void DoPlayStatesAndTime(TimeSpan systemTime) { - if (_clock.PlayState == PlayState.Stop || _targetControl.PlayState == PlayState.Stop) + if (_clock.PlayState == PlayState.Stop) DoComplete(); if (!_gotFirstKFValue) diff --git a/src/Avalonia.Animation/TransitionInstance.cs b/src/Avalonia.Animation/TransitionInstance.cs index b0c927f3cd..ad87ad7010 100644 --- a/src/Avalonia.Animation/TransitionInstance.cs +++ b/src/Avalonia.Animation/TransitionInstance.cs @@ -18,7 +18,7 @@ namespace Avalonia.Animation private IDisposable timerSubscription; private TimeSpan startTime; private TimeSpan duration; - private readonly Clock _clock; + private readonly IClock _clock; public TransitionInstance(Clock clock, TimeSpan Duration) { diff --git a/src/Avalonia.Styling/Styling/Style.cs b/src/Avalonia.Styling/Styling/Style.cs index a033184588..62b3ca72ae 100644 --- a/src/Avalonia.Styling/Styling/Style.cs +++ b/src/Avalonia.Styling/Styling/Style.cs @@ -111,17 +111,20 @@ namespace Avalonia.Styling { var subs = GetSubscriptions(control); - foreach (var animation in Animations) + if (control is Animatable animatable) { - IObservable obsMatch = match.ObservableResult; - - if (match.ImmediateResult == true) + foreach (var animation in Animations) { - obsMatch = Observable.Return(true); - } + IObservable obsMatch = match.ObservableResult; - var sub = animation.Apply((Animatable)control, Clock.GlobalClock, obsMatch); - subs.Add(sub); + if (match.ImmediateResult == true) + { + obsMatch = Observable.Return(true); + } + + var sub = animation.Apply(animatable, animatable.Clock ?? Clock.GlobalClock, obsMatch); + subs.Add(sub); + } } foreach (var setter in Setters) diff --git a/src/Avalonia.Visuals/Animation/TransformAnimator.cs b/src/Avalonia.Visuals/Animation/TransformAnimator.cs index 4476058bfe..6336c49dc5 100644 --- a/src/Avalonia.Visuals/Animation/TransformAnimator.cs +++ b/src/Avalonia.Visuals/Animation/TransformAnimator.cs @@ -12,7 +12,7 @@ namespace Avalonia.Animation DoubleAnimator childKeyFrames; /// - public override IDisposable Apply(Animation animation, Animatable control, Clock clock, IObservable obsMatch, Action onComplete) + public override IDisposable Apply(Animation animation, Animatable control, IClock clock, IObservable obsMatch, Action onComplete) { var ctrl = (Visual)control;