Browse Source

Make windowing subsystem select the renderer.

Direct2D selects `DeferredRenderer`, the GTK backends select
`ImmediateRenderer` for now.
Steven Kirk 8 years ago
parent
commit
faf150c6d7

+ 2 - 17
src/Gtk/Avalonia.Cairo/CairoPlatform.cs

@@ -28,19 +28,16 @@ namespace Avalonia.Cairo
     using global::Cairo;
     using Rendering;
 
-    public class CairoPlatform : IPlatformRenderInterface, IRendererFactory
+    public class CairoPlatform : IPlatformRenderInterface
     {
         private static readonly CairoPlatform s_instance = new CairoPlatform();
 
         private static readonly Pango.Context s_pangoContext = CreatePangoContext();
 
-        public static bool UseImmediateRenderer { get; set; }
-
         public static void Initialize()
         {
             AvaloniaLocator.CurrentMutable
-                .Bind<IPlatformRenderInterface>().ToConstant(s_instance)
-                .Bind<IRendererFactory>().ToConstant(s_instance);
+                .Bind<IPlatformRenderInterface>().ToConstant(s_instance);
         }
 
         public IBitmapImpl CreateBitmap(int width, int height)
@@ -61,18 +58,6 @@ 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<object> surfaces)
         {
             var accessor = surfaces?.OfType<Func<Gdk.Drawable>>().FirstOrDefault();

+ 1 - 1
src/Gtk/Avalonia.Gtk/GtkPlatform.cs

@@ -115,7 +115,7 @@ namespace Avalonia.Gtk
 
         public IRenderer CreateRenderer(IRenderRoot root, IRenderLoop renderLoop)
         {
-            return new DeferredRenderer(root, renderLoop);
+            return new ImmediateRenderer(root);
         }
 
         public IWindowIconImpl LoadIcon(string fileName)

+ 6 - 2
src/Gtk/Avalonia.Gtk3/Gtk3Platform.cs

@@ -15,7 +15,7 @@ using Avalonia.Gtk3;
 
 namespace Avalonia.Gtk3
 {
-    public class Gtk3Platform : IWindowingPlatform, IPlatformSettings, IPlatformThreadingInterface
+    public class Gtk3Platform : IWindowingPlatform, IPlatformSettings, IPlatformThreadingInterface, IRendererFactory
     {
         internal static readonly Gtk3Platform Instance = new Gtk3Platform();
         internal static readonly MouseDevice Mouse = new MouseDevice();
@@ -38,6 +38,7 @@ namespace Avalonia.Gtk3
                 .Bind<IPlatformSettings>().ToConstant(Instance)
                 .Bind<IPlatformThreadingInterface>().ToConstant(Instance)
                 .Bind<ISystemDialogImpl>().ToSingleton<SystemDialog>()
+                .Bind<IRendererFactory>().ToConstant(Instance)
                 .Bind<IRenderLoop>().ToConstant(new DefaultRenderLoop(60))
                 .Bind<IPlatformIconLoader>().ToConstant(new PlatformIconLoader());
 
@@ -52,7 +53,10 @@ namespace Avalonia.Gtk3
 
         public IPopupImpl CreatePopup() => new PopupImpl();
 
-        
+        public IRenderer CreateRenderer(IRenderRoot root, IRenderLoop renderLoop)
+        {
+            return new ImmediateRenderer(root);
+        }
 
         public Size DoubleClickSize => new Size(4, 4);
 

+ 1 - 7
src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

@@ -5,12 +5,11 @@ using System.Linq;
 using Avalonia.Controls.Platform.Surfaces;
 using Avalonia.Media;
 using Avalonia.Platform;
-using Avalonia.Rendering;
 using SkiaSharp;
 
 namespace Avalonia.Skia
 {
-    public partial class PlatformRenderInterface : IPlatformRenderInterface, IRendererFactory
+    public partial class PlatformRenderInterface : IPlatformRenderInterface
     {
         public IBitmapImpl CreateBitmap(int width, int height)
         {
@@ -62,11 +61,6 @@ namespace Avalonia.Skia
             }
         }
 
-        public IRenderer CreateRenderer(IRenderRoot root, IRenderLoop renderLoop)
-        {
-            return new DeferredRenderer(root, renderLoop);
-        }
-
         public IRenderTargetBitmapImpl CreateRenderTargetBitmap(
             int width,
             int height,

+ 1 - 2
src/Skia/Avalonia.Skia/SkiaPlatform.cs

@@ -27,8 +27,7 @@ namespace Avalonia.Skia
         {
             var renderInterface = new PlatformRenderInterface();
             AvaloniaLocator.CurrentMutable
-                .Bind<IPlatformRenderInterface>().ToConstant(renderInterface)
-                .Bind<IRendererFactory>().ToConstant(renderInterface);
+                .Bind<IPlatformRenderInterface>().ToConstant(renderInterface);
         }
 
         public static bool ForceSoftwareRendering

+ 1 - 18
src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs

@@ -9,9 +9,7 @@ using Avalonia.Direct2D1.Media;
 using Avalonia.Media;
 using Avalonia.Platform;
 using Avalonia.Controls;
-using Avalonia.Controls.Platform.Surfaces;
 using Avalonia.Direct2D1.Media.Imaging;
-using Avalonia.Rendering;
 
 namespace Avalonia
 {
@@ -27,7 +25,7 @@ namespace Avalonia
 
 namespace Avalonia.Direct2D1
 {
-    public class Direct2D1Platform : IPlatformRenderInterface, IRendererFactory
+    public class Direct2D1Platform : IPlatformRenderInterface
     {
         private static readonly Direct2D1Platform s_instance = new Direct2D1Platform();
 
@@ -41,13 +39,10 @@ namespace Avalonia.Direct2D1
 
         private static readonly SharpDX.WIC.ImagingFactory s_imagingFactory = new SharpDX.WIC.ImagingFactory();
 
-        public static bool UseImmediateRenderer { get; set; }
-
         public static void Initialize()
         {
             AvaloniaLocator.CurrentMutable
                 .Bind<IPlatformRenderInterface>().ToConstant(s_instance)
-                .Bind<IRendererFactory>().ToConstant(s_instance)
                 .Bind<SharpDX.Direct2D1.Factory>().ToConstant(s_d2D1Factory)
                 .Bind<SharpDX.Direct2D1.Factory1>().ToConstant(s_d2D1Factory)
                 .BindToSelf(s_dwfactory)
@@ -114,18 +109,6 @@ namespace Avalonia.Direct2D1
                 constraint);
         }
 
-        public IRenderer CreateRenderer(IRenderRoot root, IRenderLoop renderLoop)
-        {
-            if (UseImmediateRenderer)
-            {
-                return new ImmediateRenderer(root);
-            }
-            else
-            {
-                return new DeferredRenderer(root, renderLoop);
-            }
-        }
-
         public IRenderTarget CreateRenderTarget(IEnumerable<object> surfaces)
         {
             var nativeWindow = surfaces?.OfType<IPlatformHandle>().FirstOrDefault();

+ 7 - 1
src/Windows/Avalonia.Win32/Win32Platform.cs

@@ -35,7 +35,7 @@ namespace Avalonia
 
 namespace Avalonia.Win32
 {
-    partial class Win32Platform : IPlatformThreadingInterface, IPlatformSettings, IWindowingPlatform, IPlatformIconLoader
+    partial class Win32Platform : IPlatformThreadingInterface, IPlatformSettings, IWindowingPlatform, IPlatformIconLoader, IRendererFactory
     {
         private static readonly Win32Platform s_instance = new Win32Platform();
         private static uint _uiThread;
@@ -70,6 +70,7 @@ namespace Avalonia.Win32
                 .Bind<IPlatformSettings>().ToConstant(s_instance)
                 .Bind<IPlatformThreadingInterface>().ToConstant(s_instance)
                 .Bind<IRenderLoop>().ToConstant(new RenderLoop(60))
+                .Bind<IRendererFactory>().ToConstant(s_instance)
                 .Bind<ISystemDialogImpl>().ToSingleton<SystemDialogImpl>()
                 .Bind<IWindowingPlatform>().ToConstant(s_instance)
                 .Bind<IPlatformIconLoader>().ToConstant(s_instance);
@@ -197,5 +198,10 @@ namespace Avalonia.Win32
         {
             return new PopupImpl();
         }
+
+        public IRenderer CreateRenderer(IRenderRoot root, IRenderLoop renderLoop)
+        {
+            return new DeferredRenderer(root, renderLoop);
+        }
     }
 }