Browse Source

Merge branch 'master' into fixes/1203-clear-capture-on-control-removed

pull/1210/head
danwalmsley 9 years ago
committed by GitHub
parent
commit
05855d3c70
  1. 5
      .ncrunch/Avalonia.Designer.HostApp.v3.ncrunchproject
  2. 7
      src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs
  3. 54
      tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs

5
.ncrunch/Avalonia.Designer.HostApp.v3.ncrunchproject

@ -0,0 +1,5 @@
<ProjectConfiguration>
<Settings>
<IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
</Settings>
</ProjectConfiguration>

7
src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs

@ -168,11 +168,14 @@ namespace Avalonia.Rendering.SceneGraph
using (context.PushTransformContainer())
{
var startLayer = opacity < 1 || visual.OpacityMask != null;
var clipBounds = bounds.TransformToAABB(contextImpl.Transform).Intersect(clip);
forceRecurse = forceRecurse || node.Transform != contextImpl.Transform;
forceRecurse = forceRecurse ||
node.Transform != contextImpl.Transform ||
node.ClipBounds != clipBounds;
node.Transform = contextImpl.Transform;
node.ClipBounds = bounds.TransformToAABB(node.Transform).Intersect(clip);
node.ClipBounds = clipBounds;
node.ClipToBounds = clipToBounds;
node.GeometryClip = visual.Clip?.PlatformImpl;
node.Opacity = opacity;

54
tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs

@ -143,13 +143,61 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
var borderNode = scene.FindNode(border);
Assert.Equal(new Rect(50, 50, 50, 50), borderNode.ClipBounds);
}
}
[Fact]
public void Should_Update_Descendent_ClipBounds_When_Margin_Changed()
{
using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
{
Border border;
Canvas canvas;
var tree = new TestRoot
{
Width = 200,
Height = 300,
Child = canvas = new Canvas
{
ClipToBounds = true,
Width = 100,
Height = 100,
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Top,
Children =
{
(border = new Border
{
Background = Brushes.AliceBlue,
Width = 100,
Height = 100,
[Canvas.LeftProperty] = 50,
[Canvas.TopProperty] = 50,
})
}
}
};
tree.Measure(Size.Infinity);
tree.Arrange(new Rect(tree.DesiredSize));
// Initial ClipBounds are correct, make sure they're still correct after updating border.
var scene = new Scene(tree);
var sceneBuilder = new SceneBuilder();
sceneBuilder.UpdateAll(scene);
var borderNode = scene.FindNode(border);
Assert.Equal(new Rect(50, 50, 50, 50), borderNode.ClipBounds);
canvas.Width = canvas.Height = 125;
canvas.Measure(Size.Infinity);
canvas.Arrange(new Rect(tree.DesiredSize));
// Initial ClipBounds are correct, make sure they're still correct after updating canvas.
scene = scene.Clone();
Assert.True(sceneBuilder.Update(scene, border));
Assert.True(sceneBuilder.Update(scene, canvas));
borderNode = scene.FindNode(border);
Assert.Equal(new Rect(50, 50, 50, 50), borderNode.ClipBounds);
Assert.Equal(new Rect(50, 50, 75, 75), borderNode.ClipBounds);
}
}

Loading…
Cancel
Save