Browse Source

Add support for locating custom renderers

pull/1631/head
Nelson Carrillo 8 years ago
parent
commit
07b457d8a0
  1. 2
      src/Avalonia.Visuals/Media/DrawingContext.cs
  2. 20
      src/Avalonia.Visuals/Rendering/IRendererFactory.cs
  3. 9
      src/Windows/Avalonia.Win32/WindowImpl.cs

2
src/Avalonia.Visuals/Media/DrawingContext.cs

@ -59,7 +59,7 @@ namespace Avalonia.Media
//HACK: This is a temporary hack that is used in the render loop
//to update TransformedBounds property
[Obsolete("HACK for render loop, don't use")]
internal Matrix CurrentContainerTransform => _currentContainerTransform;
public Matrix CurrentContainerTransform => _currentContainerTransform;
/// <summary>
/// Draws a bitmap image.

20
src/Avalonia.Visuals/Rendering/IRendererFactory.cs

@ -0,0 +1,20 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
namespace Avalonia.Rendering
{
/// <summary>
/// Defines the interface for a renderer factory.
/// </summary>
public interface IRendererFactory
{
/// <summary>
/// Creates a renderer.
/// </summary>
/// <param name="root">The root visual.</param>
/// <param name="renderLoop">The render loop.</param>
IRenderer Create(IRenderRoot root, IRenderLoop renderLoop);
}
}

9
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -124,9 +124,12 @@ namespace Avalonia.Win32
public IRenderer CreateRenderer(IRenderRoot root)
{
var loop = AvaloniaLocator.Current.GetService<IRenderLoop>();
return Win32Platform.UseDeferredRendering ?
(IRenderer)new DeferredRenderer(root, loop) :
new ImmediateRenderer(root);
var customRendererFactory = AvaloniaLocator.Current.GetService<IRendererFactory>();
if (customRendererFactory != null)
return customRendererFactory.Create(root, loop);
return Win32Platform.UseDeferredRendering ? (IRenderer)new DeferredRenderer(root, loop) : new ImmediateRenderer(root);
}
public void Resize(Size value)

Loading…
Cancel
Save