Browse Source

Include transforms in effective bounds.

pull/4173/head
Steven Kirk 6 years ago
parent
commit
d0e74b7dbd
  1. 14
      src/Avalonia.Layout/LayoutManager.cs

14
src/Avalonia.Layout/LayoutManager.cs

@ -349,15 +349,15 @@ namespace Avalonia.Layout
private Rect CalculateEffectiveViewport(IVisual control)
{
var viewport = new Rect(0, 0, double.PositiveInfinity, double.PositiveInfinity);
CalculateEffectiveViewport(control, ref viewport);
CalculateEffectiveViewport(control, control, ref viewport);
return viewport;
}
private void CalculateEffectiveViewport(IVisual control, ref Rect viewport)
private void CalculateEffectiveViewport(IVisual target, IVisual control, ref Rect viewport)
{
if (control.VisualParent is object)
{
CalculateEffectiveViewport(control.VisualParent, ref viewport);
CalculateEffectiveViewport(target, control.VisualParent, ref viewport);
}
if (control.ClipToBounds || control.VisualParent is null)
@ -368,6 +368,14 @@ namespace Avalonia.Layout
{
viewport = viewport.Translate(-control.Bounds.Position);
}
if (control != target && control.RenderTransform is object)
{
var origin = control.RenderTransformOrigin.ToPixels(control.Bounds.Size);
var offset = Matrix.CreateTranslation(origin);
var renderTransform = (-offset) * control.RenderTransform.Value.Invert() * (offset);
viewport = viewport.TransformToAABB(renderTransform);
}
}
private readonly struct EffectiveViewportChangedListener

Loading…
Cancel
Save