diff --git a/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj b/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj
index 3ecd91eee2..1220a7fcdc 100644
--- a/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj
+++ b/src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj
@@ -61,7 +61,6 @@
-
@@ -71,7 +70,6 @@
-
diff --git a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs
index ef237cb35e..a9491cd46d 100644
--- a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs
+++ b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs
@@ -26,14 +26,22 @@ namespace Avalonia.Cairo
{
using System.IO;
using global::Cairo;
+ using Rendering;
- public class CairoPlatform : IPlatformRenderInterface
+ public class CairoPlatform : IPlatformRenderInterface, IRendererFactory
{
private static readonly CairoPlatform s_instance = new CairoPlatform();
private static readonly Pango.Context s_pangoContext = CreatePangoContext();
- public static void Initialize() => AvaloniaLocator.CurrentMutable.Bind().ToConstant(s_instance);
+ public static bool UseImmediateRenderer { get; set; }
+
+ public static void Initialize()
+ {
+ AvaloniaLocator.CurrentMutable
+ .Bind().ToConstant(s_instance)
+ .Bind().ToConstant(s_instance);
+ }
public IBitmapImpl CreateBitmap(int width, int height)
{
@@ -53,6 +61,18 @@ namespace Avalonia.Cairo
return new FormattedTextImpl(s_pangoContext, text, fontFamily, fontSize, fontStyle, textAlignment, fontWeight, constraint);
}
+ public IRenderer CreateRenderer(IRenderRoot root, IRenderLoop renderLoop)
+ {
+ if (UseImmediateRenderer)
+ {
+ return new ImmediateRenderer(root, renderLoop);
+ }
+ else
+ {
+ return new DeferredRenderer(root, renderLoop);
+ }
+ }
+
public IRenderTarget CreateRenderTarget(IEnumerable