Browse Source

Merge branch 'master' into feature/RelativePathEmbeddedFonts

pull/2145/head
Benedikt Schroeder 8 years ago
committed by GitHub
parent
commit
6191939a34
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      packages/Avalonia/AvaloniaBuildTasks.targets
  2. 9
      src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs
  3. 84
      tests/Avalonia.Visuals.UnitTests/Rendering/ImmediateRendererTests.cs

4
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>

9
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
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);
}
}
}

Loading…
Cancel
Save