Browse Source

Merge pull request #1631 from nc4rrillo/custom-renderers

Add support for locating custom renderers
pull/1579/merge
Steven Kirk 8 years ago
committed by GitHub
parent
commit
e37a766058
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  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 //HACK: This is a temporary hack that is used in the render loop
//to update TransformedBounds property //to update TransformedBounds property
[Obsolete("HACK for render loop, don't use")] [Obsolete("HACK for render loop, don't use")]
internal Matrix CurrentContainerTransform => _currentContainerTransform; public Matrix CurrentContainerTransform => _currentContainerTransform;
/// <summary> /// <summary>
/// Draws a bitmap image. /// 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

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

Loading…
Cancel
Save