From b0368c80b29e7ea7fcc99f32c53252c2218fbc4b Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 6 Sep 2018 23:43:06 -0500 Subject: [PATCH] Enable transitions to run on custom clocks. --- src/Avalonia.Animation/Animatable.cs | 2 +- src/Avalonia.Animation/ITransition.cs | 2 +- src/Avalonia.Animation/TransitionInstance.cs | 8 +++++--- src/Avalonia.Animation/Transition`1.cs | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Animation/Animatable.cs b/src/Avalonia.Animation/Animatable.cs index e51103aa55..5208356570 100644 --- a/src/Avalonia.Animation/Animatable.cs +++ b/src/Avalonia.Animation/Animatable.cs @@ -69,7 +69,7 @@ namespace Avalonia.Animation if (match != null) { - match.Apply(this, e.OldValue, e.NewValue); + match.Apply(this, Clock.GlobalClock, e.OldValue, e.NewValue); } } } diff --git a/src/Avalonia.Animation/ITransition.cs b/src/Avalonia.Animation/ITransition.cs index e2ffe7fc6e..7afaa2325a 100644 --- a/src/Avalonia.Animation/ITransition.cs +++ b/src/Avalonia.Animation/ITransition.cs @@ -13,7 +13,7 @@ namespace Avalonia.Animation /// /// Applies the transition to the specified . /// - IDisposable Apply(Animatable control, object oldValue, object newValue); + IDisposable Apply(Animatable control, Clock clock, object oldValue, object newValue); /// /// Gets the property to be animated. diff --git a/src/Avalonia.Animation/TransitionInstance.cs b/src/Avalonia.Animation/TransitionInstance.cs index 4c61adea28..b0c927f3cd 100644 --- a/src/Avalonia.Animation/TransitionInstance.cs +++ b/src/Avalonia.Animation/TransitionInstance.cs @@ -18,10 +18,12 @@ namespace Avalonia.Animation private IDisposable timerSubscription; private TimeSpan startTime; private TimeSpan duration; + private readonly Clock _clock; - public TransitionInstance(TimeSpan Duration) + public TransitionInstance(Clock clock, TimeSpan Duration) { duration = Duration; + _clock = clock; } private void TimerTick(TimeSpan t) @@ -45,8 +47,8 @@ namespace Avalonia.Animation protected override void Subscribed() { - startTime = Clock.GlobalClock.CurrentTime; - timerSubscription = Clock.GlobalClock.Subscribe(TimerTick); + startTime = _clock.CurrentTime; + timerSubscription = _clock.Subscribe(TimerTick); PublishNext(0.0d); } } diff --git a/src/Avalonia.Animation/Transition`1.cs b/src/Avalonia.Animation/Transition`1.cs index 4b01c54f5c..23df7f9807 100644 --- a/src/Avalonia.Animation/Transition`1.cs +++ b/src/Avalonia.Animation/Transition`1.cs @@ -49,9 +49,9 @@ namespace Avalonia.Animation public abstract IObservable DoTransition(IObservable progress, T oldValue, T newValue); /// - public virtual IDisposable Apply(Animatable control, object oldValue, object newValue) + public virtual IDisposable Apply(Animatable control, Clock clock, object oldValue, object newValue) { - var transition = DoTransition(new TransitionInstance(Duration), (T)oldValue, (T)newValue); + var transition = DoTransition(new TransitionInstance(clock, Duration), (T)oldValue, (T)newValue); return control.Bind((AvaloniaProperty)Property, transition, Data.BindingPriority.Animation); }