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 ); } }