From e06d6ffb259ec6d1d1c0d6e3912a38f197a270b5 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 24 Jan 2024 00:00:13 +0800 Subject: [PATCH] feat: improve layer calculation --- src/Ursa.Themes.Semi/Controls/Dialog.axaml | 24 +++++++++++--- .../Themes/Shared/Dialog.axaml | 8 +++++ .../Themes/Shared/_index.axaml | 1 + src/Ursa/Controls/Dialog/OverlayDialogHost.cs | 32 +++++++++++++------ 4 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 src/Ursa.Themes.Semi/Themes/Shared/Dialog.axaml diff --git a/src/Ursa.Themes.Semi/Controls/Dialog.axaml b/src/Ursa.Themes.Semi/Controls/Dialog.axaml index 2b113fb..4c1c951 100644 --- a/src/Ursa.Themes.Semi/Controls/Dialog.axaml +++ b/src/Ursa.Themes.Semi/Controls/Dialog.axaml @@ -53,10 +53,26 @@ diff --git a/src/Ursa.Themes.Semi/Themes/Shared/Dialog.axaml b/src/Ursa.Themes.Semi/Themes/Shared/Dialog.axaml new file mode 100644 index 0000000..d067400 --- /dev/null +++ b/src/Ursa.Themes.Semi/Themes/Shared/Dialog.axaml @@ -0,0 +1,8 @@ + + + M2,2H16V16H2V2M22,8V22H8V18H10V20H20V10H18V8H22Z + M2,2H11V6H9V4H4V9H6V11H2V2M22,13V22H13V18H15V20H20V15H18V13H22M8,8H16V16H8V8Z + M2,2H16V16H2V2M22,8V22H8V18H18V8H22M4,4V14H14V4H4Z + M2,2H11V11H2V2M9,4H4V9H9V4M22,13V22H13V13H22M15,20H20V15H15V20M16,8V11H13V8H16M11,16H8V13H11V16Z + diff --git a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml index d26e06a..1e27845 100644 --- a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml +++ b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml @@ -4,6 +4,7 @@ + diff --git a/src/Ursa/Controls/Dialog/OverlayDialogHost.cs b/src/Ursa/Controls/Dialog/OverlayDialogHost.cs index 5887964..edb928e 100644 --- a/src/Ursa/Controls/Dialog/OverlayDialogHost.cs +++ b/src/Ursa/Controls/Dialog/OverlayDialogHost.cs @@ -41,13 +41,13 @@ public class OverlayDialogHost : Canvas IsVisible = true, }; - protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) + protected sealed override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { base.OnAttachedToVisualTree(e); OverlayDialogManager.RegisterOverlayDialogHost(this, HostId); } - protected override void OnSizeChanged(SizeChangedEventArgs e) + protected sealed override void OnSizeChanged(SizeChangedEventArgs e) { base.OnSizeChanged(e); for (int i = 0; i < _masks.Count; i++) @@ -90,7 +90,7 @@ public class OverlayDialogHost : Canvas } } - public void AddDialog(DialogControl control) + internal void AddDialog(DialogControl control) { this.Children.Add(control); _dialogs.Add(control); @@ -127,18 +127,25 @@ public class OverlayDialogHost : Canvas } } - public void AddModalDialog(DialogControl control) + internal void AddModalDialog(DialogControl control) { var mask = CreateOverlayMask(); - this.Children.Add(mask); - this.Children.Add(control); + _masks.Add(mask); _modalDialogs.Add(control); - for (int i = 0; i < _masks.Count; i++) + int start = _dialogs.LastOrDefault()?.ZIndex ?? 1; + for (int i = 0; i < _masks.Count; i += 1) { - _masks[i].IsVisible = false; + _masks[i].ZIndex = start + 2 * i; + _modalDialogs[i].ZIndex = start + 2 * i + 1; + } + + for (int i = 0; i < _masks.Count-1; i++) + { + _masks[i].Opacity = 0.5; } - _masks.Add(mask); + this.Children.Add(mask); + this.Children.Add(control); control.OnClose += OnDialogClose; control.OnLayerChange += OnDialogLayerChange; } @@ -173,5 +180,12 @@ public class OverlayDialogHost : Canvas { _dialogs[i].ZIndex = i; } + + for (int i = 0; i < _masks.Count * 2; i += 2) + { + _masks[i].ZIndex = _dialogs.Count + i; + _modalDialogs[i].ZIndex = _dialogs.Count + i + 1; + } + } } \ No newline at end of file