Browse Source

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

pull/3816/head
Nikita Tsukanov 7 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 readonly IRenderLoop _loop;
private ImmediateRenderer _renderer; private ImmediateRenderer _renderer;
private bool _invalidated; private bool _invalidated;
private bool _running;
private object _lock = new object(); private object _lock = new object();
public X11ImmediateRendererProxy(IVisual root, IRenderLoop loop) public X11ImmediateRendererProxy(IVisual root, IRenderLoop loop)
@ -22,6 +23,7 @@ namespace Avalonia.X11
public void Dispose() public void Dispose()
{ {
_running = false;
_renderer.Dispose(); _renderer.Dispose();
} }
@ -78,12 +80,14 @@ namespace Avalonia.X11
public void Start() public void Start()
{ {
_running = true;
_loop.Add(this); _loop.Add(this);
_renderer.Start(); _renderer.Start();
} }
public void Stop() public void Stop()
{ {
_running = false;
_loop.Remove(this); _loop.Remove(this);
_renderer.Stop(); _renderer.Stop();
} }
@ -100,7 +104,11 @@ namespace Avalonia.X11
{ {
lock (_lock) lock (_lock)
_invalidated = false; _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