feat: add option to disable animation.

This commit is contained in:
rabbitism
2024-03-27 21:54:44 +08:00
parent 4c1befb7dd
commit 77f4a5e051
3 changed files with 39 additions and 12 deletions

View File

@@ -126,9 +126,12 @@ public partial class OverlayDialogHost
{ {
_modalCount--; _modalCount--;
HasModal = _modalCount > 0; HasModal = _modalCount > 0;
if (!IsAnimationDisabled)
{
await _maskDisappearAnimation.RunAsync(layer.Mask); await _maskDisappearAnimation.RunAsync(layer.Mask);
} }
} }
}
ResetZIndices(); ResetZIndices();
} }
@@ -156,7 +159,10 @@ public partial class OverlayDialogHost
SetToPosition(control); SetToPosition(control);
control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDialogControlClosing); control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDialogControlClosing);
control.AddHandler(DialogControlBase.LayerChangedEvent, OnDialogLayerChanged); control.AddHandler(DialogControlBase.LayerChangedEvent, OnDialogLayerChanged);
if (!IsAnimationDisabled)
{
_maskAppearAnimation.RunAsync(mask); _maskAppearAnimation.RunAsync(mask);
}
_modalCount++; _modalCount++;
HasModal = _modalCount > 0; HasModal = _modalCount > 0;
control.IsClosed = false; control.IsClosed = false;

View File

@@ -28,6 +28,12 @@ public partial class OverlayDialogHost
SetDrawerPosition(control); SetDrawerPosition(control);
control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDrawerControlClosing); control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDrawerControlClosing);
var animation = CreateAnimation(control.Bounds.Size, control.Position, true); var animation = CreateAnimation(control.Bounds.Size, control.Position, true);
if (IsAnimationDisabled)
{
ResetDrawerPosition(control, this.Bounds.Size);
}
else
{
if (mask is null) if (mask is null)
{ {
await animation.RunAsync(control); await animation.RunAsync(control);
@@ -37,6 +43,7 @@ public partial class OverlayDialogHost
await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask)); await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask));
} }
} }
}
internal async void AddModalDrawer(DrawerControlBase control) internal async void AddModalDrawer(DrawerControlBase control)
{ {
@@ -52,8 +59,15 @@ public partial class OverlayDialogHost
HasModal = _modalCount > 0; HasModal = _modalCount > 0;
control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDrawerControlClosing); control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDrawerControlClosing);
var animation = CreateAnimation(control.Bounds.Size, control.Position); var animation = CreateAnimation(control.Bounds.Size, control.Position);
if (IsAnimationDisabled)
{
ResetDrawerPosition(control, this.Bounds.Size);
}
else
{
await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask)); await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask));
} }
}
private void SetDrawerPosition(DrawerControlBase control) private void SetDrawerPosition(DrawerControlBase control)
{ {
@@ -150,16 +164,21 @@ public partial class OverlayDialogHost
_modalCount--; _modalCount--;
HasModal = _modalCount > 0; HasModal = _modalCount > 0;
layer.Mask.RemoveHandler(PointerPressedEvent, ClickMaskToCloseDialog); layer.Mask.RemoveHandler(PointerPressedEvent, ClickMaskToCloseDialog);
if (!IsAnimationDisabled)
{
var disappearAnimation = CreateAnimation(control.Bounds.Size, control.Position, false); var disappearAnimation = CreateAnimation(control.Bounds.Size, control.Position, false);
await Task.WhenAll(disappearAnimation.RunAsync(control), _maskDisappearAnimation.RunAsync(layer.Mask)); await Task.WhenAll(disappearAnimation.RunAsync(control), _maskDisappearAnimation.RunAsync(layer.Mask));
}
Children.Remove(layer.Mask); Children.Remove(layer.Mask);
} }
else else
{
if (!IsAnimationDisabled)
{ {
var disappearAnimation = CreateAnimation(control.Bounds.Size, control.Position, false); var disappearAnimation = CreateAnimation(control.Bounds.Size, control.Position, false);
await disappearAnimation.RunAsync(control); await disappearAnimation.RunAsync(control);
} }
}
Children.Remove(control); Children.Remove(control);
ResetZIndices(); ResetZIndices();
} }

View File

@@ -15,7 +15,7 @@ public partial class OverlayDialogHost: Canvas
private static readonly Animation _maskAppearAnimation; private static readonly Animation _maskAppearAnimation;
private static readonly Animation _maskDisappearAnimation; private static readonly Animation _maskDisappearAnimation;
private readonly List<DialogPair> _layers = new List<DialogPair>(); private readonly List<DialogPair> _layers = new List<DialogPair>(10);
private class DialogPair private class DialogPair
{ {
@@ -44,6 +44,8 @@ public partial class OverlayDialogHost: Canvas
private set => SetAndRaise(HasModalProperty, ref _hasModal, value); private set => SetAndRaise(HasModalProperty, ref _hasModal, value);
} }
public bool IsAnimationDisabled { get; set; }
static OverlayDialogHost() static OverlayDialogHost()
{ {
ClipToBoundsProperty.OverrideDefaultValue<OverlayDialogHost>(true); ClipToBoundsProperty.OverrideDefaultValue<OverlayDialogHost>(true);