diff --git a/StabilityMatrix.Avalonia/Animations/BetterSlideNavigationTransition.cs b/StabilityMatrix.Avalonia/Animations/BetterSlideNavigationTransition.cs
index 3a729ab2..44796451 100644
--- a/StabilityMatrix.Avalonia/Animations/BetterSlideNavigationTransition.cs
+++ b/StabilityMatrix.Avalonia/Animations/BetterSlideNavigationTransition.cs
@@ -1,22 +1,25 @@
using System;
using System.Threading;
+using System.Threading.Tasks;
using Avalonia;
using Avalonia.Animation;
using Avalonia.Animation.Easings;
using Avalonia.Media;
using Avalonia.Styling;
using FluentAvalonia.UI.Media.Animation;
+using Projektanker.Icons.Avalonia;
namespace StabilityMatrix.Avalonia.Animations;
public class BetterSlideNavigationTransition : BaseTransitionInfo
{
public override TimeSpan Duration { get; set; } = TimeSpan.FromMilliseconds(167);
-
+
///
/// Gets or sets the type of animation effect to play during the slide transition.
///
- public SlideNavigationTransitionEffect Effect { get; set; } = SlideNavigationTransitionEffect.FromRight;
+ public SlideNavigationTransitionEffect Effect { get; set; } =
+ SlideNavigationTransitionEffect.FromRight;
///
/// Gets or sets the HorizontalOffset used when animating from the Left or Right
@@ -27,7 +30,12 @@ public class BetterSlideNavigationTransition : BaseTransitionInfo
/// Gets or sets the VerticalOffset used when animating from the Top or Bottom
///
public double FromVerticalOffset { get; set; } = 56;
-
+
+ ///
+ /// Gets or sets the easing function applied to the slide transition.
+ ///
+ public Easing Easing { get; set; } = new SplineEasing(0.1, 0.9, 0.2, 1.0);
+
public override async void RunAnimation(Animatable ctrl, CancellationToken cancellationToken)
{
double length = 0;
@@ -52,24 +60,26 @@ public class BetterSlideNavigationTransition : BaseTransitionInfo
var animation = new Animation
{
- Easing = new SplineEasing(0.1, 0.9, 0.2, 1.0),
+ Easing = Easing,
Children =
{
new KeyFrame
{
Setters =
{
- new Setter(isVertical ? TranslateTransform.YProperty : TranslateTransform.XProperty, length),
+ new Setter(
+ isVertical
+ ? TranslateTransform.YProperty
+ : TranslateTransform.XProperty,
+ length
+ ),
new Setter(Visual.OpacityProperty, 0d)
},
Cue = new Cue(0d)
},
new KeyFrame
{
- Setters=
- {
- new Setter(Visual.OpacityProperty, 1d)
- },
+ Setters = { new Setter(Visual.OpacityProperty, 1d) },
Cue = new Cue(0.05d)
},
new KeyFrame
@@ -77,7 +87,12 @@ public class BetterSlideNavigationTransition : BaseTransitionInfo
Setters =
{
new Setter(Visual.OpacityProperty, 1d),
- new Setter(isVertical ? TranslateTransform.YProperty : TranslateTransform.XProperty, 0.0)
+ new Setter(
+ isVertical
+ ? TranslateTransform.YProperty
+ : TranslateTransform.XProperty,
+ 0.0
+ )
},
Cue = new Cue(1d)
}
@@ -93,4 +108,22 @@ public class BetterSlideNavigationTransition : BaseTransitionInfo
visual.Opacity = 1;
}
}
+
+ public static BetterSlideNavigationTransition PageSlideFromLeft =>
+ new()
+ {
+ Duration = TimeSpan.FromMilliseconds(400),
+ Effect = SlideNavigationTransitionEffect.FromLeft,
+ FromHorizontalOffset = 150,
+ Easing = new SplineEasing(0.7, 0.4, 0.1, 0.2)
+ };
+
+ public static BetterSlideNavigationTransition PageSlideFromRight =>
+ new()
+ {
+ Duration = TimeSpan.FromMilliseconds(400),
+ Effect = SlideNavigationTransitionEffect.FromRight,
+ FromHorizontalOffset = 150,
+ Easing = new SplineEasing(0.7, 0.4, 0.1, 0.2)
+ };
}
diff --git a/StabilityMatrix.Avalonia/ViewModels/Settings/MainSettingsViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Settings/MainSettingsViewModel.cs
index 628ceb64..30b11dc7 100644
--- a/StabilityMatrix.Avalonia/ViewModels/Settings/MainSettingsViewModel.cs
+++ b/StabilityMatrix.Avalonia/ViewModels/Settings/MainSettingsViewModel.cs
@@ -371,10 +371,7 @@ public partial class MainSettingsViewModel : PageViewModelBase
Dispatcher.UIThread.Post(
() =>
settingsNavigationService.NavigateTo(
- new BetterSlideNavigationTransition
- {
- Effect = SlideNavigationTransitionEffect.FromRight
- }
+ BetterSlideNavigationTransition.PageSlideFromRight
)
);
}
diff --git a/StabilityMatrix.Avalonia/Views/SettingsPage.axaml.cs b/StabilityMatrix.Avalonia/Views/SettingsPage.axaml.cs
index 3bbac21d..f2737b3d 100644
--- a/StabilityMatrix.Avalonia/Views/SettingsPage.axaml.cs
+++ b/StabilityMatrix.Avalonia/Views/SettingsPage.axaml.cs
@@ -94,10 +94,7 @@ public partial class SettingsPage : UserControlBase
settingsNavigationService.NavigateTo(
viewModel,
- new BetterSlideNavigationTransition
- {
- Effect = SlideNavigationTransitionEffect.FromLeft
- }
+ BetterSlideNavigationTransition.PageSlideFromLeft
);
}
}