Browse Source
* refactor: Replace IsPopup with Enable*Layer properties on VisualLayerManager - Remove IsPopup from VisualLayerManager, add granular Enable*Layer properties: EnableAdornerLayer (default true), EnableOverlayLayer (default false), EnablePopupOverlayLayer (internal, default false), EnableTextSelectorLayer (default false) - Add PART_VisualLayerManager template part to TopLevel with protected property - Window and EmbeddableControlRoot override OnApplyTemplate to enable overlay, popup overlay, and text selector layers - OverlayLayer is now wrapped in a Panel with a dedicated AdornerLayer sibling - AdornerLayer.GetAdornerLayer checks for OverlayLayer's dedicated AdornerLayer - Update all 8 XAML templates (both themes) to name PART_VisualLayerManager and remove IsPopup="True" from PopupRoot/OverlayPopupHost Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add XML doc to VisualLayerManager * Also search for AdornerLayer from TopLevel --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Julien Lebosquain <julien@lebosquain.net>pull/20933/head
committed by
GitHub
16 changed files with 178 additions and 20 deletions
@ -0,0 +1,37 @@ |
|||
using Avalonia.Controls.Primitives; |
|||
using Avalonia.UnitTests; |
|||
using Xunit; |
|||
|
|||
namespace Avalonia.Controls.UnitTests.Primitives |
|||
{ |
|||
public class VisualLayerManagerTests : ScopedTestBase |
|||
{ |
|||
[Fact] |
|||
public void GetAdornerLayer_Returns_Dedicated_AdornerLayer_For_Controls_Inside_OverlayLayer() |
|||
{ |
|||
var button = new Button(); |
|||
var vlm = new VisualLayerManager { EnableOverlayLayer = true, Child = button }; |
|||
var root = new TestRoot { Child = vlm }; |
|||
|
|||
root.Measure(new Size(100, 100)); |
|||
root.Arrange(new Rect(0, 0, 100, 100)); |
|||
|
|||
var overlayLayer = vlm.OverlayLayer; |
|||
Assert.NotNull(overlayLayer); |
|||
|
|||
var overlayChild = new Border(); |
|||
overlayLayer.Children.Add(overlayChild); |
|||
|
|||
// The adorner layer for a control inside the OverlayLayer
|
|||
// should be the dedicated one, not the main VLM adorner layer.
|
|||
var overlayAdornerLayer = AdornerLayer.GetAdornerLayer(overlayChild); |
|||
Assert.NotNull(overlayAdornerLayer); |
|||
Assert.Same(overlayLayer.AdornerLayer, overlayAdornerLayer); |
|||
|
|||
// The main VLM adorner layer should be different.
|
|||
var mainAdornerLayer = AdornerLayer.GetAdornerLayer(button); |
|||
Assert.NotNull(mainAdornerLayer); |
|||
Assert.NotSame(overlayAdornerLayer, mainAdornerLayer); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue