Browse Source

Merge pull request #11642 from AvaloniaUI/fixes/server-visual-invalidate

Actually invalidate the server visual on render list invalidation
pull/11654/head
Jumar Macato 3 years ago
committed by GitHub
parent
commit
1a23b45c9f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs
  2. 10
      src/Avalonia.Base/Rendering/Composition/Server/ServerRenderResource.cs

5
src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs

@ -14,7 +14,7 @@ namespace Avalonia.Rendering.Composition.Server;
/// <summary> /// <summary>
/// Server-side counterpart of <see cref="CompositionDrawListVisual"/> /// Server-side counterpart of <see cref="CompositionDrawListVisual"/>
/// </summary> /// </summary>
internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisual internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisual, IServerRenderResourceObserver
{ {
#if DEBUG #if DEBUG
// This is needed for debugging purposes so we could see inspect the associated visual from debugger // 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?.Dispose();
_renderCommands = reader.ReadObject<ServerCompositionRenderData?>(); _renderCommands = reader.ReadObject<ServerCompositionRenderData?>();
_renderCommands?.AddObserver(this);
} }
base.DeserializeChangesCore(reader, committedAt); base.DeserializeChangesCore(reader, committedAt);
} }
@ -50,6 +51,8 @@ internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisua
base.RenderCore(canvas, currentTransformedClip); base.RenderCore(canvas, currentTransformedClip);
} }
public void DependencyQueuedInvalidate(IServerRenderResource sender) => ValuesInvalidated();
#if DEBUG #if DEBUG
public override string ToString() public override string ToString()
{ {

10
src/Avalonia.Base/Rendering/Composition/Server/ServerRenderResource.cs

@ -13,8 +13,8 @@ internal interface IServerRenderResourceObserver
internal interface IServerRenderResource : IServerRenderResourceObserver internal interface IServerRenderResource : IServerRenderResourceObserver
{ {
void AddObserver(IServerRenderResource observer); void AddObserver(IServerRenderResourceObserver observer);
void RemoveObserver(IServerRenderResource observer); void RemoveObserver(IServerRenderResourceObserver observer);
void QueuedInvalidate(); void QueuedInvalidate();
} }
@ -23,7 +23,7 @@ internal class SimpleServerRenderResource : SimpleServerObject, IServerRenderRes
private bool _pendingInvalidation; private bool _pendingInvalidation;
private bool _disposed; private bool _disposed;
public bool IsDisposed => _disposed; public bool IsDisposed => _disposed;
private RefCountingSmallDictionary<IServerRenderResource> _observers; private RefCountingSmallDictionary<IServerRenderResourceObserver> _observers;
public SimpleServerRenderResource(ServerCompositor compositor) : base(compositor) 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); Debug.Assert(!_disposed);
if(_disposed) if(_disposed)
@ -105,7 +105,7 @@ internal class SimpleServerRenderResource : SimpleServerObject, IServerRenderRes
_observers.Add(observer); _observers.Add(observer);
} }
public void RemoveObserver(IServerRenderResource observer) public void RemoveObserver(IServerRenderResourceObserver observer)
{ {
if (_disposed) if (_disposed)
return; return;

Loading…
Cancel
Save