Browse Source

Added AvaloniaObject.IsAnimating(property).

Added a method to test whether a property on an object is currently animating.
pull/1306/head
Steven Kirk 8 years ago
parent
commit
409e40c8be
  1. 13
      src/Avalonia.Base/AvaloniaObject.cs
  2. 7
      src/Avalonia.Base/IAvaloniaObject.cs
  3. 2
      src/Avalonia.Base/PriorityValue.cs
  4. 40
      tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs
  5. 12
      tests/Avalonia.Base.UnitTests/DirectPropertyTests.cs
  6. 5
      tests/Avalonia.Styling.UnitTests/SelectorTests_Child.cs
  7. 5
      tests/Avalonia.Styling.UnitTests/SelectorTests_Descendent.cs
  8. 5
      tests/Avalonia.Styling.UnitTests/TestControlBase.cs
  9. 5
      tests/Avalonia.Styling.UnitTests/TestTemplatedControl.cs

13
src/Avalonia.Base/AvaloniaObject.cs

@ -225,6 +225,19 @@ namespace Avalonia
return (T)GetValue((AvaloniaProperty)property);
}
/// <summary>
/// Checks whether a <see cref="AvaloniaProperty"/> is animating.
/// </summary>
/// <param name="property">The property.</param>
/// <returns>True if the property is animating, otherwise false.</returns>
public bool IsAnimating(AvaloniaProperty property)
{
Contract.Requires<ArgumentNullException>(property != null);
VerifyAccess();
return _values.TryGetValue(property, out PriorityValue value) ? value.IsAnimating : false;
}
/// <summary>
/// Checks whether a <see cref="AvaloniaProperty"/> is set on this object.
/// </summary>

7
src/Avalonia.Base/IAvaloniaObject.cs

@ -31,6 +31,13 @@ namespace Avalonia
/// <returns>The value.</returns>
T GetValue<T>(AvaloniaProperty<T> property);
/// <summary>
/// Checks whether a <see cref="AvaloniaProperty"/> is animating.
/// </summary>
/// <param name="property">The property.</param>
/// <returns>True if the property is animating, otherwise false.</returns>
bool IsAnimating(AvaloniaProperty property);
/// <summary>
/// Checks whether a <see cref="AvaloniaProperty"/> is set on this object.
/// </summary>

2
src/Avalonia.Base/PriorityValue.cs

@ -52,6 +52,8 @@ namespace Avalonia
_validate = validate;
}
public bool IsAnimating => ValuePriority < 0 && GetLevel(ValuePriority).ActiveBindingIndex != -1;
/// <summary>
/// Gets the owner of the value.
/// </summary>

40
tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs

@ -387,6 +387,46 @@ namespace Avalonia.Base.UnitTests
}
}
[Fact]
public void IsAnimating_On_Property_With_No_Value_Returns_False()
{
var target = new Class1();
Assert.False(target.IsAnimating(Class1.FooProperty));
}
[Fact]
public void IsAnimating_On_Property_With_Animation_Value_Returns_False()
{
var target = new Class1();
target.SetValue(Class1.FooProperty, "foo", BindingPriority.Animation);
Assert.False(target.IsAnimating(Class1.FooProperty));
}
[Fact]
public void IsAnimating_On_Property_With_Non_Animation_Binding_Returns_False()
{
var target = new Class1();
var source = new Subject<string>();
target.Bind(Class1.FooProperty, source, BindingPriority.LocalValue);
Assert.False(target.IsAnimating(Class1.FooProperty));
}
[Fact]
public void IsAnimating_On_Property_With_Animation_Binding_Returns_True()
{
var target = new Class1();
var source = new BehaviorSubject<string>("foo");
target.Bind(Class1.FooProperty, source, BindingPriority.Animation);
Assert.True(target.IsAnimating(Class1.FooProperty));
}
/// <summary>
/// Returns an observable that returns a single value but does not complete.
/// </summary>

12
tests/Avalonia.Base.UnitTests/DirectPropertyTests.cs

@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Reactive.Subjects;
using Avalonia.Data;
using Xunit;
@ -70,6 +71,17 @@ namespace Avalonia.Base.UnitTests
Assert.Same(p1.Initialized, p2.Initialized);
}
[Fact]
public void IsAnimating_On_DirectProperty_With_Binding_Returns_False()
{
var target = new Class1();
var source = new BehaviorSubject<string>("foo");
target.Bind(Class1.FooProperty, source, BindingPriority.Animation);
Assert.False(target.IsAnimating(Class1.FooProperty));
}
private class Class1 : AvaloniaObject
{
public static readonly DirectProperty<Class1, string> FooProperty =

5
tests/Avalonia.Styling.UnitTests/SelectorTests_Child.cs

@ -135,6 +135,11 @@ namespace Avalonia.Styling.UnitTests
throw new NotImplementedException();
}
public bool IsAnimating(AvaloniaProperty property)
{
throw new NotImplementedException();
}
public bool IsSet(AvaloniaProperty property)
{
throw new NotImplementedException();

5
tests/Avalonia.Styling.UnitTests/SelectorTests_Descendent.cs

@ -165,6 +165,11 @@ namespace Avalonia.Styling.UnitTests
throw new NotImplementedException();
}
public bool IsAnimating(AvaloniaProperty property)
{
throw new NotImplementedException();
}
public bool IsSet(AvaloniaProperty property)
{
throw new NotImplementedException();

5
tests/Avalonia.Styling.UnitTests/TestControlBase.cs

@ -59,6 +59,11 @@ namespace Avalonia.Styling.UnitTests
throw new NotImplementedException();
}
public bool IsAnimating(AvaloniaProperty property)
{
throw new NotImplementedException();
}
public bool IsSet(AvaloniaProperty property)
{
throw new NotImplementedException();

5
tests/Avalonia.Styling.UnitTests/TestTemplatedControl.cs

@ -67,6 +67,11 @@ namespace Avalonia.Styling.UnitTests
throw new NotImplementedException();
}
public bool IsAnimating(AvaloniaProperty property)
{
throw new NotImplementedException();
}
public bool IsSet(AvaloniaProperty property)
{
throw new NotImplementedException();

Loading…
Cancel
Save