Browse Source

Merge branch 'release/11.2' into release/11.2.2

release/11.2.2 11.2.2
Max Katz 1 year ago
parent
commit
578bdc7e02
  1. 9
      native/Avalonia.Native/src/OSX/StorageProvider.mm
  2. 9
      src/Avalonia.Base/Layout/LayoutManager.cs
  3. 61
      tests/Avalonia.Base.UnitTests/Layout/LayoutableTests_EffectiveViewportChanged.cs

9
native/Avalonia.Native/src/OSX/StorageProvider.mm

@ -173,8 +173,7 @@ public:
if(initialDirectory != nullptr) if(initialDirectory != nullptr)
{ {
auto directoryString = [NSString stringWithUTF8String:initialDirectory]; auto directoryString = [NSString stringWithUTF8String:initialDirectory];
panel.directoryURL = [NSURL fileURLWithPath:directoryString panel.directoryURL = [NSURL URLWithString:directoryString];
isDirectory:true];
} }
auto handler = ^(NSModalResponse result) { auto handler = ^(NSModalResponse result) {
@ -239,8 +238,7 @@ public:
if(initialDirectory != nullptr) if(initialDirectory != nullptr)
{ {
auto directoryString = [NSString stringWithUTF8String:initialDirectory]; auto directoryString = [NSString stringWithUTF8String:initialDirectory];
panel.directoryURL = [NSURL fileURLWithPath:directoryString panel.directoryURL = [NSURL URLWithString:directoryString];
isDirectory:true];
} }
if(initialFile != nullptr) if(initialFile != nullptr)
@ -309,8 +307,7 @@ public:
if(initialDirectory != nullptr) if(initialDirectory != nullptr)
{ {
auto directoryString = [NSString stringWithUTF8String:initialDirectory]; auto directoryString = [NSString stringWithUTF8String:initialDirectory];
panel.directoryURL = [NSURL fileURLWithPath:directoryString panel.directoryURL = [NSURL URLWithString:directoryString];
isDirectory:true];
} }
if(initialFile != nullptr) if(initialFile != nullptr)

9
src/Avalonia.Base/Layout/LayoutManager.cs

@ -213,9 +213,7 @@ namespace Avalonia.Layout
void ILayoutManager.RegisterEffectiveViewportListener(Layoutable control) void ILayoutManager.RegisterEffectiveViewportListener(Layoutable control)
{ {
_effectiveViewportChangedListeners ??= new List<EffectiveViewportChangedListener>(); _effectiveViewportChangedListeners ??= new List<EffectiveViewportChangedListener>();
_effectiveViewportChangedListeners.Add(new EffectiveViewportChangedListener( _effectiveViewportChangedListeners.Add(new EffectiveViewportChangedListener(control));
control,
CalculateEffectiveViewport(control)));
} }
void ILayoutManager.UnregisterEffectiveViewportListener(Layoutable control) void ILayoutManager.UnregisterEffectiveViewportListener(Layoutable control)
@ -438,14 +436,13 @@ namespace Avalonia.Layout
private class EffectiveViewportChangedListener private class EffectiveViewportChangedListener
{ {
public EffectiveViewportChangedListener(Layoutable listener, Rect viewport) public EffectiveViewportChangedListener(Layoutable listener)
{ {
Listener = listener; Listener = listener;
Viewport = viewport;
} }
public Layoutable Listener { get; } public Layoutable Listener { get; }
public Rect Viewport { get; set; } public Rect? Viewport { get; set; }
} }
private enum ArrangeResult private enum ArrangeResult

61
tests/Avalonia.Base.UnitTests/Layout/LayoutableTests_EffectiveViewportChanged.cs

@ -14,7 +14,7 @@ namespace Avalonia.Base.UnitTests.Layout
public class LayoutableTests_EffectiveViewportChanged public class LayoutableTests_EffectiveViewportChanged
{ {
[Fact] [Fact]
public async Task EffectiveViewportChanged_Not_Raised_When_Control_Added_To_Tree() public async Task EffectiveViewportChanged_Not_Raised_When_Control_Added_To_Tree_And_Layout_Pass_Has_Not_Run()
{ {
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously #pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
await RunOnUIThread.Execute(async () => await RunOnUIThread.Execute(async () =>
@ -34,6 +34,60 @@ namespace Avalonia.Base.UnitTests.Layout
Assert.Equal(0, raised); Assert.Equal(0, raised);
}); });
} }
[Fact]
public async Task EffectiveViewportChanged_Raised_When_Control_Added_To_Tree_And_Layout_Pass_Has_Run()
{
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
await RunOnUIThread.Execute(async () =>
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
{
var root = CreateRoot();
var target = new Canvas();
var raised = 0;
target.EffectiveViewportChanged += (s, e) =>
{
++raised;
};
root.Child = target;
Assert.Equal(0, raised);
await ExecuteInitialLayoutPass(root);
Assert.Equal(1, raised);
});
}
[Fact]
public async Task EffectiveViewportChanged_Raised_When_Root_LayedOut_And_Then_Control_Added_To_Tree_And_Layout_Pass_Runs()
{
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
await RunOnUIThread.Execute(async () =>
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
{
var root = CreateRoot();
var target = new Canvas();
var raised = 0;
target.EffectiveViewportChanged += (s, e) =>
{
++raised;
};
await ExecuteInitialLayoutPass(root);
root.Child = target;
Assert.Equal(0, raised);
await ExecuteInitialLayoutPass(root);
Assert.Equal(1, raised);
});
}
[Fact] [Fact]
public async Task EffectiveViewportChanged_Raised_Before_LayoutUpdated() public async Task EffectiveViewportChanged_Raised_Before_LayoutUpdated()
@ -268,8 +322,11 @@ namespace Avalonia.Base.UnitTests.Layout
root.Child = parent; root.Child = parent;
await ExecuteInitialLayoutPass(root);
target.EffectiveViewportChanged += (s, e) => ++raised; target.EffectiveViewportChanged += (s, e) => ++raised;
await ExecuteInitialLayoutPass(root);
raised = 0; // The initial layout pass is expected to raise.
target.RenderTransform = new TranslateTransform { X = 8 }; target.RenderTransform = new TranslateTransform { X = 8 };
target.InvalidateMeasure(); target.InvalidateMeasure();
await ExecuteLayoutPass(root); await ExecuteLayoutPass(root);

Loading…
Cancel
Save