From b06a5a2991d66c6ff4c7d5c09ec0746d519ed248 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Wed, 31 Oct 2018 00:38:34 +0200 Subject: [PATCH] fix finally #1998 for immediaterenderer --- .../Rendering/ImmediateRenderer.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs b/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs index 967dd24acf..08f3803e9b 100644 --- a/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs @@ -23,7 +23,6 @@ namespace Avalonia.Rendering private readonly IVisual _root; private readonly IRenderRoot _renderRoot; private IRenderTarget _renderTarget; - private Rect _lastPaintBounds; /// /// Initializes a new instance of the class. @@ -46,8 +45,6 @@ namespace Avalonia.Rendering /// 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);