Browse Source

WIP: Delegate back to render for VisualBrushes.

`VisualBrush`es need to get delegated back to the renderer for
rendering, so added an `IVisualBrushRenderer` interface which is
implemented by the renderers, and pass this when creating drawing
contexts. Only currently implemented/tested for D2D and
`ImmediateRenderer`.
scenegraph-after-breakage
Steven Kirk 10 years ago
parent
commit
ab9cf03eff
  1. 2
      src/Avalonia.Controls/TopLevel.cs
  2. 1
      src/Avalonia.Visuals/Avalonia.Visuals.csproj
  3. 3
      src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs
  4. 7
      src/Avalonia.Visuals/Platform/IRenderTarget.cs
  5. 15
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
  6. 2
      src/Avalonia.Visuals/Rendering/IRenderRoot.cs
  7. 19
      src/Avalonia.Visuals/Rendering/IVisualBrushRenderer.cs
  8. 15
      src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs
  9. 2
      src/Avalonia.Visuals/Rendering/RenderLayer.cs
  10. 4
      src/Gtk/Avalonia.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
  11. 3
      src/Gtk/Avalonia.Cairo/RenderTarget.cs
  12. 46
      src/Shared/RenderHelpers/TileBrushImplHelper.cs
  13. 7
      src/Skia/Avalonia.Skia.Android/RenderTarget.cs
  14. 2
      src/Skia/Avalonia.Skia.Android/SkiaRenderView.cs
  15. 5
      src/Skia/Avalonia.Skia.Desktop/RenderTarget.cs
  16. 5
      src/Skia/Avalonia.Skia.iOS/RenderTarget.cs
  17. 3
      src/Skia/Avalonia.Skia/BitmapImpl.cs
  18. 2
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  19. 35
      src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
  20. 2
      src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
  21. 5
      src/Windows/Avalonia.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
  22. 5
      src/Windows/Avalonia.Direct2D1/RenderTarget.cs
  23. 9
      src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs
  24. 2
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs
  25. 2
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs
  26. 4
      tests/Avalonia.UnitTests/TestRoot.cs
  27. 2
      tests/Avalonia.UnitTests/TestTemplatedRoot.cs
  28. 4
      tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs

2
src/Avalonia.Controls/TopLevel.cs

@ -239,7 +239,7 @@ namespace Avalonia.Controls
}
/// <inheritdoc/>
IRenderTarget IRenderRoot.CreateRenderTarget()
IRenderTarget IRenderRoot.CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer)
{
return _renderInterface.CreateRenderTarget(PlatformImpl.Handle);
}

1
src/Avalonia.Visuals/Avalonia.Visuals.csproj

@ -118,6 +118,7 @@
<Compile Include="Rendering\ImmediateRenderer.cs" />
<Compile Include="Rendering\DefaultRenderLoop.cs" />
<Compile Include="Rendering\IRenderLayerFactory.cs" />
<Compile Include="Rendering\IVisualBrushRenderer.cs" />
<Compile Include="Rendering\RendererBase.cs" />
<Compile Include="Rendering\RenderLayer.cs" />
<Compile Include="Rendering\RenderLayers.cs" />

3
src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs

@ -58,6 +58,7 @@ namespace Avalonia.Media.Imaging
return factory.CreateRenderTargetBitmap(width, height, dpiX, dpiY);
}
public IDrawingContextImpl CreateDrawingContext() => PlatformImpl.CreateDrawingContext();
/// <inheritdoc/>
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer vbr) => PlatformImpl.CreateDrawingContext(vbr);
}
}

7
src/Avalonia.Visuals/Platform/IRenderTarget.cs

@ -3,6 +3,7 @@
using System;
using Avalonia.Media;
using Avalonia.Rendering;
namespace Avalonia.Platform
{
@ -17,6 +18,10 @@ namespace Avalonia.Platform
/// <summary>
/// Creates an <see cref="DrawingContext"/> for a rendering session.
/// </summary>
IDrawingContextImpl CreateDrawingContext();
/// <param name="visualBrushRenderer">
/// A render to be used to render visual brushes. May be null if no visual brushes are
/// to be drawn.
/// </param>
IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer);
}
}

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

@ -10,7 +10,7 @@ using System.IO;
namespace Avalonia.Rendering
{
public class DeferredRenderer : RendererBase, IRenderer
public class DeferredRenderer : RendererBase, IRenderer, IVisualBrushRenderer
{
private readonly IDispatcher _dispatcher;
private readonly IRenderLoop _renderLoop;
@ -102,6 +102,11 @@ namespace Avalonia.Rendering
Render(_scene);
}
void IVisualBrushRenderer.RenderVisualBrush(IDrawingContextImpl context, VisualBrush brush)
{
throw new NotImplementedException();
}
private void Render(Scene scene)
{
_rendering = true;
@ -163,7 +168,7 @@ namespace Avalonia.Rendering
var renderTarget = _layers[layer.LayerRoot].Bitmap;
var node = (VisualNode)scene.FindNode(layer.LayerRoot);
using (var context = renderTarget.CreateDrawingContext())
using (var context = renderTarget.CreateDrawingContext(this))
{
foreach (var rect in layer.Dirty)
{
@ -189,7 +194,7 @@ namespace Avalonia.Rendering
{
var overlay = GetOverlay(scene.Size, scene.Scaling);
using (var context = overlay.CreateDrawingContext())
using (var context = overlay.CreateDrawingContext(this))
{
context.Clear(Colors.Transparent);
RenderDirtyRects(context);
@ -217,10 +222,10 @@ namespace Avalonia.Rendering
{
if (_renderTarget == null)
{
_renderTarget = ((IRenderRoot)_root).CreateRenderTarget();
_renderTarget = ((IRenderRoot)_root).CreateRenderTarget(this);
}
using (var context = _renderTarget.CreateDrawingContext())
using (var context = _renderTarget.CreateDrawingContext(this))
{
var clientRect = new Rect(scene.Size);

2
src/Avalonia.Visuals/Rendering/IRenderRoot.cs

@ -28,7 +28,7 @@ namespace Avalonia.Rendering
/// Creates a render target for the window.
/// </summary>
/// <returns>An <see cref="IRenderTarget"/>.</returns>
IRenderTarget CreateRenderTarget();
IRenderTarget CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer);
/// <summary>
/// Adds a rectangle to the window's dirty region.

19
src/Avalonia.Visuals/Rendering/IVisualBrushRenderer.cs

@ -0,0 +1,19 @@
using System;
using Avalonia.Media;
namespace Avalonia.Rendering
{
/// <summary>
/// Defines a renderer used to render a visual brush to a bitmap.
/// </summary>
public interface IVisualBrushRenderer
{
/// <summary>
/// Renders a visual brush to a bitmap.
/// </summary>
/// <param name="context">The drawing context to render to.</param>
/// <param name="brush">The visual brush.</param>
/// <returns>A bitmap containing the rendered brush.</returns>
void RenderVisualBrush(IDrawingContextImpl context, VisualBrush brush);
}
}

15
src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs

@ -8,10 +8,11 @@ using System.Collections.Generic;
using Avalonia.Threading;
using Avalonia.Media;
using System.Linq;
using Avalonia.Media.Imaging;
namespace Avalonia.Rendering
{
public class ImmediateRenderer : RendererBase, IRenderer
public class ImmediateRenderer : RendererBase, IRenderer, IVisualBrushRenderer
{
private readonly IRenderLoop _renderLoop;
private readonly IVisual _root;
@ -42,7 +43,7 @@ namespace Avalonia.Rendering
public static void Render(IVisual visual, IRenderTarget target)
{
using (var renderer = new ImmediateRenderer(visual))
using (var context = new DrawingContext(target.CreateDrawingContext()))
using (var context = new DrawingContext(target.CreateDrawingContext(renderer)))
{
renderer.Render(context, visual, visual.Bounds);
}
@ -78,6 +79,12 @@ namespace Avalonia.Rendering
{
}
void IVisualBrushRenderer.RenderVisualBrush(IDrawingContextImpl context, VisualBrush brush)
{
var visual = brush.Visual;
Render(new DrawingContext(context), visual, visual.Bounds);
}
private static void ClearTransformedBounds(IVisual visual)
{
foreach (var e in visual.GetSelfAndVisualDescendents())
@ -134,12 +141,12 @@ namespace Avalonia.Rendering
{
if (_renderTarget == null)
{
_renderTarget = ((IRenderRoot)_root).CreateRenderTarget();
_renderTarget = ((IRenderRoot)_root).CreateRenderTarget(this);
}
try
{
using (var context = new DrawingContext(_renderTarget.CreateDrawingContext()))
using (var context = new DrawingContext(_renderTarget.CreateDrawingContext(this)))
{
Render(context, _root, _root.Bounds);

2
src/Avalonia.Visuals/Rendering/RenderLayer.cs

@ -33,7 +33,7 @@ namespace Avalonia.Rendering
{
var resized = _factory.CreateLayer(LayerRoot, size * scaling, 96 * scaling, 96 * scaling);
using (var context = resized.CreateDrawingContext())
using (var context = resized.CreateDrawingContext(null))
{
context.Clear(Colors.Transparent);
context.DrawImage(Bitmap, 1, new Rect(Size), new Rect(Size));

4
src/Gtk/Avalonia.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs

@ -41,9 +41,9 @@ namespace Avalonia.Cairo.Media.Imaging
Surface.WriteToPng(fileName);
}
public IDrawingContextImpl CreateDrawingContext()
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return _renderTarget.CreateDrawingContext();
return _renderTarget.CreateDrawingContext(visualBrushRenderer);
}
public void Save(Stream stream)

3
src/Gtk/Avalonia.Cairo/RenderTarget.cs

@ -47,8 +47,9 @@ namespace Avalonia.Cairo
/// <summary>
/// Creates a cairo surface that targets a platform-specific resource.
/// </summary>
/// <param name="visualBrushRenderer">The visual brush renderer to use.</param>
/// <returns>A surface wrapped in an <see cref="Avalonia.Media.DrawingContext"/>.</returns>
public IDrawingContextImpl CreateDrawingContext()
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
if (_window != null)
return new Media.DrawingContext(_window.GdkWindow);

46
src/Shared/RenderHelpers/TileBrushImplHelper.cs

@ -42,13 +42,6 @@ namespace Avalonia.RenderHelpers
if (control != null)
{
EnsureInitialized(control);
if (control.IsArrangeValid == false)
{
control.Measure(Size.Infinity);
control.Arrange(new Rect(control.DesiredSize));
}
_imageSize = control.Bounds.Size;
IsValid = true;
}
@ -182,28 +175,39 @@ namespace Avalonia.RenderHelpers
return transform;
}
private static Size CalculateIntermediateSize(
TileMode tileMode,
Size targetSize,
Size destinationSize) => tileMode == TileMode.None ? targetSize : destinationSize;
private static void EnsureInitialized(IControl control)
public static void EnsureInitialized(IVisual visual)
{
foreach (var i in control.GetSelfAndVisualDescendents())
{
var c = i as IControl;
var control = visual as IControl;
if (c?.IsInitialized == false)
if (control != null)
{
foreach (var i in control.GetSelfAndVisualDescendents())
{
var init = c as ISupportInitialize;
var c = i as IControl;
if (init != null)
if (c?.IsInitialized == false)
{
init.BeginInit();
init.EndInit();
var init = c as ISupportInitialize;
if (init != null)
{
init.BeginInit();
init.EndInit();
}
}
}
if (!control.IsArrangeValid)
{
control.Measure(Size.Infinity);
control.Arrange(new Rect(control.DesiredSize));
}
}
}
private static Size CalculateIntermediateSize(
TileMode tileMode,
Size targetSize,
Size destinationSize) => tileMode == TileMode.None ? targetSize : destinationSize;
}
}

7
src/Skia/Avalonia.Skia.Android/RenderTarget.cs

@ -4,6 +4,7 @@ using Avalonia.Platform;
using SkiaSharp;
using Android.Graphics;
using Android.Views;
using Avalonia.Rendering;
namespace Avalonia.Skia
{
@ -11,7 +12,7 @@ namespace Avalonia.Skia
{
public SKSurface Surface { get; protected set; }
public virtual IDrawingContextImpl CreateDrawingContext()
public virtual IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return new DrawingContextImpl(Surface.Canvas);
}
@ -66,9 +67,9 @@ namespace Avalonia.Skia
h = surfaceView.Height;
}
public override IDrawingContextImpl CreateDrawingContext()
public override IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
base.CreateDrawingContext();
base.CreateDrawingContext(visualBrushRenderer);
FixSize();
var canvas = Surface.Canvas;

2
src/Skia/Avalonia.Skia.Android/SkiaRenderView.cs

@ -29,7 +29,7 @@ namespace Avalonia.Skia.Android
{
if (_renderTarget == null)
return;
using (var ctx = _renderTarget.CreateDrawingContext())
using (var ctx = _renderTarget.CreateDrawingContext(null))
OnRender(new DrawingContext(ctx));
}

5
src/Skia/Avalonia.Skia.Desktop/RenderTarget.cs

@ -2,6 +2,7 @@ using System;
using Avalonia.Media;
using Avalonia.Platform;
using SkiaSharp;
using Avalonia.Rendering;
#if WIN32
using Avalonia.Win32.Interop;
#endif
@ -12,7 +13,7 @@ namespace Avalonia.Skia
{
public SKSurface Surface { get; protected set; }
public virtual IDrawingContextImpl CreateDrawingContext()
public virtual IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return new DrawingContextImpl(Surface.Canvas);
}
@ -100,7 +101,7 @@ namespace Avalonia.Skia
return new Size(96, 96);
}
public override IDrawingContextImpl CreateDrawingContext()
public override IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
FixSize();

5
src/Skia/Avalonia.Skia.iOS/RenderTarget.cs

@ -4,6 +4,7 @@ using Avalonia.Platform;
using SkiaSharp;
using CoreGraphics;
using UIKit;
using Avalonia.Rendering;
namespace Avalonia.Skia
{
@ -11,7 +12,7 @@ namespace Avalonia.Skia
{
public SKSurface Surface { get; protected set; }
public virtual IDrawingContextImpl CreateDrawingContext()
public virtual IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return new DrawingContextImpl(Surface.Canvas);
}
@ -88,7 +89,7 @@ namespace Avalonia.Skia
h = (int)bounds.Height;
}
public override IDrawingContextImpl CreateDrawingContext()
public override IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
FixSize();

3
src/Skia/Avalonia.Skia/BitmapImpl.cs

@ -5,6 +5,7 @@ using System.Runtime.InteropServices;
using System.Text;
using Avalonia.Media;
using Avalonia.Platform;
using Avalonia.Rendering;
using SkiaSharp;
namespace Avalonia.Skia
@ -74,7 +75,7 @@ namespace Avalonia.Skia
}
}
public IDrawingContextImpl CreateDrawingContext()
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return new BitmapDrawingContext(Bitmap);

2
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -192,7 +192,7 @@ namespace Avalonia.Skia
var helper = new TileBrushImplHelper(tileBrush, targetSize);
var bitmap = new BitmapImpl((int)helper.IntermediateSize.Width, (int)helper.IntermediateSize.Height);
rv.AddDisposable(bitmap);
using (var ctx = bitmap.CreateDrawingContext())
using (var ctx = bitmap.CreateDrawingContext(null))
helper.DrawIntermediate(new DrawingContext(ctx));
SKMatrix translation = SKMatrix.MakeTranslation(-(float)helper.DestinationRect.X, -(float)helper.DestinationRect.Y);
SKShaderTileMode tileX =

35
src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs

@ -6,6 +6,8 @@ using System.Collections;
using System.Collections.Generic;
using Avalonia.Media;
using Avalonia.Platform;
using Avalonia.RenderHelpers;
using Avalonia.Rendering;
using SharpDX;
using SharpDX.Direct2D1;
using SharpDX.Mathematics.Interop;
@ -18,6 +20,7 @@ namespace Avalonia.Direct2D1.Media
/// </summary>
public class DrawingContextImpl : IDrawingContextImpl, IDisposable
{
private readonly IVisualBrushRenderer _visualBrushRenderer;
private readonly SharpDX.Direct2D1.RenderTarget _renderTarget;
private readonly SharpDX.DXGI.SwapChain1 _swapChain;
private SharpDX.DirectWrite.Factory _directWriteFactory;
@ -25,14 +28,17 @@ namespace Avalonia.Direct2D1.Media
/// <summary>
/// Initializes a new instance of the <see cref="DrawingContextImpl"/> class.
/// </summary>
/// <param name="visualBrushRenderer">The visual brush renderer.</param>
/// <param name="renderTarget">The render target to draw to.</param>
/// <param name="directWriteFactory">The DirectWrite factory.</param>
/// <param name="swapChain">An optional swap chain associated with this drawing context.</param>
public DrawingContextImpl(
IVisualBrushRenderer visualBrushRenderer,
SharpDX.Direct2D1.RenderTarget renderTarget,
SharpDX.DirectWrite.Factory directWriteFactory,
SharpDX.DXGI.SwapChain1 swapChain = null)
{
_visualBrushRenderer = visualBrushRenderer;
_renderTarget = renderTarget;
_swapChain = swapChain;
_directWriteFactory = directWriteFactory;
@ -338,6 +344,35 @@ namespace Avalonia.Direct2D1.Media
(BitmapImpl)imageBrush.Source.PlatformImpl,
destinationSize);
}
else if (visualBrush != null)
{
if (_visualBrushRenderer != null)
{
TileBrushImplHelper.EnsureInitialized(visualBrush.Visual);
using (var intermediate = new BitmapRenderTarget(
_renderTarget,
CompatibleRenderTargetOptions.None,
visualBrush.Visual.Bounds.Size.ToSharpDX()))
{
using (var ctx = new RenderTarget(intermediate).CreateDrawingContext(_visualBrushRenderer))
{
intermediate.Clear(null);
_visualBrushRenderer.RenderVisualBrush(ctx, visualBrush);
}
return new ImageBrushImpl(
visualBrush,
_renderTarget,
new D2DBitmapImpl(intermediate.Bitmap),
destinationSize);
}
}
else
{
throw new NotSupportedException("No IVisualBrushRenderer was supplied to DrawingContextImpl.");
}
}
else
{
return new SolidColorBrushImpl((Avalonia.Media.SolidColorBrush)null, _renderTarget);

2
src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs

@ -90,7 +90,7 @@ namespace Avalonia.Direct2D1.Media
CompatibleRenderTargetOptions.None,
calc.IntermediateSize.ToSharpDX());
using (var context = new RenderTarget(result).CreateDrawingContext())
using (var context = new RenderTarget(result).CreateDrawingContext(null))
{
var rect = new Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight);

5
src/Windows/Avalonia.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs

@ -4,6 +4,7 @@
using System;
using Avalonia.Media;
using Avalonia.Platform;
using Avalonia.Rendering;
using SharpDX.Direct2D1;
using SharpDX.WIC;
using DirectWriteFactory = SharpDX.DirectWrite.Factory;
@ -45,9 +46,9 @@ namespace Avalonia.Direct2D1.Media
base.Dispose();
}
public IDrawingContextImpl CreateDrawingContext()
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return new DrawingContextImpl(_target, _dwriteFactory);
return new DrawingContextImpl(visualBrushRenderer, _target, _dwriteFactory);
}
}
}

5
src/Windows/Avalonia.Direct2D1/RenderTarget.cs

@ -5,6 +5,7 @@ using System;
using Avalonia.Direct2D1.Media;
using Avalonia.Media;
using Avalonia.Platform;
using Avalonia.Rendering;
using SharpDX.Direct2D1;
using DwFactory = SharpDX.DirectWrite.Factory;
@ -48,9 +49,9 @@ namespace Avalonia.Direct2D1
/// Creates a drawing context for a rendering session.
/// </summary>
/// <returns>An <see cref="Avalonia.Media.DrawingContext"/>.</returns>
public IDrawingContextImpl CreateDrawingContext()
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return new DrawingContextImpl(_renderTarget, DirectWriteFactory);
return new DrawingContextImpl(visualBrushRenderer, _renderTarget, DirectWriteFactory);
}
public void Dispose()

9
src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Avalonia.Direct2D1.Media;
using Avalonia.Media;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Win32.Interop;
using SharpDX;
using SharpDX.Direct2D1;
@ -57,7 +58,7 @@ namespace Avalonia.Direct2D1
/// Creates a drawing context for a rendering session.
/// </summary>
/// <returns>An <see cref="Avalonia.Media.DrawingContext"/>.</returns>
public IDrawingContextImpl CreateDrawingContext()
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
var size = GetWindowSize();
var dpi = GetWindowDpi();
@ -69,7 +70,11 @@ namespace Avalonia.Direct2D1
CreateSwapChain();
}
return new DrawingContextImpl(_deviceContext, DirectWriteFactory, _swapChain);
return new DrawingContextImpl(
visualBrushRenderer,
_deviceContext,
DirectWriteFactory,
_swapChain);
}
public void Dispose()

2
tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs

@ -319,7 +319,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
public Size ClientSize { get; }
public double RenderScaling => 1;
public IRenderTarget CreateRenderTarget()
public IRenderTarget CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer)
{
throw new NotImplementedException();
}

2
tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

@ -1013,7 +1013,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
public Size ClientSize { get; }
public double RenderScaling => 1;
public IRenderTarget CreateRenderTarget()
public IRenderTarget CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer)
{
throw new NotImplementedException();
}

4
tests/Avalonia.UnitTests/TestRoot.cs

@ -17,7 +17,7 @@ namespace Avalonia.UnitTests
{
private readonly NameScope _nameScope = new NameScope();
private readonly IRenderTarget _renderTarget = Mock.Of<IRenderTarget>(
x => x.CreateDrawingContext() == Mock.Of<IDrawingContextImpl>());
x => x.CreateDrawingContext(It.IsAny<IVisualBrushRenderer>()) == Mock.Of<IDrawingContextImpl>());
public TestRoot()
{
@ -64,7 +64,7 @@ namespace Avalonia.UnitTests
public bool ShowAccessKeys { get; set; }
public IRenderTarget CreateRenderTarget() => _renderTarget;
public IRenderTarget CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer) => _renderTarget;
public void Invalidate(Rect rect)
{

2
tests/Avalonia.UnitTests/TestTemplatedRoot.cs

@ -47,7 +47,7 @@ namespace Avalonia.UnitTests
public IRenderer Renderer => null;
public IRenderTarget CreateRenderTarget()
public IRenderTarget CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer)
{
throw new NotImplementedException();
}

4
tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs

@ -235,7 +235,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering
private IRenderTargetBitmapImpl CreateLayer()
{
return Mock.Of<IRenderTargetBitmapImpl>(x =>
x.CreateDrawingContext() == Mock.Of<IDrawingContextImpl>());
x.CreateDrawingContext(It.IsAny<IVisualBrushRenderer>()) == Mock.Of<IDrawingContextImpl>());
}
private Mock<IRenderLayerFactory> MockLayerFactory(IRenderRoot root)
@ -278,7 +278,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering
public Mock<IDrawingContextImpl> GetMockDrawingContext(IVisual layerRoot)
{
return Mock.Get(_layers[layerRoot].CreateDrawingContext());
return Mock.Get(_layers[layerRoot].CreateDrawingContext(null));
}
}
}

Loading…
Cancel
Save