Browse Source

Extend dirty rect when UseLayoutRounding=false (#18511)

Co-authored-by: Benedikt Stebner <Gillibald@users.noreply.github.com>
release/11.3.2
Julien Lebosquain 1 year ago
parent
commit
cfe0a1e646
  1. 12
      src/Avalonia.Base/Layout/Layoutable.cs
  2. 6
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionVisual.cs
  3. 1
      src/Avalonia.Base/composition-schema.xml

12
src/Avalonia.Base/Layout/Layoutable.cs

@ -948,5 +948,17 @@ namespace Avalonia.Layout
{
return new Size(Math.Max(size.Width, 0), Math.Max(size.Height, 0));
}
internal override void SynchronizeCompositionProperties()
{
base.SynchronizeCompositionProperties();
if (CompositionVisual is { } visual)
{
// If the visual isn't using layout rounding, it's possible that antialiasing renders to pixels
// outside the current bounds. Extend the dirty rect by 1px in all directions in this case.
visual.ShouldExtendDirtyRect = !UseLayoutRounding;
}
}
}
}

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

@ -254,6 +254,12 @@ namespace Avalonia.Rendering.Composition.Server
{
if (rc == default)
return;
// If the visual isn't using layout rounding, it's possible that antialiasing renders to pixels
// outside the current bounds. Extend the dirty rect by 1px in all directions in this case.
if (ShouldExtendDirtyRect && RenderOptions.EdgeMode != EdgeMode.Aliased)
rc = rc.Inflate(new Thickness(1));
Root?.AddDirtyRect(rc);
}

1
src/Avalonia.Base/composition-schema.xml

@ -34,6 +34,7 @@
<Property Name="OpacityMaskBrush" ClientName="OpacityMaskBrushTransportField" Type="Avalonia.Media.IBrush?" Private="true" />
<Property Name="Effect" Type="Avalonia.Media.IImmutableEffect?" Internal="true" />
<Property Name="RenderOptions" Type="Avalonia.Media.RenderOptions" />
<Property Name="ShouldExtendDirtyRect" Type="bool" Internal="true" />
</Object>
<Object Name="CompositionContainerVisual" Inherits="CompositionVisual"/>
<Object Name="CompositionSolidColorVisual" Inherits="CompositionContainerVisual">

Loading…
Cancel
Save