|
|
|
@ -23,7 +23,6 @@ namespace Avalonia.Rendering |
|
|
|
private readonly IVisual _root; |
|
|
|
private readonly IRenderRoot _renderRoot; |
|
|
|
private IRenderTarget _renderTarget; |
|
|
|
private Rect _lastPaintBounds; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Initializes a new instance of the <see cref="ImmediateRenderer"/> class.
|
|
|
|
@ -46,8 +45,6 @@ namespace Avalonia.Rendering |
|
|
|
/// <inheritdoc/>
|
|
|
|
public void Paint(Rect rect) |
|
|
|
{ |
|
|
|
_lastPaintBounds = rect; |
|
|
|
|
|
|
|
if (_renderTarget == null) |
|
|
|
{ |
|
|
|
_renderTarget = ((IRenderRoot)_root).CreateRenderTarget(); |
|
|
|
@ -129,10 +126,17 @@ namespace Avalonia.Rendering |
|
|
|
{ |
|
|
|
var bounds = new Rect(visual.Bounds.Size).TransformToAABB(m.Value); |
|
|
|
|
|
|
|
if (_lastPaintBounds != default) |
|
|
|
//use transformedbounds as previous render state of the visual bounds
|
|
|
|
//so we can invalidate old and new bounds of a control in case it moved/shrinked
|
|
|
|
if (visual.TransformedBounds.HasValue) |
|
|
|
{ |
|
|
|
_renderRoot?.Invalidate(_lastPaintBounds); |
|
|
|
_lastPaintBounds = default; |
|
|
|
var trb = visual.TransformedBounds.Value; |
|
|
|
var trBounds = trb.Bounds.TransformToAABB(trb.Transform); |
|
|
|
|
|
|
|
if (trBounds != bounds) |
|
|
|
{ |
|
|
|
_renderRoot?.Invalidate(trBounds); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
_renderRoot?.Invalidate(bounds); |
|
|
|
|