Browse Source

Stop animations from ticking when window is hidden

pull/8105/head
Nikita Tsukanov 4 years ago
parent
commit
10247f3dc2
  1. 22
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs
  2. 6
      src/Avalonia.Base/Rendering/Composition/Server/ServerVisual.cs

22
src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Numerics;
using System.Threading;
using Avalonia.Media;
@ -24,6 +25,7 @@ namespace Avalonia.Rendering.Composition.Server
private IDrawingContextLayerImpl? _layer;
private bool _redrawRequested;
private bool _disposed;
private HashSet<ServerCompositionVisual> _attachedVisuals = new();
public ReadbackIndices Readback { get; } = new();
@ -39,9 +41,17 @@ namespace Avalonia.Rendering.Composition.Server
partial void OnIsEnabledChanged()
{
if (IsEnabled)
{
_compositor.AddCompositionTarget(this);
foreach (var v in _attachedVisuals)
v.Activate();
}
else
{
_compositor.RemoveCompositionTarget(this);
foreach (var v in _attachedVisuals)
v.Deactivate();
}
}
partial void DeserializeChangesExtra(BatchStreamReader c)
@ -155,5 +165,17 @@ namespace Avalonia.Rendering.Composition.Server
_renderTarget?.Dispose();
_renderTarget = null;
}
public void AddVisual(ServerCompositionVisual visual)
{
if (_attachedVisuals.Add(visual) && IsEnabled)
visual.Activate();
}
public void RemoveVisual(ServerCompositionVisual visual)
{
if (_attachedVisuals.Remove(visual) && IsEnabled)
visual.Deactivate();
}
}
}

6
src/Avalonia.Base/Rendering/Composition/Server/ServerVisual.cs

@ -126,14 +126,14 @@ namespace Avalonia.Rendering.Composition.Server
partial void OnRootChanging()
{
if(Root != null)
Deactivate();
if (Root != null)
Root.RemoveVisual(this);
}
partial void OnRootChanged()
{
if (Root != null)
Activate();
Root.AddVisual(this);
}
protected override void ValuesInvalidated()

Loading…
Cancel
Save