Browse Source

Merge branch 'feature/RelativePathEmbeddedFonts' of https://github.com/Gillibald/Avalonia into feature/RelativePathEmbeddedFonts

Benedikt Schroeder 6 years ago
parent
commit
b87efced5d

+ 4 - 0
packages/Avalonia/AvaloniaBuildTasks.targets

@@ -36,4 +36,8 @@
       Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:GenerateAvaloniaResources /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration)"/>
 
   </Target>
+  
+  <ItemGroup>
+    <UpToDateCheckInput Include="@(AvaloniaResource)" />
+  </ItemGroup>
 </Project>

+ 8 - 1
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))

+ 84 - 0
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<Control>() { 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<IVisual>();
+            int rendered = 0;
+            visualTarget.Setup(v => v.Render(It.IsAny<DrawingContext>())).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<Control>() { 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<IVisual>();
+            int rendered = 0;
+            visualTarget.Setup(v => v.Render(It.IsAny<DrawingContext>())).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);
+        }
     }
 }