committed by
GitHub
14 changed files with 371 additions and 22 deletions
@ -1,12 +1,19 @@ |
|||||
// Copyright (c) The Avalonia Project. All rights reserved.
|
// Copyright (c) The Avalonia Project. All rights reserved.
|
||||
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
||||
|
|
||||
|
using System.Collections; |
||||
|
using System.Collections.Specialized; |
||||
|
|
||||
namespace Avalonia.Controls.Presenters |
namespace Avalonia.Controls.Presenters |
||||
{ |
{ |
||||
public interface IItemsPresenter : IPresenter |
public interface IItemsPresenter : IPresenter |
||||
{ |
{ |
||||
|
IEnumerable Items { get; set; } |
||||
|
|
||||
IPanel Panel { get; } |
IPanel Panel { get; } |
||||
|
|
||||
|
void ItemsChanged(NotifyCollectionChangedEventArgs e); |
||||
|
|
||||
void ScrollIntoView(object item); |
void ScrollIntoView(object item); |
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -0,0 +1,39 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.UnitTests; |
||||
|
using Avalonia.VisualTree; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Avalonia.Input.UnitTests |
||||
|
{ |
||||
|
public class PointerTests |
||||
|
{ |
||||
|
[Fact] |
||||
|
public void On_Capture_Transfer_PointerCaptureLost_Should_Propagate_Up_To_The_Common_Parent() |
||||
|
{ |
||||
|
Border initialParent, initialCapture, newParent, newCapture; |
||||
|
var el = new StackPanel |
||||
|
{ |
||||
|
Children = |
||||
|
{ |
||||
|
(initialParent = new Border { Child = initialCapture = new Border() }), |
||||
|
(newParent = new Border { Child = newCapture = new Border() }) |
||||
|
} |
||||
|
}; |
||||
|
var receivers = new List<object>(); |
||||
|
var root = new TestRoot(el); |
||||
|
foreach (InputElement d in root.GetSelfAndVisualDescendants()) |
||||
|
d.PointerCaptureLost += (s, e) => receivers.Add(s); |
||||
|
var pointer = new Pointer(Pointer.GetNextFreeId(), PointerType.Mouse, true); |
||||
|
|
||||
|
pointer.Capture(initialCapture); |
||||
|
pointer.Capture(newCapture); |
||||
|
Assert.True(receivers.SequenceEqual(new[] { initialCapture, initialParent })); |
||||
|
|
||||
|
receivers.Clear(); |
||||
|
pointer.Capture(null); |
||||
|
Assert.True(receivers.SequenceEqual(new object[] { newCapture, newParent, el, root })); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue