123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #nullable enable
- using System;
- using Avalonia.Controls;
- using Avalonia.Controls.Presenters;
- using Avalonia.Controls.Templates;
- using Avalonia.Input;
- using Avalonia.Input.Raw;
- using Avalonia.Platform;
- using Avalonia.Rendering;
- using Avalonia.Rendering.Composition;
- using Avalonia.UnitTests;
- using Avalonia.VisualTree;
- using Moq;
- namespace Avalonia.Base.UnitTests.Input;
- public abstract class PointerTestsBase : ScopedTestBase
- {
- protected class TestPointer : Pointer
- {
- internal int PlatformCaptureCalled = 0;
- internal TestPointer(int id, PointerType type, bool isPrimary) : base(id, type, isPrimary) { }
- protected override void PlatformCapture(IInputElement? element)
- {
- PlatformCaptureCalled++;
- }
- }
- private protected static void SetHit(Mock<IHitTester> renderer, Control? hit)
- {
- renderer.Setup(x => x.HitTest(It.IsAny<Point>(), It.IsAny<Visual>(), It.IsAny<Func<Visual, bool>>()))
- .Returns(hit is null ? Array.Empty<Control>() : new[] { hit });
- renderer.Setup(x => x.HitTestFirst(It.IsAny<Point>(), It.IsAny<Visual>(), It.IsAny<Func<Visual, bool>>()))
- .Returns(hit);
- }
- protected static void SetMove(Mock<IPointerDevice> deviceMock, IInputRoot root, IInputElement element)
- {
- deviceMock.Setup(d => d.ProcessRawEvent(It.IsAny<RawPointerEventArgs>()))
- .Callback(() => element.RaiseEvent(CreatePointerMovedArgs(root, element)));
- }
- private protected static Mock<IWindowImpl> CreateTopLevelImplMock()
- {
- var impl = new Mock<IWindowImpl>();
- impl.DefaultValue = DefaultValue.Mock;
- impl.SetupAllProperties();
- impl.SetupGet(r => r.RenderScaling).Returns(1);
- impl.Setup(r => r.TryGetFeature(It.IsAny<Type>())).Returns(null);
- impl.Setup(r => r.Compositor).Returns(RendererMocks.CreateDummyCompositor());
- impl.Setup(r => r.PointToScreen(It.IsAny<Point>())).Returns<Point>(p => new PixelPoint((int)p.X, (int)p.Y));
- impl.Setup(r => r.PointToClient(It.IsAny<PixelPoint>())).Returns<PixelPoint>(p => new Point(p.X, p.Y));
-
- var screen1 = new Mock<Screen>(1.75, new PixelRect(new PixelSize(1920, 1080)), new PixelRect(new PixelSize(1920, 966)), true);
- var screens = new Mock<IScreenImpl>();
- screens.Setup(x => x.ScreenFromWindow(It.IsAny<IWindowBaseImpl>())).Returns(screen1.Object);
- impl.Setup(x => x.TryGetFeature(It.Is<Type>(t => t == typeof(IScreenImpl)))).Returns(screens.Object);
- return impl;
- }
- private protected static TopLevel CreateInputRoot(IWindowImpl impl, Control child, IHitTester hitTester)
- {
- var root = new Window(impl)
- {
- Width = 100,
- Height = 100,
- Content = child,
- Template = new FuncControlTemplate<Window>((w, _) => new ContentPresenter { Content = w.Content }),
- HitTesterOverride = hitTester
- };
- root.Show();
- return root;
- }
- protected static RawPointerEventArgs CreateRawPointerArgs(
- IPointerDevice pointerDevice,
- IInputRoot root,
- RawPointerEventType type,
- Point? position = default)
- {
- return new RawPointerEventArgs(pointerDevice, 0, root, type, position ?? default, default);
- }
- protected static RawPointerEventArgs CreateRawPointerMovedArgs(
- IPointerDevice pointerDevice,
- IInputRoot root,
- Point? position = null)
- {
- return new RawPointerEventArgs(pointerDevice, 0, root, RawPointerEventType.Move,
- position ?? default, default);
- }
- protected static PointerEventArgs CreatePointerMovedArgs(
- IInputRoot root, IInputElement? source, Point? position = null)
- {
- return new PointerEventArgs(InputElement.PointerMovedEvent, source, new Mock<IPointer>().Object, (Visual)root,
- position ?? default, default, PointerPointProperties.None, KeyModifiers.None);
- }
- protected static Mock<IPointerDevice> CreatePointerDeviceMock(
- IPointer? pointer = null,
- PointerType pointerType = PointerType.Mouse)
- {
- if (pointer is null)
- {
- var pointerMock = new Mock<IPointer>();
- pointerMock.SetupGet(p => p.Type).Returns(pointerType);
- pointer = pointerMock.Object;
- }
- var pointerDevice = new Mock<IPointerDevice>();
- pointerDevice.Setup(d => d.TryGetPointer(It.IsAny<RawPointerEventArgs>()))
- .Returns(pointer);
- return pointerDevice;
- }
- }
|