From 783211c9648dcf31792700e8e9c23398d388b85b Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 11 Apr 2015 01:11:39 +0200 Subject: [PATCH] Added Visual.ZIndex. And set ZIndex of adorner layer to top-most. --- Perspex.Controls/Primitives/AdornerDecorator.cs | 1 + Perspex.SceneGraph/IVisual.cs | 5 +++++ Perspex.SceneGraph/Rendering/RendererBase.cs | 3 ++- Perspex.SceneGraph/Visual.cs | 10 ++++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Perspex.Controls/Primitives/AdornerDecorator.cs b/Perspex.Controls/Primitives/AdornerDecorator.cs index c47f925c92..4fb129063c 100644 --- a/Perspex.Controls/Primitives/AdornerDecorator.cs +++ b/Perspex.Controls/Primitives/AdornerDecorator.cs @@ -12,6 +12,7 @@ namespace Perspex.Controls.Primitives { this.AdornerLayer = new AdornerLayer(); this.AdornerLayer.Parent = this; + this.AdornerLayer.ZIndex = int.MaxValue; this.AddVisualChild(this.AdornerLayer); } diff --git a/Perspex.SceneGraph/IVisual.cs b/Perspex.SceneGraph/IVisual.cs index 845355beec..d43c13e0d3 100644 --- a/Perspex.SceneGraph/IVisual.cs +++ b/Perspex.SceneGraph/IVisual.cs @@ -63,6 +63,11 @@ namespace Perspex /// IVisual VisualParent { get; } + /// + /// Gets the Z index of the node. + /// + int ZIndex { get; } + /// /// Renders the scene graph node to a . /// diff --git a/Perspex.SceneGraph/Rendering/RendererBase.cs b/Perspex.SceneGraph/Rendering/RendererBase.cs index 482b98daf5..923f6d57fb 100644 --- a/Perspex.SceneGraph/Rendering/RendererBase.cs +++ b/Perspex.SceneGraph/Rendering/RendererBase.cs @@ -6,6 +6,7 @@ namespace Perspex.Rendering { + using System.Linq; using Perspex.Media; using Perspex.Platform; @@ -88,7 +89,7 @@ namespace Perspex.Rendering visual.Render(context); d.Dispose(); - foreach (var child in visual.VisualChildren) + foreach (var child in visual.VisualChildren.OrderBy(x => x.ZIndex)) { this.Render(child, context, translation, transform); } diff --git a/Perspex.SceneGraph/Visual.cs b/Perspex.SceneGraph/Visual.cs index 6b95efc035..d20ac28eae 100644 --- a/Perspex.SceneGraph/Visual.cs +++ b/Perspex.SceneGraph/Visual.cs @@ -39,6 +39,9 @@ namespace Perspex public static readonly PerspexProperty TransformOriginProperty = PerspexProperty.Register("TransformOrigin", defaultValue: Origin.Default); + public static readonly PerspexProperty ZIndexProperty = + PerspexProperty.Register("ZIndex"); + private PerspexList visualChildren; private Visual visualParent; @@ -91,6 +94,12 @@ namespace Perspex set { this.SetValue(TransformOriginProperty, value); } } + public int ZIndex + { + get { return this.GetValue(ZIndexProperty); } + set { this.SetValue(ZIndexProperty, value); } + } + IPerspexReadOnlyList IVisual.VisualChildren { get { return this.visualChildren; } @@ -104,6 +113,7 @@ namespace Perspex } } + public void InvalidateVisual() { IRenderRoot root = this.GetSelfAndVisualAncestors()