Browse Source

Allow clocks to be bindable and inherited down the logical tree.

pull/1715/head
Jeremy Koritzinsky 8 years ago
parent
commit
ec9c61bbbe
  1. 23
      src/Avalonia.Animation/Animatable.cs
  2. 4
      src/Avalonia.Animation/AnimationInstance`1.cs
  3. 2
      src/Avalonia.Animation/TransitionInstance.cs
  4. 19
      src/Avalonia.Styling/Styling/Style.cs
  5. 2
      src/Avalonia.Visuals/Animation/TransformAnimator.cs

23
src/Avalonia.Animation/Animatable.cs

@ -18,25 +18,10 @@ namespace Avalonia.Animation
public static readonly StyledProperty<IClock> ClockProperty = public static readonly StyledProperty<IClock> ClockProperty =
AvaloniaProperty.Register<Animatable, IClock>(nameof(Clock), inherits: true); AvaloniaProperty.Register<Animatable, IClock>(nameof(Clock), inherits: true);
/// <summary> public IClock Clock
/// Defines the <see cref="PlayState"/> property.
/// </summary>
public static readonly DirectProperty<Animatable, PlayState> PlayStateProperty =
AvaloniaProperty.RegisterDirect<Animatable, PlayState>(
nameof(PlayState),
o => o.PlayState,
(o, v) => o.PlayState = v);
private PlayState _playState = PlayState.Run;
/// <summary>
/// Gets or sets the state of the animation for this
/// control.
/// </summary>
public PlayState PlayState
{ {
get { return _playState; } get => GetValue(ClockProperty);
set { SetAndRaise(PlayStateProperty, ref _playState, value); } set => SetValue(ClockProperty, value);
} }
/// <summary> /// <summary>
@ -72,7 +57,7 @@ namespace Avalonia.Animation
if (match != null) if (match != null)
{ {
match.Apply(this, Clock.GlobalClock, e.OldValue, e.NewValue); match.Apply(this, Clock ?? Avalonia.Animation.Clock.GlobalClock, e.OldValue, e.NewValue);
} }
} }
} }

4
src/Avalonia.Animation/AnimationInstance`1.cs

@ -34,7 +34,7 @@ namespace Avalonia.Animation
private Action _onCompleteAction; private Action _onCompleteAction;
private Func<double, T, T> _interpolator; private Func<double, T, T> _interpolator;
private IDisposable _timerSubscription; private IDisposable _timerSubscription;
private readonly Clock _clock; private readonly IClock _clock;
public AnimationInstance(Animation animation, Animatable control, Animator<T> animator, Clock clock, Action OnComplete, Func<double, T, T> Interpolator) public AnimationInstance(Animation animation, Animatable control, Animator<T> animator, Clock clock, Action OnComplete, Func<double, T, T> Interpolator)
{ {
@ -117,7 +117,7 @@ namespace Avalonia.Animation
private void DoPlayStatesAndTime(TimeSpan systemTime) private void DoPlayStatesAndTime(TimeSpan systemTime)
{ {
if (_clock.PlayState == PlayState.Stop || _targetControl.PlayState == PlayState.Stop) if (_clock.PlayState == PlayState.Stop)
DoComplete(); DoComplete();
if (!_gotFirstKFValue) if (!_gotFirstKFValue)

2
src/Avalonia.Animation/TransitionInstance.cs

@ -18,7 +18,7 @@ namespace Avalonia.Animation
private IDisposable timerSubscription; private IDisposable timerSubscription;
private TimeSpan startTime; private TimeSpan startTime;
private TimeSpan duration; private TimeSpan duration;
private readonly Clock _clock; private readonly IClock _clock;
public TransitionInstance(Clock clock, TimeSpan Duration) public TransitionInstance(Clock clock, TimeSpan Duration)
{ {

19
src/Avalonia.Styling/Styling/Style.cs

@ -111,17 +111,20 @@ namespace Avalonia.Styling
{ {
var subs = GetSubscriptions(control); var subs = GetSubscriptions(control);
foreach (var animation in Animations) if (control is Animatable animatable)
{ {
IObservable<bool> obsMatch = match.ObservableResult; foreach (var animation in Animations)
if (match.ImmediateResult == true)
{ {
obsMatch = Observable.Return(true); IObservable<bool> obsMatch = match.ObservableResult;
}
var sub = animation.Apply((Animatable)control, Clock.GlobalClock, obsMatch); if (match.ImmediateResult == true)
subs.Add(sub); {
obsMatch = Observable.Return(true);
}
var sub = animation.Apply(animatable, animatable.Clock ?? Clock.GlobalClock, obsMatch);
subs.Add(sub);
}
} }
foreach (var setter in Setters) foreach (var setter in Setters)

2
src/Avalonia.Visuals/Animation/TransformAnimator.cs

@ -12,7 +12,7 @@ namespace Avalonia.Animation
DoubleAnimator childKeyFrames; DoubleAnimator childKeyFrames;
/// <inheritdoc/> /// <inheritdoc/>
public override IDisposable Apply(Animation animation, Animatable control, Clock clock, IObservable<bool> obsMatch, Action onComplete) public override IDisposable Apply(Animation animation, Animatable control, IClock clock, IObservable<bool> obsMatch, Action onComplete)
{ {
var ctrl = (Visual)control; var ctrl = (Visual)control;

Loading…
Cancel
Save