diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Render.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Render.cs index ad828b068a..d2dd0346d6 100644 --- a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Render.cs +++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual/ServerCompositionVisual.Render.cs @@ -110,7 +110,7 @@ partial class ServerCompositionVisual _walkContext.PushClip(effectiveClip); if (visual.ClipToBounds) - _canvas.PushClip(new Rect(0, 0, visual.Size.X, visual.Size.Y)); + visual.PushClipToBounds(_canvas); if (visual.Clip != null) _canvas.PushGeometryClip(visual.Clip); diff --git a/tests/Avalonia.RenderTests/Controls/BorderTests.cs b/tests/Avalonia.RenderTests/Controls/BorderTests.cs index 9e2f06ea6a..f7b1a7508f 100644 --- a/tests/Avalonia.RenderTests/Controls/BorderTests.cs +++ b/tests/Avalonia.RenderTests/Controls/BorderTests.cs @@ -424,5 +424,38 @@ namespace Avalonia.Skia.RenderTests await RenderToFile(target); CompareImages(); } + + [Theory, + InlineData(true), + InlineData(false)] + public async Task Border_Clips_To_Round_Bounds(bool uniform) + { + var cornerRadius = uniform + ? new CornerRadius(20) + : new CornerRadius(20, 10, 30, 5); + + Decorator target = new Decorator + { + Padding = new Thickness(8), + Width = 200, + Height = 200, + Child = new Border + { + CornerRadius = cornerRadius, + Background = Brushes.LightBlue, + ClipToBounds = true, + Child = new Border + { + Width = 300, + Height = 300, + Background = Brushes.Red, + } + } + }; + + var testSuffix = nameof(Border_Clips_To_Round_Bounds) + "_" + (uniform ? "Uniform" : "NonUniform"); + await RenderToFile(target, testSuffix); + CompareImages(testSuffix); + } } } diff --git a/tests/TestFiles/Skia/Controls/Border/Border_Clips_To_Round_Bounds_NonUniform.expected.png b/tests/TestFiles/Skia/Controls/Border/Border_Clips_To_Round_Bounds_NonUniform.expected.png new file mode 100644 index 0000000000..e04a3e07bd Binary files /dev/null and b/tests/TestFiles/Skia/Controls/Border/Border_Clips_To_Round_Bounds_NonUniform.expected.png differ diff --git a/tests/TestFiles/Skia/Controls/Border/Border_Clips_To_Round_Bounds_Uniform.expected.png b/tests/TestFiles/Skia/Controls/Border/Border_Clips_To_Round_Bounds_Uniform.expected.png new file mode 100644 index 0000000000..faec852614 Binary files /dev/null and b/tests/TestFiles/Skia/Controls/Border/Border_Clips_To_Round_Bounds_Uniform.expected.png differ