csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.0 KiB
78 lines
2.0 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using Avalonia.Platform;
|
|
using Avalonia.Rendering;
|
|
using Avalonia.VisualTree;
|
|
|
|
namespace Avalonia.Native
|
|
{
|
|
public class DeferredRendererProxy : IRenderer, IRenderLoopTask, IRenderLoop
|
|
{
|
|
object _lock = new object();
|
|
void IRenderLoop.Add(IRenderLoopTask i)
|
|
{
|
|
AvaloniaLocator.Current.GetService<IRenderLoop>().Add(this);
|
|
}
|
|
|
|
void IRenderLoop.Remove(IRenderLoopTask i)
|
|
{
|
|
AvaloniaLocator.Current.GetService<IRenderLoop>().Remove(this);
|
|
}
|
|
|
|
|
|
DeferredRenderer _renderer;
|
|
IRenderLoopTask _rendererTask;
|
|
public DeferredRendererProxy(IRenderRoot root)
|
|
{
|
|
_renderer = new DeferredRenderer(root, this);
|
|
_rendererTask = (IRenderLoopTask)_renderer;
|
|
}
|
|
|
|
public bool DrawFps{
|
|
get => _renderer.DrawFps;
|
|
set => _renderer.DrawFps = value;
|
|
}
|
|
public bool DrawDirtyRects
|
|
{
|
|
get => _renderer.DrawDirtyRects;
|
|
set => _renderer.DrawDirtyRects = value;
|
|
}
|
|
|
|
public bool NeedsUpdate => _rendererTask.NeedsUpdate;
|
|
|
|
public void AddDirty(IVisual visual) => _renderer.AddDirty(visual);
|
|
|
|
public void Dispose() => _renderer.Dispose();
|
|
|
|
public IEnumerable<IVisual> HitTest(Point p, IVisual root, Func<IVisual, bool> filter)
|
|
{
|
|
return _renderer.HitTest(p, root, filter);
|
|
}
|
|
|
|
public void Paint(Rect rect)
|
|
{
|
|
if (NeedsUpdate)
|
|
Update(TimeSpan.FromMilliseconds(Environment.TickCount));
|
|
Render();
|
|
}
|
|
|
|
public void Resized(Size size) => _renderer.Resized(size);
|
|
|
|
public void Start() => _renderer.Start();
|
|
|
|
public void Stop() => _renderer.Stop();
|
|
|
|
public void Update(TimeSpan time)
|
|
{
|
|
_rendererTask.Update(time);
|
|
}
|
|
|
|
public void Render()
|
|
{
|
|
lock(_lock)
|
|
{
|
|
_rendererTask.Render();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|