|
@@ -116,13 +116,21 @@ namespace Avalonia.Styling
|
|
|
if (match.IsMatch)
|
|
if (match.IsMatch)
|
|
|
{
|
|
{
|
|
|
var controlSubscriptions = GetSubscriptions(control);
|
|
var controlSubscriptions = GetSubscriptions(control);
|
|
|
-
|
|
|
|
|
- var subs = new CompositeDisposable(Setters.Count + Animations.Count);
|
|
|
|
|
|
|
|
|
|
- if (control is Animatable animatable)
|
|
|
|
|
|
|
+ var animatable = control as Animatable;
|
|
|
|
|
+
|
|
|
|
|
+ var setters = Setters;
|
|
|
|
|
+ var settersCount = setters.Count;
|
|
|
|
|
+ var animations = Animations;
|
|
|
|
|
+ var animationsCount = animations.Count;
|
|
|
|
|
+
|
|
|
|
|
+ var subs = new CompositeDisposable(settersCount + (animatable != null ? animationsCount : 0) + 1);
|
|
|
|
|
+
|
|
|
|
|
+ if (animatable != null)
|
|
|
{
|
|
{
|
|
|
- foreach (var animation in Animations)
|
|
|
|
|
|
|
+ for (var i = 0; i < animationsCount; i++)
|
|
|
{
|
|
{
|
|
|
|
|
+ var animation = animations[i];
|
|
|
var obsMatch = match.Activator;
|
|
var obsMatch = match.Activator;
|
|
|
|
|
|
|
|
if (match.Result == SelectorMatchResult.AlwaysThisType ||
|
|
if (match.Result == SelectorMatchResult.AlwaysThisType ||
|
|
@@ -133,17 +141,19 @@ namespace Avalonia.Styling
|
|
|
|
|
|
|
|
var sub = animation.Apply(animatable, null, obsMatch);
|
|
var sub = animation.Apply(animatable, null, obsMatch);
|
|
|
subs.Add(sub);
|
|
subs.Add(sub);
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- foreach (var setter in Setters)
|
|
|
|
|
|
|
+ for (var i = 0; i < settersCount; i++)
|
|
|
{
|
|
{
|
|
|
|
|
+ var setter = setters[i];
|
|
|
var sub = setter.Apply(this, control, match.Activator);
|
|
var sub = setter.Apply(this, control, match.Activator);
|
|
|
subs.Add(sub);
|
|
subs.Add(sub);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ subs.Add(Disposable.Create((subs, Subscriptions) , state => state.Subscriptions.Remove(state.subs)));
|
|
|
|
|
+
|
|
|
controlSubscriptions.Add(subs);
|
|
controlSubscriptions.Add(subs);
|
|
|
- controlSubscriptions.Add(Disposable.Create(() => Subscriptions.Remove(subs)));
|
|
|
|
|
Subscriptions.Add(subs);
|
|
Subscriptions.Add(subs);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -151,18 +161,23 @@ namespace Avalonia.Styling
|
|
|
}
|
|
}
|
|
|
else if (control == container)
|
|
else if (control == container)
|
|
|
{
|
|
{
|
|
|
|
|
+ var setters = Setters;
|
|
|
|
|
+ var settersCount = setters.Count;
|
|
|
|
|
+
|
|
|
var controlSubscriptions = GetSubscriptions(control);
|
|
var controlSubscriptions = GetSubscriptions(control);
|
|
|
|
|
|
|
|
- var subs = new CompositeDisposable(Setters.Count);
|
|
|
|
|
|
|
+ var subs = new CompositeDisposable(settersCount + 1);
|
|
|
|
|
|
|
|
- foreach (var setter in Setters)
|
|
|
|
|
|
|
+ for (var i = 0; i < settersCount; i++)
|
|
|
{
|
|
{
|
|
|
|
|
+ var setter = setters[i];
|
|
|
var sub = setter.Apply(this, control, null);
|
|
var sub = setter.Apply(this, control, null);
|
|
|
subs.Add(sub);
|
|
subs.Add(sub);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ subs.Add(Disposable.Create((subs, Subscriptions), state => state.Subscriptions.Remove(state.subs)));
|
|
|
|
|
+
|
|
|
controlSubscriptions.Add(subs);
|
|
controlSubscriptions.Add(subs);
|
|
|
- controlSubscriptions.Add(Disposable.Create(() => Subscriptions.Remove(subs)));
|
|
|
|
|
Subscriptions.Add(subs);
|
|
Subscriptions.Add(subs);
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|