|
|
@@ -325,6 +325,52 @@ namespace Avalonia.Visuals.UnitTests.Rendering
|
|
|
context.Verify(x => x.DrawImage(borderLayer, 0.5, It.IsAny<Rect>(), It.IsAny<Rect>(), BitmapInterpolationMode.Default));
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void Can_Dirty_Control_In_SceneInvalidated()
|
|
|
+ {
|
|
|
+ Border border1;
|
|
|
+ Border border2;
|
|
|
+ var root = new TestRoot
|
|
|
+ {
|
|
|
+ Width = 100,
|
|
|
+ Height = 100,
|
|
|
+ Child = new StackPanel
|
|
|
+ {
|
|
|
+ Children =
|
|
|
+ {
|
|
|
+ (border1 = new Border
|
|
|
+ {
|
|
|
+ Background = Brushes.Red,
|
|
|
+ Child = new Canvas(),
|
|
|
+ }),
|
|
|
+ (border2 = new Border
|
|
|
+ {
|
|
|
+ Background = Brushes.Red,
|
|
|
+ Child = new Canvas(),
|
|
|
+ }),
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ root.Measure(Size.Infinity);
|
|
|
+ root.Arrange(new Rect(root.DesiredSize));
|
|
|
+
|
|
|
+ var target = CreateTargetAndRunFrame(root);
|
|
|
+ var invalidated = false;
|
|
|
+
|
|
|
+ target.SceneInvalidated += (s, e) =>
|
|
|
+ {
|
|
|
+ invalidated = true;
|
|
|
+ target.AddDirty(border2);
|
|
|
+ };
|
|
|
+
|
|
|
+ target.AddDirty(border1);
|
|
|
+ target.Paint(new Rect(root.DesiredSize));
|
|
|
+
|
|
|
+ Assert.True(invalidated);
|
|
|
+ Assert.True(((IRenderLoopTask)target).NeedsUpdate);
|
|
|
+ }
|
|
|
+
|
|
|
private DeferredRenderer CreateTargetAndRunFrame(
|
|
|
TestRoot root,
|
|
|
Mock<IRenderTimer> timer = null,
|