From 8dbdc95a9ad20fba531bc9e9a13ffa8d0a546342 Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Sat, 8 Feb 2025 01:55:45 +0800 Subject: [PATCH 1/2] test: add fail test. --- .../MeasureTest/DrawerMeasureTest.cs | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 tests/HeadlessTest.Ursa/Controls/DrawerTests/MeasureTest/DrawerMeasureTest.cs diff --git a/tests/HeadlessTest.Ursa/Controls/DrawerTests/MeasureTest/DrawerMeasureTest.cs b/tests/HeadlessTest.Ursa/Controls/DrawerTests/MeasureTest/DrawerMeasureTest.cs new file mode 100644 index 0000000..a5a8e79 --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/DrawerTests/MeasureTest/DrawerMeasureTest.cs @@ -0,0 +1,69 @@ +using Avalonia.Controls; +using Avalonia.Headless.XUnit; +using Avalonia.Threading; +using Avalonia.VisualTree; +using Ursa.Common; +using Ursa.Controls; +using Ursa.Controls.Options; + +namespace HeadlessTest.Ursa.Controls.DrawerTests.MeasureTest; + +public class DrawerMeasureTest +{ + [AvaloniaTheory] + [InlineData(Position.Left)] + [InlineData(Position.Right)] + [InlineData(Position.Top)] + [InlineData(Position.Bottom)] + public async void Default_Drawer_Is_Constrained_When_Content_Is_Large(Position position) + { + var window = new UrsaWindow + { + Height = 600, + Width = 800 + }; + var textBlock = new TextBlock + { + Width = 1000, + Height = 1000 + }; + window.Show(); + Dispatcher.UIThread.RunJobs(); + Drawer.ShowModal(textBlock, "hello world", null, + new DrawerOptions { Position = position, TopLevelHashCode = window.GetHashCode() }); + await Task.Delay(TimeSpan.FromSeconds(0.1)); + var dialogControl = window.GetVisualDescendants().OfType().SingleOrDefault(); + Assert.NotNull(dialogControl); + Assert.True(dialogControl.Bounds.Width <= window.Bounds.Width); + Assert.True(dialogControl.Bounds.Height <= window.Bounds.Height); + } + + [AvaloniaTheory] + [InlineData(Position.Left)] + [InlineData(Position.Right)] + [InlineData(Position.Top)] + [InlineData(Position.Bottom)] + public async void Custom_Drawer_Is_Constrained_When_Content_Is_Large(Position position) + { + var window = new UrsaWindow + { + Height = 600, + Width = 800 + }; + var textBlock = new TextBlock + { + Width = 1000, + Height = 1000 + }; + window.Show(); + Dispatcher.UIThread.RunJobs(); + Drawer.ShowCustom(textBlock, "hello world", null, + new DrawerOptions { Position = position, TopLevelHashCode = window.GetHashCode() }); + await Task.Delay(TimeSpan.FromSeconds(0.1)); + var d = window.GetVisualDescendants().ToList(); + var dialogControl = window.GetVisualDescendants().OfType().SingleOrDefault(); + Assert.NotNull(dialogControl); + Assert.True(dialogControl.Bounds.Width <= window.Bounds.Width); + Assert.True(dialogControl.Bounds.Height <= window.Bounds.Height); + } +} \ No newline at end of file From 4893e6efb4ea65c656136dabd6a05b6af85506a8 Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Sat, 8 Feb 2025 02:11:21 +0800 Subject: [PATCH 2/2] fix: fix drawer measure --- src/Ursa.Themes.Semi/Controls/Dialog.axaml | 199 ++++++++---------- src/Ursa.Themes.Semi/Controls/Drawer.axaml | 83 ++++---- .../OverlayShared/OverlayDialogHost.Drawer.cs | 4 + .../MeasureTest/DrawerMeasureTest.cs | 2 +- 4 files changed, 127 insertions(+), 161 deletions(-) diff --git a/src/Ursa.Themes.Semi/Controls/Dialog.axaml b/src/Ursa.Themes.Semi/Controls/Dialog.axaml index 1dcf7cb..0e3f58f 100644 --- a/src/Ursa.Themes.Semi/Controls/Dialog.axaml +++ b/src/Ursa.Themes.Semi/Controls/Dialog.axaml @@ -1,16 +1,16 @@  + xmlns:helpers="clr-namespace:Irihi.Avalonia.Shared.Helpers;assembly=Irihi.Avalonia.Shared" + xmlns:u="https://irihi.tech/ursa"> - - + + @@ -26,20 +26,22 @@ Padding="0" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}" + Background="{DynamicResource SemiColorBackground2}" Classes="Shadow" ClipToBounds="False" - Background="{DynamicResource SemiColorBackground2}" CornerRadius="{TemplateBinding CornerRadius}" Focusable="True" IsHitTestVisible="True" Theme="{DynamicResource CardBorder}"> - + HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + + - + @@ -75,9 +77,7 @@ - + @@ -91,9 +91,7 @@ CommandParameter="{x:Static u:DialogLayerChangeType.BringForward}" Header="{DynamicResource STRING_MENU_BRING_FORWARD}"> - + - + - + - + - + @@ -139,8 +129,8 @@ - - + + @@ -155,9 +145,9 @@ Padding="0" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}" + Background="{DynamicResource SemiColorBackground2}" BoxShadow="0 0 8 0 #1A000000" Classes="Shadow" - Background="{DynamicResource SemiColorBackground2}" ClipToBounds="False" CornerRadius="{TemplateBinding CornerRadius}" Focusable="True" @@ -165,7 +155,10 @@ Theme="{DynamicResource CardBorder}"> - + + VerticalAlignment="Center" + Classes="ExtraLarge" + Theme="{StaticResource InnerPathIcon}" /> -