|
|
|
@ -3,22 +3,27 @@ using Avalonia.Media; |
|
|
|
using Xunit; |
|
|
|
|
|
|
|
namespace Avalonia.Base.UnitTests.Rendering; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Test class that verifies how clipping influences rendering in the compositor
|
|
|
|
/// </summary>
|
|
|
|
public class CompositorInvalidationClippingTests : CompositorTestsBase |
|
|
|
{ |
|
|
|
[Fact] |
|
|
|
// Test case: When the ClipToBounds is false, all visuals should be rendered
|
|
|
|
public void Siblings_Should_Be_Rendered_On_Invalidate_Without_ClipToBounds() |
|
|
|
{ |
|
|
|
AssertRenderedVisuals(clipToBounds: false, clipGeometry: false, expectedRenderedVisualsCount: 4); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
// Test case: When the ClipToBounds is true, only visuals within the clipped boundary should be rendered
|
|
|
|
public void Siblings_Should_Not_Be_Rendered_On_Invalidate_With_ClipToBounds() |
|
|
|
{ |
|
|
|
AssertRenderedVisuals(clipToBounds: true, clipGeometry: false, expectedRenderedVisualsCount: 3); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
// Test case: When the Clip is used, only visuals within the clip geometry should be rendered
|
|
|
|
public void Siblings_Should_Not_Be_Rendered_On_Invalidate_With_Clip() |
|
|
|
{ |
|
|
|
AssertRenderedVisuals(clipToBounds: false, clipGeometry: true, expectedRenderedVisualsCount: 3); |
|
|
|
@ -28,10 +33,10 @@ public class CompositorInvalidationClippingTests : CompositorTestsBase |
|
|
|
{ |
|
|
|
using (var s = new CompositorCanvas()) |
|
|
|
{ |
|
|
|
//#1 visual to render is root
|
|
|
|
//#2 visual to render is s.Canvas
|
|
|
|
//#1 visual is top level
|
|
|
|
//#2 visual is s.Canvas
|
|
|
|
|
|
|
|
//#3 visual to render
|
|
|
|
//#3 visual is border1
|
|
|
|
s.Canvas.Children.Add(new Border() |
|
|
|
{ |
|
|
|
[Canvas.LeftProperty] = 0, [Canvas.TopProperty] = 0, |
|
|
|
@ -41,7 +46,7 @@ public class CompositorInvalidationClippingTests : CompositorTestsBase |
|
|
|
Clip = clipGeometry ? new RectangleGeometry(new Rect(new Size(20, 10))) : null |
|
|
|
}); |
|
|
|
|
|
|
|
//#4 visual to render
|
|
|
|
//#4 visual is border2
|
|
|
|
s.Canvas.Children.Add(new Border() |
|
|
|
{ |
|
|
|
[Canvas.LeftProperty] = 30, [Canvas.TopProperty] = 50, |
|
|
|
@ -52,8 +57,11 @@ public class CompositorInvalidationClippingTests : CompositorTestsBase |
|
|
|
}); |
|
|
|
s.RunJobs(); |
|
|
|
s.Events.Reset(); |
|
|
|
|
|
|
|
//invalidate border1
|
|
|
|
s.Canvas.Children[0].IsVisible = false; |
|
|
|
s.RunJobs(); |
|
|
|
|
|
|
|
s.AssertRenderedVisuals(expectedRenderedVisualsCount); |
|
|
|
} |
|
|
|
} |
|
|
|
|