|
|
|
@ -1,3 +1,4 @@ |
|
|
|
using System.Runtime.CompilerServices; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Avalonia.Controls; |
|
|
|
using Avalonia.Controls.Primitives; |
|
|
|
@ -18,56 +19,70 @@ public class AdornerTests : TestBase |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task Focus_Adorner_Is_Properly_Clipped() |
|
|
|
async Task CheckAdornedContent(Control content, Control adorned, Control adorner, int width = 200, int height = 200, |
|
|
|
[CallerMemberName] string testName = "") |
|
|
|
{ |
|
|
|
Border adorned; |
|
|
|
var tree = new Decorator |
|
|
|
{ |
|
|
|
Child = new VisualLayerManager |
|
|
|
{ |
|
|
|
Child = new Border |
|
|
|
{ |
|
|
|
Background = Brushes.Red, |
|
|
|
Padding = new Thickness(10, 50, 10,10), |
|
|
|
Child = new Border() |
|
|
|
{ |
|
|
|
Background = Brushes.White, |
|
|
|
ClipToBounds = true, |
|
|
|
Padding = new Thickness(0, -30, 0, 0), |
|
|
|
Child = adorned = new Border |
|
|
|
{ |
|
|
|
Background = Brushes.Green, |
|
|
|
VerticalAlignment = VerticalAlignment.Top, |
|
|
|
Height = 100, |
|
|
|
Width = 50 |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
Child = content |
|
|
|
}, |
|
|
|
Width = 200, |
|
|
|
Height = 200 |
|
|
|
}; |
|
|
|
var adorner = new Border |
|
|
|
{ |
|
|
|
BorderThickness = new Thickness(2), |
|
|
|
BorderBrush = Brushes.Black |
|
|
|
Width = width, |
|
|
|
Height = height |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
var size = new Size(tree.Width, tree.Height); |
|
|
|
tree.Measure(size); |
|
|
|
tree.Arrange(new Rect(size)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adorned.AttachedToVisualTree += delegate |
|
|
|
{ |
|
|
|
AdornerLayer.SetAdornedElement(adorner, adorned); |
|
|
|
AdornerLayer.GetAdornerLayer(adorned)!.Children.Add(adorner); |
|
|
|
}; |
|
|
|
|
|
|
|
tree.Measure(size); |
|
|
|
tree.Arrange(new Rect(size)); |
|
|
|
|
|
|
|
await RenderToFile(tree); |
|
|
|
CompareImages(skipImmediate: true); |
|
|
|
await RenderToFile(tree, testName: testName); |
|
|
|
CompareImages(skipImmediate: true, testName: testName); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory, |
|
|
|
InlineData(true), |
|
|
|
InlineData(false) |
|
|
|
] |
|
|
|
public async Task Focus_Adorner_Is_Properly_Clipped(bool clip) |
|
|
|
{ |
|
|
|
Border adorned; |
|
|
|
var content = new Border |
|
|
|
{ |
|
|
|
Background = Brushes.Red, |
|
|
|
Padding = new Thickness(10, 50, 10, 10), |
|
|
|
Child = new Border() |
|
|
|
{ |
|
|
|
Background = Brushes.White, |
|
|
|
ClipToBounds = true, |
|
|
|
Padding = new Thickness(0, -30, 0, 0), |
|
|
|
Child = adorned = new Border |
|
|
|
{ |
|
|
|
Background = Brushes.Green, |
|
|
|
VerticalAlignment = VerticalAlignment.Top, |
|
|
|
Height = 100, |
|
|
|
Width = 50 |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
var adorner = new Border |
|
|
|
{ |
|
|
|
BorderThickness = new Thickness(2), |
|
|
|
BorderBrush = Brushes.Black |
|
|
|
}; |
|
|
|
if (!clip) |
|
|
|
AdornerLayer.SetIsClipEnabled(adorner, false); |
|
|
|
await CheckAdornedContent(content, adorned, adorner, |
|
|
|
testName: "Focus_Adorner_Is_Properly_Clipped_Clip_" + clip); |
|
|
|
} |
|
|
|
|
|
|
|
} |