|
|
|
@ -29,6 +29,9 @@ namespace Avalonia.Animation |
|
|
|
private bool _transitionsEnabled = true; |
|
|
|
private bool _isSubscribedToTransitionsCollection = false; |
|
|
|
private Dictionary<ITransition, TransitionState>? _transitionState; |
|
|
|
private NotifyCollectionChangedEventHandler? _collectionChanged; |
|
|
|
private NotifyCollectionChangedEventHandler TransitionsCollectionChangedHandler => |
|
|
|
_collectionChanged ??= TransitionsCollectionChanged; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets or sets the clock which controls the animations on the control.
|
|
|
|
@ -61,14 +64,14 @@ namespace Avalonia.Animation |
|
|
|
{ |
|
|
|
_transitionsEnabled = true; |
|
|
|
|
|
|
|
if (Transitions is object) |
|
|
|
if (Transitions is Transitions transitions) |
|
|
|
{ |
|
|
|
if (!_isSubscribedToTransitionsCollection) |
|
|
|
{ |
|
|
|
_isSubscribedToTransitionsCollection = true; |
|
|
|
Transitions.CollectionChanged += TransitionsCollectionChanged; |
|
|
|
transitions.CollectionChanged += TransitionsCollectionChangedHandler; |
|
|
|
} |
|
|
|
AddTransitions(Transitions); |
|
|
|
AddTransitions(transitions); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -86,14 +89,14 @@ namespace Avalonia.Animation |
|
|
|
{ |
|
|
|
_transitionsEnabled = false; |
|
|
|
|
|
|
|
if (Transitions is object) |
|
|
|
if (Transitions is Transitions transitions) |
|
|
|
{ |
|
|
|
if (_isSubscribedToTransitionsCollection) |
|
|
|
{ |
|
|
|
_isSubscribedToTransitionsCollection = false; |
|
|
|
Transitions.CollectionChanged -= TransitionsCollectionChanged; |
|
|
|
transitions.CollectionChanged -= TransitionsCollectionChangedHandler; |
|
|
|
} |
|
|
|
RemoveTransitions(Transitions); |
|
|
|
RemoveTransitions(transitions); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -120,7 +123,7 @@ namespace Avalonia.Animation |
|
|
|
toAdd = newTransitions.Except(oldTransitions).ToList(); |
|
|
|
} |
|
|
|
|
|
|
|
newTransitions.CollectionChanged += TransitionsCollectionChanged; |
|
|
|
newTransitions.CollectionChanged += TransitionsCollectionChangedHandler; |
|
|
|
_isSubscribedToTransitionsCollection = true; |
|
|
|
AddTransitions(toAdd); |
|
|
|
} |
|
|
|
@ -134,19 +137,19 @@ namespace Avalonia.Animation |
|
|
|
toRemove = oldTransitions.Except(newTransitions).ToList(); |
|
|
|
} |
|
|
|
|
|
|
|
oldTransitions.CollectionChanged -= TransitionsCollectionChanged; |
|
|
|
oldTransitions.CollectionChanged -= TransitionsCollectionChangedHandler; |
|
|
|
RemoveTransitions(toRemove); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (_transitionsEnabled && |
|
|
|
Transitions is object && |
|
|
|
Transitions is Transitions transitions && |
|
|
|
_transitionState is object && |
|
|
|
!change.Property.IsDirect && |
|
|
|
change.Priority > BindingPriority.Animation) |
|
|
|
{ |
|
|
|
for (var i = Transitions.Count -1; i >= 0; --i) |
|
|
|
for (var i = transitions.Count - 1; i >= 0; --i) |
|
|
|
{ |
|
|
|
var transition = Transitions[i]; |
|
|
|
var transition = transitions[i]; |
|
|
|
|
|
|
|
if (transition.Property == change.Property && |
|
|
|
_transitionState.TryGetValue(transition, out var state)) |
|
|
|
@ -166,11 +169,11 @@ namespace Avalonia.Animation |
|
|
|
{ |
|
|
|
oldValue = animatedValue; |
|
|
|
} |
|
|
|
|
|
|
|
var clock = Clock ?? AvaloniaLocator.Current.GetRequiredService<IGlobalClock>(); |
|
|
|
state.Instance?.Dispose(); |
|
|
|
state.Instance = transition.Apply( |
|
|
|
this, |
|
|
|
Clock ?? AvaloniaLocator.Current.GetRequiredService<IGlobalClock>(), |
|
|
|
clock, |
|
|
|
oldValue, |
|
|
|
newValue); |
|
|
|
return; |
|
|
|
|