From 1e91484c689562b257cc1d75828bc95fd79583f6 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Mon, 26 Nov 2018 20:58:23 +0300 Subject: [PATCH 1/3] Added to AvaloniaBuildTasks.targets --- packages/Avalonia/AvaloniaBuildTasks.targets | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets index 3ddd60e2af..10f971cc4c 100644 --- a/packages/Avalonia/AvaloniaBuildTasks.targets +++ b/packages/Avalonia/AvaloniaBuildTasks.targets @@ -36,4 +36,8 @@ Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:GenerateAvaloniaResources /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration)"/> + + + + From 54627eeff114f98cc231d7c788492ed40f0e4f16 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Tue, 27 Nov 2018 14:29:10 +0200 Subject: [PATCH 2/3] add failing unittest for immediaterenderer not rendering sometimes controls issue #2141 --- .../Rendering/ImmediateRendererTests.cs | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs index 82294246b1..73e4a14539 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs @@ -1,8 +1,11 @@ using System.Collections.Generic; using Avalonia.Collections; +using Avalonia.Controls; +using Avalonia.Layout; using Avalonia.Media; using Avalonia.Platform; using Avalonia.Rendering; +using Avalonia.UnitTests; using Avalonia.VisualTree; using Moq; using Xunit; @@ -94,5 +97,86 @@ namespace Avalonia.Visuals.UnitTests.Rendering //then new position Assert.Equal(new Rect(100, 100, 100, 100), invalidationCalls[2]); } + + [Fact] + public void Should_Render_Child_In_Parent_With_RenderTransform() + { + var targetMock = new Mock() { CallBase = true }; + var target = targetMock.Object; + target.Width = 100; + target.Height = 50; + var child = new Panel() + { + RenderTransform = new RotateTransform() { Angle = 90 }, + Children = + { + new Panel() + { + Children = + { + target + } + } + } + }; + + var visualTarget = targetMock.As(); + int rendered = 0; + visualTarget.Setup(v => v.Render(It.IsAny())).Callback(() => rendered++); + + var root = new TestRoot(child); + root.Renderer = new ImmediateRenderer(root); + + root.LayoutManager.ExecuteInitialLayoutPass(root); + + root.Measure(new Size(50, 100)); + root.Arrange(new Rect(new Size(50, 100))); + + root.Renderer.Paint(root.Bounds); + + Assert.Equal(1, rendered); + } + + [Fact] + public void Should_Render_Child_In_Parent_With_RenderTransform2() + { + var targetMock = new Mock() { CallBase = true }; + var target = targetMock.Object; + + target.Width = 100; + target.Height = 50; + target.HorizontalAlignment = HorizontalAlignment.Center; + target.VerticalAlignment = VerticalAlignment.Center; + + var child = new Panel() + { + RenderTransform = new RotateTransform() { Angle = 90 }, + Children = + { + new Panel() + { + Children = + { + target + } + } + } + }; + + var visualTarget = targetMock.As(); + int rendered = 0; + visualTarget.Setup(v => v.Render(It.IsAny())).Callback(() => rendered++); + + var root = new TestRoot(child); + root.Renderer = new ImmediateRenderer(root); + + root.LayoutManager.ExecuteInitialLayoutPass(root); + + root.Measure(new Size(300, 100)); + root.Arrange(new Rect(new Size(300, 100))); + root.Renderer.Paint(root.Bounds); + + Assert.Equal(1, rendered); + } } } From 55600239a6f64ff2850a3afbc96b00b6750e00f5 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Tue, 27 Nov 2018 21:03:00 +0200 Subject: [PATCH 3/3] fix for immediaterenderer not rendering sometimes controls issue #2141 --- src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs b/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs index 08f3803e9b..03ac004fd5 100644 --- a/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs @@ -266,7 +266,14 @@ namespace Avalonia.Rendering if (clipToBounds) { - clipRect = clipRect.Intersect(new Rect(visual.Bounds.Size)); + if (visual.RenderTransform != null) + { + clipRect = new Rect(visual.Bounds.Size); + } + else + { + clipRect = clipRect.Intersect(new Rect(visual.Bounds.Size)); + } } using (context.PushPostTransform(m))