misc:Refactor the WHAnimationHelper class structure to clearly define its responsibilities.
This commit is contained in:
46
src/Ursa/Helpers/NavMenuAnimationHelper.cs
Normal file
46
src/Ursa/Helpers/NavMenuAnimationHelper.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Animation;
|
||||
using Avalonia.Animation.Easings;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Layout;
|
||||
using Avalonia.Styling;
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace Ursa.Helpers;
|
||||
|
||||
public class NavMenuAnimationHelper(NavMenu control) : WHAnimationHelper(control, NavMenu.IsHorizontalCollapsedProperty)
|
||||
{
|
||||
protected override Animation CreateAnimation(Size oldValue, Size newValue)
|
||||
{
|
||||
if (oldValue.Width > newValue.Width)
|
||||
{
|
||||
newValue = newValue.WithWidth(newValue.Width + 20);
|
||||
}
|
||||
|
||||
return new Animation
|
||||
{
|
||||
Duration = TimeSpan.FromMilliseconds(300),
|
||||
Easing = new CubicEaseInOut(),
|
||||
FillMode = FillMode.None,
|
||||
Children =
|
||||
{
|
||||
new KeyFrame
|
||||
{
|
||||
Cue = new Cue(0.0),
|
||||
Setters =
|
||||
{
|
||||
new Setter(Layoutable.WidthProperty, oldValue.Width)
|
||||
}
|
||||
},
|
||||
new KeyFrame
|
||||
{
|
||||
Cue = new Cue(1.0),
|
||||
Setters =
|
||||
{
|
||||
new Setter(Layoutable.WidthProperty, newValue.Width)
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ using Avalonia.Styling;
|
||||
using Avalonia.Threading;
|
||||
using Avalonia.VisualTree;
|
||||
|
||||
namespace Ursa.Controls;
|
||||
namespace Ursa.Helpers;
|
||||
|
||||
public class WHAnimationHelper(Control control, AvaloniaProperty property)
|
||||
{
|
||||
@@ -41,7 +41,6 @@ public class WHAnimationHelper(Control control, AvaloniaProperty property)
|
||||
var oldValue = control.DesiredSize;
|
||||
control.UpdateLayout();
|
||||
var newValue = control.DesiredSize;
|
||||
newValue = newValue.WithWidth(newValue.Width + 20);
|
||||
control.InvalidateArrange();
|
||||
var animation = CreateAnimation(oldValue, newValue);
|
||||
animation.RunAsync(control, _cancellationTokenSource.Token);
|
||||
Reference in New Issue
Block a user