Browse Source

Merge branch 'master' into remove-non-ref-resources

pull/10999/head
Yoh Deadfall 3 years ago
committed by GitHub
parent
commit
8674ec6e38
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/Android/Avalonia.Android/Platform/AndroidInsetsManager.cs
  2. 2
      src/Avalonia.Base/Rendering/SceneGraph/CustomDrawOperation.cs
  3. 15
      src/Avalonia.Base/Rendering/SceneGraph/DrawOperation.cs
  4. 2
      src/Avalonia.Base/Rendering/SceneGraph/EllipseNode.cs
  5. 2
      src/Avalonia.Base/Rendering/SceneGraph/ExperimentalAcrylicNode.cs
  6. 2
      src/Avalonia.Base/Rendering/SceneGraph/GeometryNode.cs
  7. 2
      src/Avalonia.Base/Rendering/SceneGraph/GlyphRunNode.cs
  8. 2
      src/Avalonia.Base/Rendering/SceneGraph/ImageNode.cs
  9. 2
      src/Avalonia.Base/Rendering/SceneGraph/LineNode.cs
  10. 2
      src/Avalonia.Base/Rendering/SceneGraph/OpacityMaskNode.cs
  11. 2
      src/Avalonia.Base/Rendering/SceneGraph/RectangleNode.cs
  12. 4
      src/Browser/Avalonia.Browser/WindowingPlatform.cs
  13. 18
      tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs

6
src/Android/Avalonia.Android/Platform/AndroidInsetsManager.cs

@ -81,7 +81,7 @@ namespace Avalonia.Android.Platform
var renderScaling = _topLevel.RenderScaling;
var inset = insets.GetInsets(
(DisplayEdgeToEdge ?
(_displayEdgeToEdge ?
WindowInsetsCompat.Type.StatusBars() | WindowInsetsCompat.Type.NavigationBars() |
WindowInsetsCompat.Type.DisplayCutout() :
0) | WindowInsetsCompat.Type.Ime());
@ -91,8 +91,8 @@ namespace Avalonia.Android.Platform
return new Thickness(inset.Left / renderScaling,
inset.Top / renderScaling,
inset.Right / renderScaling,
(imeInset.Bottom > 0 && ((_usesLegacyLayouts && !DisplayEdgeToEdge) || !_usesLegacyLayouts) ?
imeInset.Bottom - navBarInset.Bottom :
(imeInset.Bottom > 0 && ((_usesLegacyLayouts && !_displayEdgeToEdge) || !_usesLegacyLayouts) ?
imeInset.Bottom - (_displayEdgeToEdge ? 0 : navBarInset.Bottom) :
inset.Bottom) / renderScaling);
}

2
src/Avalonia.Base/Rendering/SceneGraph/CustomDrawOperation.cs

@ -13,7 +13,7 @@ namespace Avalonia.Rendering.SceneGraph
Custom = custom;
}
public override bool HitTest(Point p) => Custom.HitTest(p);
public override bool HitTestTransformed(Point p) => Custom.HitTest(p);
public override void Render(IDrawingContextImpl context)
{

15
src/Avalonia.Base/Rendering/SceneGraph/DrawOperation.cs

@ -37,5 +37,20 @@ namespace Avalonia.Rendering.SceneGraph
}
public Matrix Transform { get; }
public sealed override bool HitTest(Point p)
{
if (Transform.IsIdentity)
return HitTestTransformed(p);
if (!Transform.HasInverse)
return false;
var transformedPoint = Transform.Invert().Transform(p);
return HitTestTransformed(transformedPoint);
}
public abstract bool HitTestTransformed(Point p);
}
}

2
src/Avalonia.Base/Rendering/SceneGraph/EllipseNode.cs

@ -43,7 +43,7 @@ namespace Avalonia.Rendering.SceneGraph
public override void Render(IDrawingContextImpl context) => context.DrawEllipse(Brush, Pen, Rect);
public override bool HitTest(Point p)
public override bool HitTestTransformed(Point p)
{
var center = Rect.Center;

2
src/Avalonia.Base/Rendering/SceneGraph/ExperimentalAcrylicNode.cs

@ -65,6 +65,6 @@ namespace Avalonia.Rendering.SceneGraph
}
/// <inheritdoc/>
public override bool HitTest(Point p) => Rect.Rect.ContainsExclusive(p);
public override bool HitTestTransformed(Point p) => Rect.Rect.ContainsExclusive(p);
}
}

2
src/Avalonia.Base/Rendering/SceneGraph/GeometryNode.cs

@ -64,7 +64,7 @@ namespace Avalonia.Rendering.SceneGraph
}
/// <inheritdoc/>
public override bool HitTest(Point p)
public override bool HitTestTransformed(Point p)
{
return (Brush != null && Geometry.FillContains(p)) ||
(Pen != null && Geometry.StrokeContains(Pen, p));

2
src/Avalonia.Base/Rendering/SceneGraph/GlyphRunNode.cs

@ -53,7 +53,7 @@ namespace Avalonia.Rendering.SceneGraph
}
/// <inheritdoc/>
public override bool HitTest(Point p) => Bounds.ContainsExclusive(p);
public override bool HitTestTransformed(Point p) => Bounds.ContainsExclusive(p);
public override void Dispose()
{

2
src/Avalonia.Base/Rendering/SceneGraph/ImageNode.cs

@ -94,7 +94,7 @@ namespace Avalonia.Rendering.SceneGraph
}
/// <inheritdoc/>
public override bool HitTest(Point p) => DestRect.ContainsExclusive(p);
public override bool HitTestTransformed(Point p) => DestRect.ContainsExclusive(p);
public override void Dispose()
{

2
src/Avalonia.Base/Rendering/SceneGraph/LineNode.cs

@ -66,7 +66,7 @@ namespace Avalonia.Rendering.SceneGraph
context.DrawLine(Pen, P1, P2);
}
public override bool HitTest(Point p)
public override bool HitTestTransformed(Point p)
{
var halfThickness = Pen.Thickness / 2;
var minX = Math.Min(P1.X, P2.X) - halfThickness;

2
src/Avalonia.Base/Rendering/SceneGraph/OpacityMaskNode.cs

@ -30,7 +30,7 @@ namespace Avalonia.Rendering.SceneGraph
/// <inheritdoc/>
public override bool HitTest(Point p) => false;
public override bool HitTestTransformed(Point p) => false;
/// <summary>
/// Determines if this draw operation equals another.

2
src/Avalonia.Base/Rendering/SceneGraph/RectangleNode.cs

@ -74,7 +74,7 @@ namespace Avalonia.Rendering.SceneGraph
public override void Render(IDrawingContextImpl context) => context.DrawRectangle(Brush, Pen, Rect, BoxShadows);
/// <inheritdoc/>
public override bool HitTest(Point p)
public override bool HitTestTransformed(Point p)
{
if (Brush != null)
{

4
src/Browser/Avalonia.Browser/WindowingPlatform.cs

@ -14,11 +14,11 @@ namespace Avalonia.Browser
private bool _signaled;
private static KeyboardDevice? s_keyboard;
public IWindowImpl CreateWindow() => throw new NotSupportedException();
public IWindowImpl CreateWindow() => throw new NotSupportedException("Browser doesn't support windowing platform. In order to display a single-view content, set ISingleViewApplicationLifetime.MainView.");
IWindowImpl IWindowingPlatform.CreateEmbeddableWindow()
{
throw new NotImplementedException();
throw new NotImplementedException("Browser doesn't support embeddable windowing platform.");
}
public ITrayIconImpl? CreateTrayIcon()

18
tests/Avalonia.Base.UnitTests/Rendering/SceneGraph/DrawOperationTests.cs

@ -74,6 +74,22 @@ namespace Avalonia.Base.UnitTests.Rendering.SceneGraph
geometryNode.HitTest(new Point());
}
[Fact]
public void HitTest_RectangleNode_With_Transform_Hits()
{
var geometry = Mock.Of<IGeometryImpl>();
var geometryNode = new RectangleNode(
Matrix.CreateTranslation(20,20),
Brushes.Black,
null,
new RoundedRect(new Rect(0,0,10,10)),
default);
var actual = geometryNode.HitTest(new Point(25,25));
Assert.True(actual);
}
private class TestRectangleDrawOperation : RectangleNode
{
public TestRectangleDrawOperation(Rect bounds, Matrix transform, Pen pen)
@ -82,7 +98,7 @@ namespace Avalonia.Base.UnitTests.Rendering.SceneGraph
}
public override bool HitTest(Point p) => false;
public override bool HitTestTransformed(Point p) => false;
public override void Render(IDrawingContextImpl context) { }
}

Loading…
Cancel
Save