diff --git a/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs b/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs index 971ae1d8aa..3d96dc6bbb 100644 --- a/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs +++ b/src/Avalonia.Base/Rendering/Composition/Drawing/RenderDataDrawingContext.cs @@ -79,12 +79,19 @@ internal class RenderDataDrawingContext : DrawingContext if (!(parent.Node is T)) throw new InvalidOperationException("Invalid Pop operation"); - - foreach(var item in _currentItemList!) - parent.Node.Children.Add(item); - _currentItemList.Clear(); - s_listPool.ReturnAndSetNull(ref _currentItemList); + + var removeLastPush = true; + if (_currentItemList != null) + { + removeLastPush = _currentItemList.Count == 0; + foreach (var item in _currentItemList) + parent.Node.Children.Add(item); + _currentItemList.Clear(); + s_listPool.ReturnAndSetNull(ref _currentItemList); + } _currentItemList = parent.Items; + if (removeLastPush) + _currentItemList.RemoveAt(_currentItemList.Count - 1); } void AddResource(object? resource) diff --git a/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs index 5c6115f8c8..2be429adf8 100644 --- a/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs +++ b/tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs @@ -132,5 +132,18 @@ namespace Avalonia.Base.UnitTests.Rendering.SceneGraph Assert.True(ctx.Context.GetRenderResults()!.HitTest(new Point(25, 25))); } + + [Fact] + public void Empty_Push_Pop_Sequence_Produces_No_Results() + { + var ctx = new TestContext(_services); + using (ctx.Context.PushTransform(Matrix.CreateTranslation(20, 20))) + using (ctx.Context.PushOpacity(1, default)) + { + + } + + Assert.Null(ctx.Context.GetRenderResults()); + } } }