diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs
index 763ec3b5f6..7d6e9442d1 100644
--- a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs
+++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs
@@ -14,7 +14,7 @@ namespace Avalonia.Rendering.Composition.Server;
///
/// Server-side counterpart of
///
-internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisual
+internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisual, IServerRenderResourceObserver
{
#if DEBUG
// This is needed for debugging purposes so we could see inspect the associated visual from debugger
@@ -37,6 +37,7 @@ internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisua
{
_renderCommands?.Dispose();
_renderCommands = reader.ReadObject();
+ _renderCommands?.AddObserver(this);
}
base.DeserializeChangesCore(reader, committedAt);
}
@@ -50,6 +51,8 @@ internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisua
base.RenderCore(canvas, currentTransformedClip);
}
+ public void DependencyQueuedInvalidate(IServerRenderResource sender) => ValuesInvalidated();
+
#if DEBUG
public override string ToString()
{
diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerRenderResource.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerRenderResource.cs
index fad1995092..105580e6ad 100644
--- a/src/Avalonia.Base/Rendering/Composition/Server/ServerRenderResource.cs
+++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerRenderResource.cs
@@ -13,8 +13,8 @@ internal interface IServerRenderResourceObserver
internal interface IServerRenderResource : IServerRenderResourceObserver
{
- void AddObserver(IServerRenderResource observer);
- void RemoveObserver(IServerRenderResource observer);
+ void AddObserver(IServerRenderResourceObserver observer);
+ void RemoveObserver(IServerRenderResourceObserver observer);
void QueuedInvalidate();
}
@@ -23,7 +23,7 @@ internal class SimpleServerRenderResource : SimpleServerObject, IServerRenderRes
private bool _pendingInvalidation;
private bool _disposed;
public bool IsDisposed => _disposed;
- private RefCountingSmallDictionary _observers;
+ private RefCountingSmallDictionary _observers;
public SimpleServerRenderResource(ServerCompositor compositor) : base(compositor)
{
@@ -97,7 +97,7 @@ internal class SimpleServerRenderResource : SimpleServerObject, IServerRenderRes
}
- public void AddObserver(IServerRenderResource observer)
+ public void AddObserver(IServerRenderResourceObserver observer)
{
Debug.Assert(!_disposed);
if(_disposed)
@@ -105,7 +105,7 @@ internal class SimpleServerRenderResource : SimpleServerObject, IServerRenderRes
_observers.Add(observer);
}
- public void RemoveObserver(IServerRenderResource observer)
+ public void RemoveObserver(IServerRenderResourceObserver observer)
{
if (_disposed)
return;