From 72ff070d31538acb2bd110c22f645ee3d1e992f2 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 17 Jan 2024 06:27:05 +0100 Subject: [PATCH] Fix Adorner Layer Clipping (#13921) * Don't overwrite IsClipEnabled. The user should be able to set this on an adorner themselves. * Use correct clip bounds for adorners. Only take the adorned visual's clip bounds into account if the adorner is clipped to these bounds. * Disable clipping on GridSplitter adorner. Fixes #10700 * Don't clip adorners in ControlCatalog. Default setting is `true`, but this was being overridden in `AdornerLayer.AddVisualAdorner`. That was fixed by an earlier commit in this PR, so property needs to be set explicitly to false in ControlCatalog. --- samples/ControlCatalog/Pages/AdornerLayerPage.xaml | 3 ++- .../Rendering/Composition/Server/ServerCompositionVisual.cs | 2 +- src/Avalonia.Controls/GridSplitter.cs | 1 + src/Avalonia.Controls/Primitives/AdornerLayer.cs | 1 - 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/samples/ControlCatalog/Pages/AdornerLayerPage.xaml b/samples/ControlCatalog/Pages/AdornerLayerPage.xaml index 598844d695..7501c80940 100644 --- a/samples/ControlCatalog/Pages/AdornerLayerPage.xaml +++ b/samples/ControlCatalog/Pages/AdornerLayerPage.xaml @@ -50,7 +50,8 @@ Background="Cyan" IsHitTestVisible="False" Opacity="0.3" - IsVisible="True"> + IsVisible="True" + AdornerLayer.IsClipEnabled="False"> diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual.cs index aeb228282e..d7bdde11e9 100644 --- a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual.cs +++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual.cs @@ -205,7 +205,7 @@ namespace Avalonia.Rendering.Composition.Server } _combinedTransformedClipBounds = - AdornedVisual?._combinedTransformedClipBounds + (AdornerIsClipped ? AdornedVisual?._combinedTransformedClipBounds : null) ?? (Parent?.Effect == null ? Parent?._combinedTransformedClipBounds : null) ?? new Rect(Root!.Size); diff --git a/src/Avalonia.Controls/GridSplitter.cs b/src/Avalonia.Controls/GridSplitter.cs index 234c1ff27a..b9e77ca6db 100644 --- a/src/Avalonia.Controls/GridSplitter.cs +++ b/src/Avalonia.Controls/GridSplitter.cs @@ -341,6 +341,7 @@ namespace Avalonia.Controls _resizeData.Adorner = new PreviewAdorner(builtPreviewContent); AdornerLayer.SetAdornedElement(_resizeData.Adorner, this); + AdornerLayer.SetIsClipEnabled(_resizeData.Adorner, false); adornerLayer.Children.Add(_resizeData.Adorner); diff --git a/src/Avalonia.Controls/Primitives/AdornerLayer.cs b/src/Avalonia.Controls/Primitives/AdornerLayer.cs index 37c46e1e7d..32e1d58ede 100644 --- a/src/Avalonia.Controls/Primitives/AdornerLayer.cs +++ b/src/Avalonia.Controls/Primitives/AdornerLayer.cs @@ -174,7 +174,6 @@ namespace Avalonia.Controls.Primitives } SetAdornedElement(adorner, visual); - SetIsClipEnabled(adorner, false); ((ISetLogicalParent) adorner).SetParent(visual); layer.Children.Add(adorner);