Browse Source

Ensure control is invalidated on ZIndex change.

pull/2776/head
Steven Kirk 7 years ago
parent
commit
0e7f4cac81
  1. 1
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
  2. 4
      src/Avalonia.Visuals/Visual.cs
  3. 47
      tests/Avalonia.Visuals.UnitTests/VisualTests.cs

1
src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

@ -561,7 +561,6 @@ namespace Avalonia.Rendering
}
}
System.Diagnostics.Debug.WriteLine("Invalidated " + rect);
SceneInvalidated(this, new SceneInvalidatedEventArgs((IRenderRoot)_root, rect));
}
}

4
src/Avalonia.Visuals/Visual.cs

@ -514,7 +514,9 @@ namespace Avalonia
/// <param name="e">The event args.</param>
private static void ZIndexChanged(AvaloniaPropertyChangedEventArgs e)
{
var parent = (e.Sender as Visual)?._visualParent;
var sender = e.Sender as IVisual;
var parent = sender?.VisualParent;
sender?.InvalidateVisual();
parent?.VisualRoot?.Renderer?.RecalculateChildren(parent);
}

47
tests/Avalonia.Visuals.UnitTests/VisualTests.cs

@ -282,5 +282,52 @@ namespace Avalonia.Visuals.UnitTests
Assert.True(called);
}
[Fact]
public void Changing_ZIndex_Should_InvalidateVisual()
{
Canvas canvas1;
var renderer = new Mock<IRenderer>();
var root = new TestRoot
{
Child = new StackPanel
{
Children =
{
(canvas1 = new Canvas()),
new Canvas(),
},
},
};
root.Renderer = renderer.Object;
canvas1.ZIndex = 10;
renderer.Verify(x => x.AddDirty(canvas1));
}
[Fact]
public void Changing_ZIndex_Should_Recalculate_Parent_Children()
{
Canvas canvas1;
StackPanel stackPanel;
var renderer = new Mock<IRenderer>();
var root = new TestRoot
{
Child = stackPanel = new StackPanel
{
Children =
{
(canvas1 = new Canvas()),
new Canvas(),
},
},
};
root.Renderer = renderer.Object;
canvas1.ZIndex = 10;
renderer.Verify(x => x.RecalculateChildren(stackPanel));
}
}
}

Loading…
Cancel
Save