|
|
|
@ -129,102 +129,98 @@ namespace Avalonia.Visuals.UnitTests.Rendering |
|
|
|
[Fact] |
|
|
|
public void Frame_Should_Create_Layer_For_Root() |
|
|
|
{ |
|
|
|
throw new NotImplementedException(); |
|
|
|
//var loop = new Mock<IRenderLoop>();
|
|
|
|
//var root = new TestRoot();
|
|
|
|
//var rootLayer = new Mock<IRenderTargetBitmapImpl>();
|
|
|
|
//var dispatcher = new ImmediateDispatcher();
|
|
|
|
|
|
|
|
//var sceneBuilder = new Mock<ISceneBuilder>();
|
|
|
|
//sceneBuilder.Setup(x => x.UpdateAll(It.IsAny<Scene>()))
|
|
|
|
// .Callback<Scene>(scene =>
|
|
|
|
// {
|
|
|
|
// scene.Size = root.ClientSize;
|
|
|
|
// scene.Layers.Add(root).Dirty.Add(new Rect(root.ClientSize));
|
|
|
|
// });
|
|
|
|
|
|
|
|
//var layers = new Mock<IRenderLayerFactory>();
|
|
|
|
//layers.Setup(x => x.CreateLayer(root, root.ClientSize, 96, 96)).Returns(CreateLayer());
|
|
|
|
|
|
|
|
//var renderInterface = new Mock<IPlatformRenderInterface>();
|
|
|
|
|
|
|
|
//var target = new DeferredRenderer(
|
|
|
|
// root,
|
|
|
|
// loop.Object,
|
|
|
|
// sceneBuilder: sceneBuilder.Object,
|
|
|
|
// layerFactory: layers.Object,
|
|
|
|
// dispatcher: dispatcher);
|
|
|
|
|
|
|
|
//target.Start();
|
|
|
|
//RunFrame(loop);
|
|
|
|
|
|
|
|
//layers.Verify(x => x.CreateLayer(root, root.ClientSize, 96, 96));
|
|
|
|
var loop = new Mock<IRenderLoop>(); |
|
|
|
var root = new TestRoot(); |
|
|
|
var rootLayer = new Mock<IRenderTargetBitmapImpl>(); |
|
|
|
var dispatcher = new ImmediateDispatcher(); |
|
|
|
|
|
|
|
var sceneBuilder = new Mock<ISceneBuilder>(); |
|
|
|
sceneBuilder.Setup(x => x.UpdateAll(It.IsAny<Scene>())) |
|
|
|
.Callback<Scene>(scene => |
|
|
|
{ |
|
|
|
scene.Size = root.ClientSize; |
|
|
|
scene.Layers.Add(root).Dirty.Add(new Rect(root.ClientSize)); |
|
|
|
}); |
|
|
|
|
|
|
|
var renderInterface = new Mock<IPlatformRenderInterface>(); |
|
|
|
|
|
|
|
var target = new DeferredRenderer( |
|
|
|
root, |
|
|
|
loop.Object, |
|
|
|
sceneBuilder: sceneBuilder.Object, |
|
|
|
//layerFactory: layers.Object,
|
|
|
|
dispatcher: dispatcher); |
|
|
|
|
|
|
|
target.Start(); |
|
|
|
RunFrame(loop); |
|
|
|
|
|
|
|
var context = Mock.Get(root.CreateRenderTarget().CreateDrawingContext(null)); |
|
|
|
context.Verify(x => x.CreateLayer(root.ClientSize)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_Create_And_Delete_Layers_For_Transparent_Controls() |
|
|
|
{ |
|
|
|
throw new NotImplementedException(); |
|
|
|
//Border border;
|
|
|
|
//var root = new TestRoot
|
|
|
|
//{
|
|
|
|
// Width = 100,
|
|
|
|
// Height = 100,
|
|
|
|
// Child = new Border
|
|
|
|
// {
|
|
|
|
// Background = Brushes.Red,
|
|
|
|
// Child = border = new Border
|
|
|
|
// {
|
|
|
|
// Background = Brushes.Green,
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//};
|
|
|
|
|
|
|
|
//root.Measure(Size.Infinity);
|
|
|
|
//root.Arrange(new Rect(root.DesiredSize));
|
|
|
|
|
|
|
|
//var loop = new Mock<IRenderLoop>();
|
|
|
|
//var layerFactory = new MockRenderLayerFactory(new Dictionary<IVisual, IRenderTargetBitmapImpl>
|
|
|
|
//{
|
|
|
|
// { root, CreateLayer() },
|
|
|
|
// { border, CreateLayer() },
|
|
|
|
//});
|
|
|
|
|
|
|
|
//var target = new DeferredRenderer(
|
|
|
|
// root,
|
|
|
|
// loop.Object,
|
|
|
|
// layerFactory: layerFactory,
|
|
|
|
// dispatcher: new ImmediateDispatcher());
|
|
|
|
//root.Renderer = target;
|
|
|
|
|
|
|
|
//target.Start();
|
|
|
|
//RunFrame(loop);
|
|
|
|
|
|
|
|
//var rootContext = layerFactory.GetMockDrawingContext(root);
|
|
|
|
//var borderContext = layerFactory.GetMockDrawingContext(border);
|
|
|
|
|
|
|
|
//rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once);
|
|
|
|
//rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once);
|
|
|
|
//borderContext.Verify(x => x.FillRectangle(It.IsAny<IBrush>(), It.IsAny<Rect>(), It.IsAny<float>()), Times.Never);
|
|
|
|
|
|
|
|
//rootContext.ResetCalls();
|
|
|
|
//borderContext.ResetCalls();
|
|
|
|
//border.Opacity = 0.5;
|
|
|
|
//RunFrame(loop);
|
|
|
|
|
|
|
|
//rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once);
|
|
|
|
//rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Never);
|
|
|
|
//borderContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once);
|
|
|
|
|
|
|
|
//rootContext.ResetCalls();
|
|
|
|
//borderContext.ResetCalls();
|
|
|
|
//border.Opacity = 1;
|
|
|
|
//RunFrame(loop);
|
|
|
|
|
|
|
|
//layerFactory.GetMockBitmap(border).Verify(x => x.Dispose());
|
|
|
|
//rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once);
|
|
|
|
//rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once);
|
|
|
|
//borderContext.Verify(x => x.FillRectangle(It.IsAny<IBrush>(), It.IsAny<Rect>(), It.IsAny<float>()), Times.Never);
|
|
|
|
Border border; |
|
|
|
var root = new TestRoot |
|
|
|
{ |
|
|
|
Width = 100, |
|
|
|
Height = 100, |
|
|
|
Child = new Border |
|
|
|
{ |
|
|
|
Background = Brushes.Red, |
|
|
|
Child = border = new Border |
|
|
|
{ |
|
|
|
Background = Brushes.Green, |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
root.Measure(Size.Infinity); |
|
|
|
root.Arrange(new Rect(root.DesiredSize)); |
|
|
|
|
|
|
|
var rootLayer = CreateLayer(); |
|
|
|
var borderLayer = CreateLayer(); |
|
|
|
var renderTargetContext = Mock.Get(root.CreateRenderTarget().CreateDrawingContext(null)); |
|
|
|
renderTargetContext.SetupSequence(x => x.CreateLayer(It.IsAny<Size>())) |
|
|
|
.Returns(rootLayer) |
|
|
|
.Returns(borderLayer); |
|
|
|
|
|
|
|
var loop = new Mock<IRenderLoop>(); |
|
|
|
var target = new DeferredRenderer( |
|
|
|
root, |
|
|
|
loop.Object, |
|
|
|
dispatcher: new ImmediateDispatcher()); |
|
|
|
root.Renderer = target; |
|
|
|
|
|
|
|
target.Start(); |
|
|
|
RunFrame(loop); |
|
|
|
|
|
|
|
var rootContext = Mock.Get(rootLayer.CreateDrawingContext(null)); |
|
|
|
var borderContext = Mock.Get(borderLayer.CreateDrawingContext(null)); |
|
|
|
|
|
|
|
rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); |
|
|
|
rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); |
|
|
|
borderContext.Verify(x => x.FillRectangle(It.IsAny<IBrush>(), It.IsAny<Rect>(), It.IsAny<float>()), Times.Never); |
|
|
|
|
|
|
|
rootContext.ResetCalls(); |
|
|
|
borderContext.ResetCalls(); |
|
|
|
border.Opacity = 0.5; |
|
|
|
RunFrame(loop); |
|
|
|
|
|
|
|
rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); |
|
|
|
rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Never); |
|
|
|
borderContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); |
|
|
|
|
|
|
|
rootContext.ResetCalls(); |
|
|
|
borderContext.ResetCalls(); |
|
|
|
border.Opacity = 1; |
|
|
|
RunFrame(loop); |
|
|
|
|
|
|
|
Mock.Get(borderLayer).Verify(x => x.Dispose()); |
|
|
|
rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); |
|
|
|
rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); |
|
|
|
borderContext.Verify(x => x.FillRectangle(It.IsAny<IBrush>(), It.IsAny<Rect>(), It.IsAny<float>()), Times.Never); |
|
|
|
} |
|
|
|
|
|
|
|
private void IgnoreFirstFrame(Mock<IRenderLoop> loop, Mock<ISceneBuilder> sceneBuilder) |
|
|
|
|