Browse Source

[X11] Cancel scheduled immediate renderer pass if renderer was stopped

pull/3816/head
Nikita Tsukanov 6 years ago
parent
commit
371ae0ca6f
  1. 10
      src/Avalonia.X11/X11ImmediateRendererProxy.cs

10
src/Avalonia.X11/X11ImmediateRendererProxy.cs

@ -11,6 +11,7 @@ namespace Avalonia.X11
private readonly IRenderLoop _loop;
private ImmediateRenderer _renderer;
private bool _invalidated;
private bool _running;
private object _lock = new object();
public X11ImmediateRendererProxy(IVisual root, IRenderLoop loop)
@ -22,6 +23,7 @@ namespace Avalonia.X11
public void Dispose()
{
_running = false;
_renderer.Dispose();
}
@ -78,12 +80,14 @@ namespace Avalonia.X11
public void Start()
{
_running = true;
_loop.Add(this);
_renderer.Start();
}
public void Stop()
{
_running = false;
_loop.Remove(this);
_renderer.Stop();
}
@ -100,7 +104,11 @@ namespace Avalonia.X11
{
lock (_lock)
_invalidated = false;
Dispatcher.UIThread.Post(() => Paint(new Rect(0, 0, 100000, 100000)));
Dispatcher.UIThread.Post(() =>
{
if (_running)
Paint(new Rect(0, 0, 100000, 100000));
});
}
}
}

Loading…
Cancel
Save