diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs
index 3dff89f5ec..96c09a8789 100644
--- a/src/Avalonia.Controls/TopLevel.cs
+++ b/src/Avalonia.Controls/TopLevel.cs
@@ -239,7 +239,7 @@ namespace Avalonia.Controls
}
///
- IRenderTarget IRenderRoot.CreateRenderTarget()
+ IRenderTarget IRenderRoot.CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer)
{
return _renderInterface.CreateRenderTarget(PlatformImpl.Handle);
}
diff --git a/src/Avalonia.Visuals/Avalonia.Visuals.csproj b/src/Avalonia.Visuals/Avalonia.Visuals.csproj
index 35aaada8b8..10074c5026 100644
--- a/src/Avalonia.Visuals/Avalonia.Visuals.csproj
+++ b/src/Avalonia.Visuals/Avalonia.Visuals.csproj
@@ -118,6 +118,7 @@
+
diff --git a/src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs b/src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs
index cefd2ec9d8..9d3f15f69a 100644
--- a/src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs
+++ b/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();
+ ///
+ public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer vbr) => PlatformImpl.CreateDrawingContext(vbr);
}
}
diff --git a/src/Avalonia.Visuals/Platform/IRenderTarget.cs b/src/Avalonia.Visuals/Platform/IRenderTarget.cs
index fcde194884..765d7a9d9d 100644
--- a/src/Avalonia.Visuals/Platform/IRenderTarget.cs
+++ b/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
///
/// Creates an for a rendering session.
///
- IDrawingContextImpl CreateDrawingContext();
+ ///
+ /// A render to be used to render visual brushes. May be null if no visual brushes are
+ /// to be drawn.
+ ///
+ IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer);
}
}
diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
index 7ec841bba9..b9e6a53a4a 100644
--- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
+++ b/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);
diff --git a/src/Avalonia.Visuals/Rendering/IRenderRoot.cs b/src/Avalonia.Visuals/Rendering/IRenderRoot.cs
index 09639cdaff..1c870cd8cb 100644
--- a/src/Avalonia.Visuals/Rendering/IRenderRoot.cs
+++ b/src/Avalonia.Visuals/Rendering/IRenderRoot.cs
@@ -28,7 +28,7 @@ namespace Avalonia.Rendering
/// Creates a render target for the window.
///
/// An .
- IRenderTarget CreateRenderTarget();
+ IRenderTarget CreateRenderTarget(IVisualBrushRenderer visualBrushRenderer);
///
/// Adds a rectangle to the window's dirty region.
diff --git a/src/Avalonia.Visuals/Rendering/IVisualBrushRenderer.cs b/src/Avalonia.Visuals/Rendering/IVisualBrushRenderer.cs
new file mode 100644
index 0000000000..33d0ee258c
--- /dev/null
+++ b/src/Avalonia.Visuals/Rendering/IVisualBrushRenderer.cs
@@ -0,0 +1,19 @@
+using System;
+using Avalonia.Media;
+
+namespace Avalonia.Rendering
+{
+ ///
+ /// Defines a renderer used to render a visual brush to a bitmap.
+ ///
+ public interface IVisualBrushRenderer
+ {
+ ///
+ /// Renders a visual brush to a bitmap.
+ ///
+ /// The drawing context to render to.
+ /// The visual brush.
+ /// A bitmap containing the rendered brush.
+ void RenderVisualBrush(IDrawingContextImpl context, VisualBrush brush);
+ }
+}
diff --git a/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs b/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs
index ec5c65f7cd..9edb0251e6 100644
--- a/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs
+++ b/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);
diff --git a/src/Avalonia.Visuals/Rendering/RenderLayer.cs b/src/Avalonia.Visuals/Rendering/RenderLayer.cs
index cf02644a45..df9497af6f 100644
--- a/src/Avalonia.Visuals/Rendering/RenderLayer.cs
+++ b/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));
diff --git a/src/Gtk/Avalonia.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs b/src/Gtk/Avalonia.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
index 0c52858dc6..b946d608be 100644
--- a/src/Gtk/Avalonia.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
+++ b/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)
diff --git a/src/Gtk/Avalonia.Cairo/RenderTarget.cs b/src/Gtk/Avalonia.Cairo/RenderTarget.cs
index a4a41cb22d..92ed71e0fd 100644
--- a/src/Gtk/Avalonia.Cairo/RenderTarget.cs
+++ b/src/Gtk/Avalonia.Cairo/RenderTarget.cs
@@ -47,8 +47,9 @@ namespace Avalonia.Cairo
///
/// Creates a cairo surface that targets a platform-specific resource.
///
+ /// The visual brush renderer to use.
/// A surface wrapped in an .
- public IDrawingContextImpl CreateDrawingContext()
+ public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
if (_window != null)
return new Media.DrawingContext(_window.GdkWindow);
diff --git a/src/Shared/RenderHelpers/TileBrushImplHelper.cs b/src/Shared/RenderHelpers/TileBrushImplHelper.cs
index f85df811e4..fc0057f01b 100644
--- a/src/Shared/RenderHelpers/TileBrushImplHelper.cs
+++ b/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;
}
}
\ No newline at end of file
diff --git a/src/Skia/Avalonia.Skia.Android/RenderTarget.cs b/src/Skia/Avalonia.Skia.Android/RenderTarget.cs
index 18045e1a5a..68e30ea34f 100644
--- a/src/Skia/Avalonia.Skia.Android/RenderTarget.cs
+++ b/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;
diff --git a/src/Skia/Avalonia.Skia.Android/SkiaRenderView.cs b/src/Skia/Avalonia.Skia.Android/SkiaRenderView.cs
index f176e9fb06..8b2e5042b3 100644
--- a/src/Skia/Avalonia.Skia.Android/SkiaRenderView.cs
+++ b/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));
}
diff --git a/src/Skia/Avalonia.Skia.Desktop/RenderTarget.cs b/src/Skia/Avalonia.Skia.Desktop/RenderTarget.cs
index f8f0d633c6..7d18b2cb21 100644
--- a/src/Skia/Avalonia.Skia.Desktop/RenderTarget.cs
+++ b/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();
diff --git a/src/Skia/Avalonia.Skia.iOS/RenderTarget.cs b/src/Skia/Avalonia.Skia.iOS/RenderTarget.cs
index a2be292bc6..ebc2bc60ca 100644
--- a/src/Skia/Avalonia.Skia.iOS/RenderTarget.cs
+++ b/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();
diff --git a/src/Skia/Avalonia.Skia/BitmapImpl.cs b/src/Skia/Avalonia.Skia/BitmapImpl.cs
index ab212e10cf..4ac8e87901 100644
--- a/src/Skia/Avalonia.Skia/BitmapImpl.cs
+++ b/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);
diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
index 14acf5f580..a1cc68442c 100644
--- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs
+++ b/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 =
diff --git a/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
index 2c841bedb5..6660dd1ccb 100644
--- a/src/Windows/Avalonia.Direct2D1/Media/DrawingContextImpl.cs
+++ b/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
///
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
///
/// Initializes a new instance of the class.
///
+ /// The visual brush renderer.
/// The render target to draw to.
/// The DirectWrite factory.
/// An optional swap chain associated with this drawing context.
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);
diff --git a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
index 90fe5675ce..6840d2327a 100644
--- a/src/Windows/Avalonia.Direct2D1/Media/ImageBrushImpl.cs
+++ b/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);
diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
index 96b51e4407..c0779126e4 100644
--- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
+++ b/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);
}
}
}
diff --git a/src/Windows/Avalonia.Direct2D1/RenderTarget.cs b/src/Windows/Avalonia.Direct2D1/RenderTarget.cs
index 5c535982f9..32f334f96c 100644
--- a/src/Windows/Avalonia.Direct2D1/RenderTarget.cs
+++ b/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.
///
/// An .
- public IDrawingContextImpl CreateDrawingContext()
+ public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
- return new DrawingContextImpl(_renderTarget, DirectWriteFactory);
+ return new DrawingContextImpl(visualBrushRenderer, _renderTarget, DirectWriteFactory);
}
public void Dispose()
diff --git a/src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs b/src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs
index 4eea7640ed..ef2213d73b 100644
--- a/src/Windows/Avalonia.Direct2D1/SwapChainRenderTarget.cs
+++ b/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.
///
/// An .
- 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()
diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs
index 58f4127cdc..0980a68dfe 100644
--- a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs
+++ b/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();
}
diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs
index 38b51dfd49..b780164a03 100644
--- a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs
+++ b/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();
}
diff --git a/tests/Avalonia.UnitTests/TestRoot.cs b/tests/Avalonia.UnitTests/TestRoot.cs
index 6528d64e8b..baf00bcb5c 100644
--- a/tests/Avalonia.UnitTests/TestRoot.cs
+++ b/tests/Avalonia.UnitTests/TestRoot.cs
@@ -17,7 +17,7 @@ namespace Avalonia.UnitTests
{
private readonly NameScope _nameScope = new NameScope();
private readonly IRenderTarget _renderTarget = Mock.Of(
- x => x.CreateDrawingContext() == Mock.Of());
+ x => x.CreateDrawingContext(It.IsAny()) == Mock.Of());
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)
{
diff --git a/tests/Avalonia.UnitTests/TestTemplatedRoot.cs b/tests/Avalonia.UnitTests/TestTemplatedRoot.cs
index 91e797fa87..660cf98cf3 100644
--- a/tests/Avalonia.UnitTests/TestTemplatedRoot.cs
+++ b/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();
}
diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs
index adddfd845e..ee830c47ae 100644
--- a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs
+++ b/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs
@@ -235,7 +235,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering
private IRenderTargetBitmapImpl CreateLayer()
{
return Mock.Of(x =>
- x.CreateDrawingContext() == Mock.Of());
+ x.CreateDrawingContext(It.IsAny()) == Mock.Of());
}
private Mock MockLayerFactory(IRenderRoot root)
@@ -278,7 +278,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering
public Mock GetMockDrawingContext(IVisual layerRoot)
{
- return Mock.Get(_layers[layerRoot].CreateDrawingContext());
+ return Mock.Get(_layers[layerRoot].CreateDrawingContext(null));
}
}
}