Browse Source

fix ImmediateRenderer invalidation for controls with RenderTransform issue #1998

pull/2002/head
Andrey Kunchev 8 years ago
parent
commit
7fd6975658
  1. 37
      src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs

37
src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs

@ -115,12 +115,45 @@ namespace Avalonia.Rendering
}
}
private static Matrix? TransformToVisual(IVisual visual, IVisual root)
{
var result = Matrix.Identity;
while (visual != root)
{
if (visual.RenderTransform?.Value != null)
{
var origin = visual.RenderTransformOrigin.ToPixels(visual.Bounds.Size);
var offset = Matrix.CreateTranslation(origin);
var renderTransform = (-offset) * visual.RenderTransform.Value * (offset);
result *= renderTransform;
}
var topLeft = visual.Bounds.TopLeft;
if (topLeft != default)
{
result *= Matrix.CreateTranslation(topLeft);
}
visual = visual.VisualParent;
if (visual == null)
{
return null;
}
}
return result;
}
/// <inheritdoc/>
public void AddDirty(IVisual visual)
{
if (visual.Bounds != Rect.Empty)
{
var m = visual.TransformToVisual(_root);
var m = TransformToVisual(visual, _root);
if (m.HasValue)
{
@ -191,7 +224,7 @@ namespace Avalonia.Rendering
}
}
static IEnumerable<IVisual> HitTest(
private static IEnumerable<IVisual> HitTest(
IVisual visual,
Point p,
Func<IVisual, bool> filter)

Loading…
Cancel
Save