Browse Source

Remove tags from style activators.

They're no longer needed.
pull/8600/head
Steven Kirk 4 years ago
parent
commit
fc33707003
  1. 6
      src/Avalonia.Base/Styling/Activators/AndActivator.cs
  2. 9
      src/Avalonia.Base/Styling/Activators/IStyleActivator.cs
  3. 3
      src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs
  4. 4
      src/Avalonia.Base/Styling/Activators/NotActivator.cs
  5. 6
      src/Avalonia.Base/Styling/Activators/OrActivator.cs
  6. 8
      src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs
  7. 2
      src/Avalonia.Base/Styling/StyleInstance.cs
  8. 2
      tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs
  9. 2
      tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs

6
src/Avalonia.Base/Styling/Activators/AndActivator.cs

@ -20,7 +20,7 @@ namespace Avalonia.Styling.Activators
_sources.Add(activator);
}
void IStyleActivatorSink.OnNext(bool value, int tag) => ReevaluateIsActive();
void IStyleActivatorSink.OnNext(bool value) => ReevaluateIsActive();
protected override bool EvaluateIsActive()
{
@ -44,11 +44,9 @@ namespace Avalonia.Styling.Activators
{
if (_sources is object)
{
var i = 0;
foreach (var source in _sources)
{
source.Subscribe(this, i++);
source.Subscribe(this);
}
}
}

9
src/Avalonia.Base/Styling/Activators/IStyleActivator.cs

@ -9,11 +9,11 @@ namespace Avalonia.Styling.Activators
/// <remarks>
/// A style activator is very similar to an `IObservable{bool}` but is optimized for the
/// particular use-case of activating a style according to a selector. It differs from
/// an observable in two major ways:
/// an observable in three major ways:
///
/// - Can only have a single subscription
/// - The subscription can have a tag associated with it, allowing a subscriber to index
/// into a list of subscriptions without having to allocate additional objects.
/// - The activation state can be re-evaluated at any time by calling <see cref="GetIsActive"/>
/// - No error or completion messages
/// </remarks>
[Unstable]
public interface IStyleActivator : IDisposable
@ -38,11 +38,10 @@ namespace Avalonia.Styling.Activators
/// Subscribes to the activator.
/// </summary>
/// <param name="sink">The listener.</param>
/// <param name="tag">An optional tag.</param>
/// <remarks>
/// This method should not call <see cref="IStyleActivatorSink.OnNext(bool, int)"/>.
/// </remarks>
void Subscribe(IStyleActivatorSink sink, int tag = 0);
void Subscribe(IStyleActivatorSink sink);
/// <summary>
/// Unsubscribes from the activator.

3
src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs

@ -12,7 +12,6 @@ namespace Avalonia.Styling.Activators
/// Called when the subscribed activator value changes.
/// </summary>
/// <param name="value">The new value.</param>
/// <param name="tag">The subscription tag.</param>
void OnNext(bool value, int tag);
void OnNext(bool value);
}
}

4
src/Avalonia.Base/Styling/Activators/NotActivator.cs

@ -7,9 +7,9 @@
{
private readonly IStyleActivator _source;
public NotActivator(IStyleActivator source) => _source = source;
void IStyleActivatorSink.OnNext(bool value, int tag) => ReevaluateIsActive();
void IStyleActivatorSink.OnNext(bool value) => ReevaluateIsActive();
protected override bool EvaluateIsActive() => !_source.GetIsActive();
protected override void Initialize() => _source.Subscribe(this, 0);
protected override void Initialize() => _source.Subscribe(this);
protected override void Deinitialize() => _source.Unsubscribe(this);
}
}

6
src/Avalonia.Base/Styling/Activators/OrActivator.cs

@ -18,7 +18,7 @@ namespace Avalonia.Styling.Activators
_sources.Add(activator);
}
void IStyleActivatorSink.OnNext(bool value, int tag) => ReevaluateIsActive();
void IStyleActivatorSink.OnNext(bool value) => ReevaluateIsActive();
protected override bool EvaluateIsActive()
{
@ -38,11 +38,9 @@ namespace Avalonia.Styling.Activators
{
if (_sources is object)
{
var i = 0;
foreach (var source in _sources)
{
source.Subscribe(this, i++);
source.Subscribe(this);
}
}
}

8
src/Avalonia.Base/Styling/Activators/StyleActivatorBase.cs

@ -6,20 +6,18 @@ namespace Avalonia.Styling.Activators
internal abstract class StyleActivatorBase : IStyleActivator
{
private IStyleActivatorSink? _sink;
private int _tag;
private bool _value;
public bool GetIsActive() => _value = EvaluateIsActive();
public bool IsSubscribed => _sink is not null;
public void Subscribe(IStyleActivatorSink sink, int tag = 0)
public void Subscribe(IStyleActivatorSink sink)
{
if (_sink is null)
{
Initialize();
_sink = sink;
_tag = tag;
}
else
{
@ -70,14 +68,14 @@ namespace Avalonia.Styling.Activators
if (value != _value)
{
_value = value;
_sink?.OnNext(value, _tag);
_sink?.OnNext(value);
}
return value;
}
/// <summary>
/// Called in response to a <see cref="Subscribe(IStyleActivatorSink, int)"/> to allow the
/// Called in response to a <see cref="Subscribe(IStyleActivatorSink)"/> to allow the
/// derived class to set up any necessary subscriptions.
/// </summary>
protected abstract void Initialize();

2
src/Avalonia.Base/Styling/StyleInstance.cs

@ -79,7 +79,7 @@ namespace Avalonia.Styling
public new void MakeShared() => base.MakeShared();
void IStyleActivatorSink.OnNext(bool value, int tag)
void IStyleActivatorSink.OnNext(bool value)
{
Owner?.OnFrameActivationChanged(this);
_animationTrigger?.OnNext(value);

2
tests/Avalonia.Base.UnitTests/Styling/SelectorTests_Nesting.cs

@ -300,7 +300,7 @@ namespace Avalonia.Base.UnitTests.Styling
public bool Active { get; private set; }
public void OnNext(bool value, int tag) => Active = value;
public void OnNext(bool value) => Active = value;
}
}
}

2
tests/Avalonia.Base.UnitTests/Styling/StyleActivatorExtensions.cs

@ -42,7 +42,7 @@ namespace Avalonia.Base.UnitTests.Styling
observer.OnNext(_source.GetIsActive());
}
void IStyleActivatorSink.OnNext(bool value, int tag)
void IStyleActivatorSink.OnNext(bool value)
{
PublishNext(value);
}

Loading…
Cancel
Save