From 87d7f65eb8bcf4b631170b349a660df77a4ae26d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 4 Mar 2018 21:34:19 +0100 Subject: [PATCH] Added failing test for #1420. --- .../Rendering/SceneGraph/IVisualNode.cs | 5 +++ .../Rendering/SceneGraph/VisualNode.cs | 4 +- .../Rendering/SceneGraph/SceneBuilderTests.cs | 37 +++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs index 1668f592ec..75ef49f8e7 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs @@ -69,6 +69,11 @@ namespace Avalonia.Rendering.SceneGraph /// IReadOnlyList> DrawOperations { get; } + /// + /// Gets the opacity of the scene graph node. + /// + double Opacity { get; } + /// /// Sets up the drawing context for rendering the node's geometry. /// diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs index 3ee689b6d2..306036ca2c 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs @@ -67,9 +67,7 @@ namespace Avalonia.Rendering.SceneGraph /// public bool HasAncestorGeometryClip { get; } - /// - /// Gets or sets the opacity of the scene graph node. - /// + /// public double Opacity { get { return _opacity; } diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs index dda1d73649..2ada7bdbba 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs @@ -656,6 +656,43 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph } } + [Fact] + public void Setting_Opacity_Should_Add_Descendent_Bounds_To_DirtyRects() + { + using (TestApplication()) + { + Decorator decorator; + Border border; + var tree = new TestRoot + { + Child = decorator = new Decorator + { + Child = border = new Border + { + Background = Brushes.Red, + Width = 100, + Height = 100, + } + } + }; + + tree.Measure(Size.Infinity); + tree.Arrange(new Rect(tree.DesiredSize)); + + var scene = new Scene(tree); + var sceneBuilder = new SceneBuilder(); + sceneBuilder.UpdateAll(scene); + + decorator.Opacity = 0.5; + scene = scene.CloneScene(); + sceneBuilder.Update(scene, decorator); + + Assert.NotEmpty(scene.Layers.Single().Dirty); + var dirty = scene.Layers.Single().Dirty.Single(); + Assert.Equal(new Rect(0, 0, 100, 100), dirty); + } + } + [Fact] public void Should_Set_GeometryClip() {