Browse Source

Make windowing subsystem select the renderer.

Direct2D selects `DeferredRenderer`, the GTK backends select
`ImmediateRenderer` for now.
scenegraph-after-breakage
Steven Kirk 10 years ago
parent
commit
faf150c6d7
  1. 19
      src/Gtk/Avalonia.Cairo/CairoPlatform.cs
  2. 2
      src/Gtk/Avalonia.Gtk/GtkPlatform.cs
  3. 8
      src/Gtk/Avalonia.Gtk3/Gtk3Platform.cs
  4. 8
      src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
  5. 3
      src/Skia/Avalonia.Skia/SkiaPlatform.cs
  6. 19
      src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs
  7. 8
      src/Windows/Avalonia.Win32/Win32Platform.cs

19
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();

2
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)

8
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);

8
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,

3
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

19
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();

8
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);
}
}
}

Loading…
Cancel
Save