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

Loading…
Cancel
Save