Browse Source

add a way to render to canvas with DrawingContext with public api

pull/4771/head
Andrey Kunchev 6 years ago
parent
commit
e893705823
  1. 32
      src/Skia/Avalonia.Skia/ExternalCanvasRenderTarget.cs
  2. 11
      src/Skia/Avalonia.Skia/IExternalCanvasSurface.cs
  3. 2
      src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

32
src/Skia/Avalonia.Skia/ExternalCanvasRenderTarget.cs

@ -0,0 +1,32 @@
using Avalonia.Platform;
using Avalonia.Rendering;
namespace Avalonia.Skia
{
internal class ExternalCanvasRenderTarget : IRenderTarget
{
private IExternalCanvasSurface _surface;
public ExternalCanvasRenderTarget(IExternalCanvasSurface canvas)
{
_surface = canvas;
}
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
var createInfo = new DrawingContextImpl.CreateInfo
{
Canvas = _surface.Canvas,
Dpi = _surface.Dpi,
VisualBrushRenderer = visualBrushRenderer,
DisableTextLcdRendering = true,
};
return new DrawingContextImpl(createInfo);
}
public void Dispose()
{
}
}
}

11
src/Skia/Avalonia.Skia/IExternalCanvasSurface.cs

@ -0,0 +1,11 @@
using SkiaSharp;
namespace Avalonia.Skia
{
public interface IExternalCanvasSurface
{
SKCanvas Canvas { get; }
Vector Dpi { get; }
}
}

2
src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

@ -145,6 +145,8 @@ namespace Avalonia.Skia
{
if (surface is IFramebufferPlatformSurface framebufferSurface)
return new FramebufferRenderTarget(framebufferSurface);
if (surface is IExternalCanvasSurface canvas)
return new ExternalCanvasRenderTarget(canvas);
}
throw new NotSupportedException(

Loading…
Cancel
Save